ai-check-template 0.2.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +201 -0
  2. package/README-ja.md +151 -0
  3. package/README.md +149 -0
  4. package/bin/ai-check-template.mjs +7 -0
  5. package/docs/cli.md +348 -0
  6. package/package-templates/.claude/README.md +83 -0
  7. package/package-templates/.claude/rules/test-rules.md +46 -0
  8. package/package-templates/.claude/settings.hook-fragment.json +25 -0
  9. package/package-templates/README.md +56 -0
  10. package/package-templates/ci-examples/README.md +134 -0
  11. package/package-templates/ci-examples/github-actions/ai-check-fast.yml +49 -0
  12. package/package-templates/ci-examples/github-actions/ai-check.yml +58 -0
  13. package/package-templates/ci-examples/github-actions/ai-quality-call.yml +26 -0
  14. package/package-templates/ci-examples/github-actions/ai-quality-reusable.yml +113 -0
  15. package/package-templates/docs/philosophy/formal-name-match.md +182 -0
  16. package/package-templates/docs/philosophy/given-when-then.md +206 -0
  17. package/package-templates/docs/philosophy/qa-techniques.md +235 -0
  18. package/package-templates/docs/philosophy/test-pyramid.md +171 -0
  19. package/package-templates/docs/test-design-template.md +173 -0
  20. package/package-templates/package.scripts.fragment.json +6 -0
  21. package/package-templates/profiles/README.md +89 -0
  22. package/package-templates/profiles/expo-rn/README.md +80 -0
  23. package/package-templates/profiles/node-cli/README.md +93 -0
  24. package/package-templates/profiles/react-nextjs/README.md +82 -0
  25. package/package-templates/profiles/react-vanilla/README.md +73 -0
  26. package/package-templates/profiles/supabase-rls/README.md +89 -0
  27. package/package-templates/prompts/README.md +94 -0
  28. package/package-templates/prompts/boundary-value.md +94 -0
  29. package/package-templates/prompts/decision-table.md +82 -0
  30. package/package-templates/prompts/diagnostic-repair.md +149 -0
  31. package/package-templates/prompts/plan-first.md +122 -0
  32. package/package-templates/prompts/rls-permission.md +94 -0
  33. package/package-templates/prompts/state-transition.md +81 -0
  34. package/package-templates/scripts/README.md +78 -0
  35. package/package-templates/scripts/ai-check-fast.sh +20 -0
  36. package/package-templates/scripts/ai-check.sh +22 -0
  37. package/package.json +47 -0
  38. package/src/cli/ci-workflows.mjs +104 -0
  39. package/src/cli/claude-hooks.mjs +94 -0
  40. package/src/cli/dependency-installer.mjs +164 -0
  41. package/src/cli/doctor.mjs +392 -0
  42. package/src/cli/index.mjs +80 -0
  43. package/src/cli/init.mjs +433 -0
  44. package/src/cli/install-state.mjs +242 -0
  45. package/src/cli/package-manager.mjs +78 -0
  46. package/src/cli/profile-diagnostics.mjs +160 -0
  47. package/src/cli/profile-docs.mjs +31 -0
  48. package/src/cli/profile-scripts.mjs +96 -0
  49. package/src/cli/profile.mjs +59 -0
  50. package/src/cli/update.mjs +537 -0
  51. package/src/cli/utils.mjs +75 -0
