コンテンツにスキップ

REF-002 ID の定義と参照

定義ファイル(要件書など)で宣言された ID と、他ファイル(テストや設計書など)からの参照が双方向で整合していることを検証します。プロジェクトスコープ のルールで、include で読み込んだ全ドキュメントを横断して評価されます。

  • 参照されているが定義が無い ID → error
  • 定義されているが参照されていない ID → warning

要件 ID は定義ファイル(requirements.md など)で宣言され、テスト・設計・実装ドキュメントから参照される構造になりがちです。要件をリネームしたり削除したりしても、参照側のドキュメントは自動では追従しません。逆に、定義した要件がどこからも参照されていなければ、その要件は実装やテストに繋がっていない可能性があります。このルールは双方向のトレーサビリティを機械的に検証します。

フィールド必須説明
definitionsstringID を定義するファイルの glob
referencesstring[]ID を参照するファイルの glob 配列
idColumnstring定義ファイルで ID が格納されているカラム名
idPatternstringID として扱う値の正規表現

idPattern は定義側のテーブル列の値、参照側ドキュメント内のテキスト両方の照合に使われます。プレーンテキスト中のトークンも対象なので、ID らしくない単語を誤って拾わないよう、明示的なプレフィックス(^REQ- など)を含めるのが安全です。

docs/requirements.md:
| ID | 内容 |
| ------ | ---------------- |
| REQ-01 | ユーザー登録 |
| REQ-02 | パスワード再設定 |
docs/tests.md:
- REQ-01 のテストは ...
- REQ-99 のテストは ...

REQ-99 が定義されていないため error、REQ-02 がどこからも参照されていないため warning になります。

docs/tests.md
line 2 error ID "REQ-99" is referenced but not defined in any definition file REF-002
docs/requirements.md
line 4 warning ID "REQ-02" is defined but never referenced REF-002

定義側にない REQ-99REQ-02 に修正し、REQ-02 が参照されるようにします。

docs/tests.md:
- REQ-01 のテストは ...
- REQ-02 のテストは ...
{
"rule": "ref002",
"options": {
"definitions": "**/requirements.md",
"references": ["**/tests.md", "**/design.md"],
"idColumn": "ID",
"idPattern": "^REQ-\\d+$"
}
}