@@ -0,0 +1,134 @@
1
+ # CI Examples
2
+
3
+ `package-templates` から配布する CI 統合の **example**。本パッケージは特定の CI ツールに縛られないため、各 CI 環境向けの YAML / 設定ファイルを「例」として提供し、利用者は自プロジェクトの CI に合わせてカスタマイズする。
4
+
5
+ > **ステータス**: v0.1 template set(Phase 1 dogfooding 後に改訂予定)
6
+
7
+ ## ディレクトリ構成
8
+
9
+ ```
10
+ ci-examples/
11
+ ├── README.md # このファイル
12
+ └── github-actions/
13
+ ├── ai-check.yml # direct workflow: full check(push / PR 全体)
14
+ ├── ai-check-fast.yml # direct workflow: fast check(PR のみ、軽量)
15
+ ├── ai-quality-reusable.yml # reusable workflow 本体
16
+ └── ai-quality-call.yml # reusable workflow を呼ぶ caller
17
+ ```
18
+
19
+ 将来の追加候補(別 SPEC で対応):
20
+ - `gitlab-ci/` — GitLab CI 用
21
+ - `circleci/` — CircleCI 用
22
+ - `bitbucket-pipelines/` — Bitbucket Pipelines 用
23
+
24
+ GitHub Actions が最初の対象である理由は、OSS / 個人開発を含む採用率が高く、PR Gate として導入しやすいため。
25
+
26
+ ## どれを使うか
27
+
28
+ | 方式 | ファイル | 向いているケース |
29
+ |---|---|---|
30
+ | Direct full | `github-actions/ai-check.yml` | まず 1 つの workflow で `pnpm ai:check` を走らせたい |
31
+ | Direct fast | `github-actions/ai-check-fast.yml` | PR push ごとに軽量な `pnpm ai:check:fast` を走らせたい |
32
+ | Reusable | `github-actions/ai-quality-reusable.yml` + `ai-quality-call.yml` | install / check の共通ロジックを 1 か所に寄せたい |
33
+
34
+ 最初の導入は direct workflow が簡単。複数 workflow や複数リポで同じ品質ゲートを共有したくなったら reusable workflow に移行する。
35
+
36
+ ## 思想
37
+
38
+ 本パッケージの設計思想に基づく **AI 内部ループ(fast)+ PR Gate(full)のハイブリッド**構成。
39
+
40
+ ```
41
+ [ローカル開発] [CI]
42
+ Claude Code Edit hook ─→ ai:check:fast ─→ ai-check-fast.yml (PR)
43
+ (Static + Unit)
44
+
45
+ AI 修正ループ
46
+
47
+ 人間が PR push
48
+
49
+ ai:check (full) ─→ ai-check.yml (PR + push main)
50
+ (+ Diagnostic + E2E)
51
+ ```
52
+
53
+ - **fast** = Static + Unit のみ。AI の Edit ごとに走る軽量チェック
54
+ - **full** = fast + Diagnostic(React Doctor / Knip / Semgrep 等)+ E2E。PR / merge 時の重い検証
55
+
56
+ 詳細な思想は以下を参照:
57
+ - [`../docs/philosophy/formal-name-match.md`](../docs/philosophy/formal-name-match.md) — 形名参同(事前宣言「名」と実測「形」の照合)
58
+ - [`../docs/philosophy/test-pyramid.md`](../docs/philosophy/test-pyramid.md) — Static / Unit / Integration / E2E / DB-RLS / Monitoring の責務分割
59
+
60
+ ## カスタマイズ指針
61
+
62
+ 各 YAML 内のコメントに従って以下を調整する。
63
+
64
+ ### 1. パッケージマネージャ
65
+
66
+ デフォルトは `pnpm`。他の PM を使う場合は `pnpm/action-setup` を差し替え:
67
+
68
+ | PM | setup action | install command |
69
+ |---|---|---|
70
+ | pnpm | `pnpm/action-setup@v4` | `pnpm install --frozen-lockfile` |
71
+ | npm | (不要) | `npm ci` |
72
+ | yarn | (Node 24+ では Corepack) | `yarn install --frozen-lockfile` |
73
+ | bun | `oven-sh/setup-bun@v2` | `bun install --frozen-lockfile` |
74
+
75
+ `actions/setup-node` の `cache:` キーも対応する PM 名に変更する。Reusable workflow を使う場合は `package-manager` input を変更する。
76
+
77
+ ### 2. Node version
78
+
79
+ デフォルトは `22`。プロジェクトの `.nvmrc` / `engines.node` に合わせて調整。LTS(偶数 major)を推奨。
80
+
81
+ ### 3. reusable workflow inputs
82
+
83
+ `ai-quality-reusable.yml` は以下の inputs を持つ:
84
+
85
+ | input | default | 用途 |
86
+ |---|---|---|
87
+ | `package-manager` | `pnpm` | `pnpm`, `npm`, `yarn`, `bun` の install path を選ぶ |
88
+ | `node-version` | `22` | npm / pnpm / yarn 用 Node.js version |
89
+ | `install-command` | 空 | 独自 install command を指定。空なら PM ごとの default を使う |
90
+ | `check-command` | `pnpm ai:check` | 実行する品質ゲート |
91
+ | `working-directory` | `.` | monorepo などでコマンドを実行するディレクトリ |
92
+ | `timeout-minutes` | `30` | job timeout |
93
+ | `upload-ai-check-artifacts` | `false` | `.ai-check/` を artifact upload するか |
94
+
95
+ 例:
96
+
97
+ ```yaml
98
+ jobs:
99
+ ai-quality:
100
+ uses: ./.github/workflows/ai-quality-reusable.yml
101
+ with:
102
+ package-manager: pnpm
103
+ node-version: "22"
104
+ check-command: pnpm ai:check
105
+ ```
106
+
107
+ ### 4. 任意ツールの有効化
108
+
109
+ `pnpm ai:check` の中身(`package.json` scripts)でツールを有効化する。本 YAML 自体は `pnpm ai:check` を呼ぶだけなので、ツール選定は利用者の責任。代表的な構成:
110
+
111
+ - React / Next.js: TypeScript + ESLint(oxlint) + React Doctor + Knip + Playwright + Semgrep
112
+ - Node CLI: TypeScript + ESLint + Vitest + Knip + Semgrep
113
+ - Pure React: TypeScript + ESLint + React Doctor + Knip + Playwright
114
+
115
+ ### 5. timeout 調整
116
+
117
+ - `ai-check.yml`: default 30 分。E2E が長い場合は伸ばす
118
+ - `ai-check-fast.yml`: default 10 分。fast の意義を保つため上げない(上げる場合はそもそも fast でない)
119
+ - `ai-quality-reusable.yml`: caller 側の `timeout-minutes` input で調整
120
+
121
+ ### 6. third-party action の version pin
122
+
123
+ セキュリティ要件が厳しい組織では、major version pin(`@v5`)ではなく SHA pin(`@<commit-sha>`)に変更する。Dependabot 等で自動更新する運用が必要。
124
+
125
+ ## なぜ「example」扱いか
126
+
127
+ CI ツールごとに syntax が異なるため、本パッケージは **CI 統合を強制しない**。各 CI 向けの YAML / 設定は「出発点としての example」と位置付け、利用者は自プロジェクトの CI に合わせてカスタマイズする。
128
+
129
+ これは本パッケージの**汎用ファースト原則**に基づく。特定 CI(GitHub Actions 等)に強く依存した設計を全利用者に強制せず、思想(形名参同 / 責務分割 / ハイブリッドループ)の方を共有する。
130
+
131
+ ## 出典
132
+
133
+ - Notion ページ: `c3e549660ca44005a20c4f6fdb54c8d5` — 無料で作る AI エージェント開発診断フロー(参照日 2026-05-13)の「## CIに入れるなら」節
134
+ - 一次資料: GitHub Actions 公式 docs(actions/checkout, actions/setup-node, pnpm/action-setup 等)
@@ -0,0 +1,49 @@
1
+ # ai-check-fast.yml — fast check workflow(PR のみ、軽い検証)
2
+ #
3
+ # 配布される example。本リポ自身用ではなく、利用者がコピーして自プロジェクトの
4
+ # .github/workflows/ に配置して使うことを想定。
5
+ #
6
+ # 思想:
7
+ # - Edit hook(fast)と同じセットを CI でも実行し、AI 内部ループと PR Gate を同期
8
+ # - Static check + Unit test までに限定(Integration / E2E / Diagnostic は `ai-check.yml` 側)
9
+ # - PR push のたびに走るため timeout は短く保つ(10 分以内目安)
10
+ #
11
+ # Edit hook との同期:
12
+ # - Claude Code の Edit hook で `pnpm ai:check:fast` を実行する設定と同じスクリプトを呼ぶ
13
+ # - 詳細は package-templates/.claude/settings.hook-fragment.json(別 SPEC で提供予定)
14
+ #
15
+ # カスタマイズ可能箇所:
16
+ # 1. パッケージマネージャ・Node version(ai-check.yml と同様)
17
+ # 2. timeout — fast の意義を保つため 10 分以内推奨
18
+
19
+ name: AI Check (Fast)
20
+
21
+ on:
22
+ pull_request:
23
+
24
+ permissions:
25
+ contents: read
26
+
27
+ jobs:
28
+ ai-check-fast:
29
+ runs-on: ubuntu-latest
30
+ timeout-minutes: 10
31
+ steps:
32
+ - uses: actions/checkout@v5
33
+
34
+ - uses: pnpm/action-setup@v4
35
+ with:
36
+ version: 10
37
+
38
+ - uses: actions/setup-node@v5
39
+ with:
40
+ node-version: 22
41
+ cache: pnpm
42
+
43
+ - name: Install dependencies
44
+ run: pnpm install --frozen-lockfile
45
+
46
+ # ai:check:fast は package.scripts.fragment.json で定義する軽量スクリプト
47
+ # 例: "ai:check:fast": "pnpm typecheck && pnpm lint && pnpm test:unit"
48
+ - name: Run ai:check:fast
49
+ run: pnpm ai:check:fast
@@ -0,0 +1,58 @@
1
+ # ai-check.yml — full check workflow(push / PR 全体)
2
+ #
3
+ # 配布される example。本リポ自身用ではなく、利用者がコピーして自プロジェクトの
4
+ # .github/workflows/ に配置して使うことを想定。
5
+ #
6
+ # 思想:
7
+ # - 形名参同(formal-name-match.md): 事前宣言した「名」と実測「形」を CI で照合
8
+ # - PR Gate(full)= Edit hook(fast)と対をなすハイブリッド構成の片方
9
+ # - 重い検証(React Doctor / Knip / Playwright / Semgrep 等)は本 workflow に集約
10
+ #
11
+ # カスタマイズ可能箇所:
12
+ # 1. パッケージマネージャ(pnpm / npm / yarn / bun)— `pnpm/action-setup` を差し替え
13
+ # 2. Node version — `node-version` を変更
14
+ # 3. timeout — プロジェクトの E2E 等の重さに応じて調整
15
+ # 4. artifact upload — diagnostic ログを残したい場合は末尾コメント部を有効化
16
+
17
+ name: AI Check
18
+
19
+ on:
20
+ pull_request:
21
+ push:
22
+ branches: [main]
23
+
24
+ permissions:
25
+ contents: read
26
+
27
+ jobs:
28
+ ai-check:
29
+ runs-on: ubuntu-latest
30
+ timeout-minutes: 30
31
+ steps:
32
+ - uses: actions/checkout@v5
33
+
34
+ # パッケージマネージャは利用プロジェクトに合わせて差し替え可
35
+ - uses: pnpm/action-setup@v4
36
+ with:
37
+ version: 10
38
+
39
+ - uses: actions/setup-node@v5
40
+ with:
41
+ node-version: 22
42
+ cache: pnpm
43
+
44
+ - name: Install dependencies
45
+ run: pnpm install --frozen-lockfile
46
+
47
+ # ai:check は package.scripts.fragment.json に定義する統合スクリプト
48
+ # 例: "ai:check": "pnpm typecheck && pnpm lint && pnpm test && pnpm test:e2e:smoke"
49
+ - name: Run ai:check
50
+ run: pnpm ai:check
51
+
52
+ # 形名照合の結果を artifact として保存する場合(オプション):
53
+ # - name: Upload diagnostic logs
54
+ # if: always()
55
+ # uses: actions/upload-artifact@v4
56
+ # with:
57
+ # name: ai-check-logs
58
+ # path: .ai-check/
@@ -0,0 +1,26 @@
1
+ # ai-quality-call.yml — caller workflow for ai-quality-reusable.yml
2
+ #
3
+ # Copy both files into your project's .github/workflows/ directory:
4
+ # - ai-quality-reusable.yml
5
+ # - ai-quality-call.yml
6
+ #
7
+ # The caller stays small while the reusable workflow keeps the install/check
8
+ # details in one place.
9
+
10
+ name: AI Quality
11
+
12
+ on:
13
+ pull_request:
14
+ push:
15
+ branches: [main]
16
+
17
+ permissions:
18
+ contents: read
19
+
20
+ jobs:
21
+ ai-quality:
22
+ uses: ./.github/workflows/ai-quality-reusable.yml
23
+ with:
24
+ package-manager: pnpm
25
+ node-version: "22"
26
+ check-command: pnpm ai:check
@@ -0,0 +1,113 @@
1
+ # ai-quality-reusable.yml — reusable workflow for ai:check
2
+ #
3
+ # Copy this file into .github/workflows/ai-quality-reusable.yml in your project.
4
+ # Then call it from a small workflow like ai-quality-call.yml.
5
+ #
6
+ # This is still an example, not a hosted workflow contract. Pin to a released
7
+ # tag when you copy from this repository.
8
+
9
+ name: AI Quality Reusable
10
+
11
+ on:
12
+ workflow_call:
13
+ inputs:
14
+ package-manager:
15
+ description: "pnpm, npm, yarn, or bun"
16
+ required: false
17
+ type: string
18
+ default: pnpm
19
+ node-version:
20
+ description: "Node.js version for npm, pnpm, and yarn projects"
21
+ required: false
22
+ type: string
23
+ default: "22"
24
+ install-command:
25
+ description: "Optional custom install command"
26
+ required: false
27
+ type: string
28
+ default: ""
29
+ check-command:
30
+ description: "Command that runs the project quality gate"
31
+ required: false
32
+ type: string
33
+ default: "pnpm ai:check"
34
+ working-directory:
35
+ description: "Directory where install and check commands run"
36
+ required: false
37
+ type: string
38
+ default: "."
39
+ timeout-minutes:
40
+ description: "Job timeout"
41
+ required: false
42
+ type: number
43
+ default: 30
44
+ upload-ai-check-artifacts:
45
+ description: "Upload .ai-check/ after the run when present"
46
+ required: false
47
+ type: boolean
48
+ default: false
49
+
50
+ permissions:
51
+ contents: read
52
+
53
+ jobs:
54
+ ai-quality:
55
+ runs-on: ubuntu-latest
56
+ timeout-minutes: ${{ inputs.timeout-minutes }}
57
+ steps:
58
+ - uses: actions/checkout@v5
59
+
60
+ - uses: pnpm/action-setup@v4
61
+ if: ${{ inputs.package-manager == 'pnpm' }}
62
+ with:
63
+ version: 10
64
+
65
+ - uses: oven-sh/setup-bun@v2
66
+ if: ${{ inputs.package-manager == 'bun' }}
67
+
68
+ - uses: actions/setup-node@v5
69
+ if: ${{ inputs.package-manager != 'bun' }}
70
+ with:
71
+ node-version: ${{ inputs.node-version }}
72
+ cache: ${{ inputs.package-manager }}
73
+
74
+ - name: Enable Corepack
75
+ if: ${{ inputs.package-manager == 'pnpm' || inputs.package-manager == 'yarn' }}
76
+ run: corepack enable
77
+
78
+ - name: Install dependencies with custom command
79
+ if: ${{ inputs.install-command != '' }}
80
+ run: ${{ inputs.install-command }}
81
+ working-directory: ${{ inputs.working-directory }}
82
+
83
+ - name: Install dependencies with pnpm
84
+ if: ${{ inputs.install-command == '' && inputs.package-manager == 'pnpm' }}
85
+ run: pnpm install --frozen-lockfile
86
+ working-directory: ${{ inputs.working-directory }}
87
+
88
+ - name: Install dependencies with npm
89
+ if: ${{ inputs.install-command == '' && inputs.package-manager == 'npm' }}
90
+ run: npm ci
91
+ working-directory: ${{ inputs.working-directory }}
92
+
93
+ - name: Install dependencies with yarn
94
+ if: ${{ inputs.install-command == '' && inputs.package-manager == 'yarn' }}
95
+ run: yarn install --immutable
96
+ working-directory: ${{ inputs.working-directory }}
97
+
98
+ - name: Install dependencies with bun
99
+ if: ${{ inputs.install-command == '' && inputs.package-manager == 'bun' }}
100
+ run: bun install --frozen-lockfile
101
+ working-directory: ${{ inputs.working-directory }}
102
+
103
+ - name: Run AI quality gate
104
+ run: ${{ inputs.check-command }}
105
+ working-directory: ${{ inputs.working-directory }}
106
+
107
+ - name: Upload ai-check artifacts
108
+ if: ${{ always() && inputs.upload-ai-check-artifacts }}
109
+ uses: actions/upload-artifact@v4
110
+ with:
111
+ name: ai-check-artifacts
112
+ path: ${{ inputs.working-directory }}/.ai-check/
113
+ if-no-files-found: ignore
@@ -0,0 +1,182 @@
1
+ # 形名参同
2
+
3
+ > **ステータス**: Draft v0.1(Phase 1 dogfooding 後に改訂予定)
4
+
5
+ ## このファイルの守備範囲
6
+
7
+ AI 駆動開発における品質担保の中核概念「形名参同」を定義する。事前に宣言する成功基準(「名」)と、実装後の実測値(「形」)を照合する考え方と、AI 駆動開発における適用パターンを扱う。
8
+
9
+ 各層(Static / Unit / Integration / E2E / DB-RLS / Monitoring)への落とし込みは [`test-pyramid.md`](./test-pyramid.md)、観点設計の具体技法は [`qa-techniques.md`](./qa-techniques.md)、Given-When-Then 構文で「名」を表現する方法は [`given-when-then.md`](./given-when-then.md) を参照。
10
+
11
+ ## 概念定義
12
+
13
+ 形名参同(けいめいさんとう)は、**事前に宣言した成功基準(「名」)と、実装後の実測値(「形」)が一致しているか**を機械的に照合する考え方。
14
+
15
+ AI 駆動開発では、AI が「実装が完了しました」「テストは通っています」と自己申告することが多い。しかし AI 出力は非決定的であり、同じプロンプトでも結果が変わる。さらに「ベンチマーク高得点」と「実運用で壊れない」は同一ではない。
16
+
17
+ そのため、AI の自己申告を信用せず、**実装前に「何をもって正しいか」を宣言し、実装後にコマンドやテストの実測値と照合する**ことで、品質を担保する。
18
+
19
+ - **名(めい)**: 実装前に固定する成功基準
20
+ - **形(けい)**: 実装後の実測値(コマンド出力、テスト結果、ログ)
21
+
22
+ 両者が一致したときのみ「実装完了」と判定する。
23
+
24
+ ## 「名」と「形」の対応表
25
+
26
+ | 「名」(事前宣言) | 「形」(実測値) | 照合手段 |
27
+ |---|---|---|
28
+ | 型エラーが 0 件 | `tsc --noEmit` の終了コード | 0 == 0 ? |
29
+ | lint エラーが 0 件 | lint コマンドの終了コード | 0 == 0 ? |
30
+ | ユニットテスト全 pass | テストランナーの終了コード | 0 == 0 ? |
31
+ | カバレッジが閾値以上 | カバレッジレポート | actual >= threshold ? |
32
+ | 主要導線 E2E pass | E2E テストの終了コード | 0 == 0 ? |
33
+ | 静的解析スコアが閾値以上 | 静的解析ツールのスコア | actual >= threshold ? |
34
+ | 未使用 export が 0 件 | 未使用検出ツールの出力件数 | 0 == 0 ? |
35
+ | 受け入れ条件 AC-XX を満たす | AC-XX の検証コマンド出力 | output == expected ? |
36
+ | セキュリティ High/Critical が 0 件 | SAST ツールの出力 | 0 == 0 ? |
37
+ | API 応答が仕様通り | 契約テストの終了コード | 0 == 0 ? |
38
+
39
+ 「名」が曖昧(「いい感じに動く」「ちゃんと動く」)だと、「形」と照合できない。**「名」は実行可能な検証条件で表す**必要がある。
40
+
41
+ ## AI 駆動開発での適用
42
+
43
+ 形名参同を AI 駆動開発に適用すると、以下のループになる。
44
+
45
+ ```
46
+ 1. 人間が「名」を宣言する(成功基準を実行可能な形で定義)
47
+ 2. AI が Plan を出す(成功基準を満たすための設計)
48
+ 3. 人間が Plan を承認する
49
+ 4. AI が実装する
50
+ 5. AI が「形」を測定する(事前宣言したコマンドを実行)
51
+ 6. AI が「名」と「形」を照合し報告する
52
+ 7. 不一致なら AI が修正する
53
+ 8. 形 == 名 になるまでループ
54
+ 9. 人間が最終承認する
55
+ ```
56
+
57
+ ポイントは:
58
+
59
+ - **Step 1 の「名」を実装前に固定する**。実装後に成功基準を緩めない
60
+ - **Step 5 で AI に「動きました」と言わせない**。コマンド出力を必ず添付させる
61
+ - **Step 6 で照合表を作る**。「名」「形」「一致/不一致」「未解決リスク」を明示
62
+
63
+ ## 段階的導入
64
+
65
+ 形名参同を一度にすべて導入するのは重い。段階的に進める。
66
+
67
+ ### Phase A: 「名」の宣言を文書化する
68
+ - 実装前に成功基準を Plan に書く
69
+ - 検証は手動でよい
70
+ - 効果: AI と人間の認識ずれが減る
71
+
72
+ ### Phase B: 検証コマンドを定義する
73
+ - 「名」に対応する検証コマンドを併記する
74
+ - 検証は AI が実行し、出力を貼り付ける
75
+ - 効果: 「動きました」の自己申告を排除
76
+
77
+ ### Phase C: 機械的に照合する
78
+ - 統合スクリプト(例: `ai:check`)で一括検証
79
+ - CI に組み込む
80
+ - 効果: 人間の作業を最小化、客観的判定
81
+
82
+ ### Phase D: 不一致時の自動修正
83
+ - 「形」と「名」が不一致のとき、AI に自動修正を指示
84
+ - 修正後に再検証ループ
85
+ - 効果: 修正サイクルを自動化、開発速度向上
86
+
87
+ 各 Phase の昇格基準は組織で決める。例えば「2 週間 Phase A を運用して定着したら B に移行」など。
88
+
89
+ ## 実装パターン
90
+
91
+ ### パターン 1: Plan-First プロンプト
92
+
93
+ ```
94
+ このタスクを実装する前に、まずプランを出してください。
95
+
96
+ プランには以下を含めてください:
97
+ 1. 変更対象ファイル
98
+ 2. 実装方針
99
+ 3. 成功基準(受け入れ条件)
100
+ 4. 実装後に実行する検証コマンド
101
+ 5. 想定リスク
102
+ 6. 未確認になる項目
103
+
104
+ まだコードは変更しないでください。
105
+ ```
106
+
107
+ 成功基準を**実装前**に固定することで、後付けの正当化を防ぐ。
108
+
109
+ ### パターン 2: 形名照合報告
110
+
111
+ ```
112
+ 実装が完了したら、以下の表で報告してください。
113
+
114
+ | 名(事前宣言) | 形(実測値) | 一致 | 未解決リスク |
115
+ |---|---|---|---|
116
+ | 型エラー 0 | tsc --noEmit 出力 | ✓ / ✗ | - |
117
+ | lint エラー 0 | lint コマンド出力 | ✓ / ✗ | - |
118
+ | AC-01 pass | AC-01 検証コマンド出力 | ✓ / ✗ | - |
119
+ ```
120
+
121
+ 口頭の「完了しました」を表に置き換える。
122
+
123
+ ### パターン 3: 統合スクリプト
124
+
125
+ ```bash
126
+ #!/usr/bin/env bash
127
+ # ai-check.sh: 「形」を一括測定して「名」と照合
128
+ set -e
129
+
130
+ echo "=== Static ==="
131
+ npx tsc --noEmit
132
+ npx <lint-command> .
133
+
134
+ echo "=== Unit ==="
135
+ npx <test-runner> run
136
+
137
+ echo "=== Diagnostics ==="
138
+ npx <code-quality-tool>
139
+ npx <unused-detector>
140
+
141
+ echo "=== E2E (smoke) ==="
142
+ npx <e2e-runner> --grep smoke
143
+
144
+ echo "All names matched. Implementation passes."
145
+ ```
146
+
147
+ このスクリプトの終了コード 0 = 「形」が「名」と全件一致した状態。
148
+
149
+ 具体的なツール名は対象プロジェクトのプロファイル(`react-nextjs`, `node-cli` 等)で決まる。
150
+
151
+ ## なぜ重要か
152
+
153
+ AI が「動きました」と申告するだけでは、以下が担保されない:
154
+
155
+ - 主観的な「動く」と機械的な「動く」のずれ
156
+ - 一部だけテストして全体が動くと誤認
157
+ - カバレッジ範囲外の経路で壊れる
158
+ - パフォーマンス・セキュリティ要件の見落とし
159
+ - 「次回直します」が積み上がる
160
+
161
+ 形名参同は、**人間が確認すべき項目を「名」として固定し、AI に「形」の測定を強制する**ことで、これらの抜けを防ぐ。
162
+
163
+ ## アンチパターン
164
+
165
+ | アンチパターン | 何が悪いか | 対処 |
166
+ |---|---|---|
167
+ | 名を実装後に書く | 「動いたから良い」と後付け正当化される | 必ず実装前に Plan で固定 |
168
+ | 名を曖昧に書く(「正常に動く」) | 形と照合できない | 検証コマンド + 期待値で表現 |
169
+ | 形を AI の口頭報告で済ます | コマンド実行の証拠がない | 出力ログの貼付を必須化 |
170
+ | 不一致を見逃して名を緩める | 品質基準が劣化する | 不一致時は AI に修正させる |
171
+ | 一部の名だけ照合する | 抜けた検証項目から事故が出る | 統合スクリプトで一括実行 |
172
+
173
+ ## 隣接する思想との関係
174
+
175
+ - [`test-pyramid.md`](./test-pyramid.md) — 形名参同の「名」を Static / Unit / Integration / E2E / DB-RLS / Monitoring の各層でどう定義するか
176
+ - [`given-when-then.md`](./given-when-then.md) — 「名」を Given-When-Then 構文で記述する具体的な方法
177
+ - [`qa-techniques.md`](./qa-techniques.md) — 「名」に含めるべきテスト観点(同値分割・境界値・デシジョンテーブル等)
178
+
179
+ ## 出典
180
+
181
+ - Notion ページ: `c3e549660ca44005a20c4f6fdb54c8d5` — 無料で作る AI エージェント開発診断フロー(参照日 2026-05-13)
182
+ - 補強概念: 「形名参同」は中国古典『韓非子』に由来する統治用語(名 = 職務名と、形 = 実際の働きの一致を統治の要とする思想)。本ドキュメントではソフトウェア品質保証の文脈で再解釈している