Search the alley

記事を検索

2文字以上でタイトル・カテゴリ・タグを検索できます。

AIレビューだけでは足りない理由|仕様・テスト・期待動作をquality gateにする

AI生成コードの受け入れ条件を先に書き、ビルド・要件確認・独立した差分確認・AIによる設計レビューの順に判断する方法を、静的ページのメタデータ例と記録カードで整理します。

公開 2026.06.26 / 更新 2026.10.11

この記事のポイント

  • 期待動作、禁止条件、境界値、検証方法を生成コードを見る前に書く
  • 修正前の失敗と修正後の成功を、同じ入力と独立した期待値で比べる
  • ビルド、要件確認、独立した差分・表示確認、AIによる残る設計レビューを順に行う
  • FAIL、BLOCKED、NOT RUNをPASSへまとめず、足りない証拠を明記する

AIレビューだけではなぜ足りないのか

AIが生成したコードをAIにレビューさせると、どちらも同じ曖昧な仕様から推測してしまうことがあります。仕様がなければ、レビューはコードがコード自身に合っているかを見るだけになりがちです。

先に置くもの役割AIレビューに残すもの
仕様何を満たすべきか曖昧な要件の質問
テスト壊れたら検知するテスト不足の候補
受け入れ条件完了の基準境界条件の洗い出し
手動確認URL実際の表示を見る見落としリスクの列挙

例:seoTitleが空だと記事タイトルが消える

これは架空のサンプルで受け入れ条件を組み立てる例です。article.titleが「記事A」、seoTitleが空白、descriptionが「説明A」、pathが「/articles/sample/」のとき、空白のseoTitleを採用せずtitleを使い、descriptionとcanonicalも入力どおりに出す要件を先に書きます。canonicalのoriginは例示用の https://example.com とし、URL末尾にはslashを一つ付ける方針にします。

入力期待する結果確認方法と境界条件
title=記事A、seoTitle=空白、description=説明A、path=/articles/sample/生成HTMLのtitleは記事A、descriptionは説明A、canonicalは https://example.com/articles/sample/修正前後で同じ入力を使ってビルドし、生成HTMLの値を確認
seoTitle=検索用タイトルtitleは検索用タイトル有効なSEO titleをfallbackで上書きしない
seoTitleが未指定・空文字・空白だけtitleは記事A三つの入力を個別に確認し、空白を除いて扱う
path=/articles/sample と末尾slashありのpathcanonicalはどちらも https://example.com/articles/sample/入力URLの末尾slashを正規化し、canonicalはslash一つの絶対URLにする
証拠の時点架空fixtureで捕まえる内容判定
変更前seoTitleが空白の入力で、生成HTMLが <title></title> を出す。入力・生成ファイル・失敗した期待値を保存FAIL:titleを補う要件を満たさない
変更後同じ入力の生成HTMLで <title>記事A</title>、description、canonicalを確認し、境界入力も確かめるPASS:書いた要件を満たす証拠がある

`getMetadata(input)`の結果を同じ関数から作った期待値と比較する、修正後にsnapshotを更新してテストを通す、といった方法では自己充足になり得ます。期待値は「記事A」のように仕様から独立して固定し、生成されたHTMLと実際の表示を別に確認します。変更前の出力を残し、同じ入力で修正前の失敗と修正後の通過を比べてください。

要件を通してから、差分と表示を確認する

  • ビルド:既存のビルドを実行し、生成物を更新できたか記録する。
  • 要件確認:事前に書いた入力・期待値・境界条件を確認し、それぞれの証拠を残す。
  • 独立した差分・表示確認:生成HTML、実際の表示、変更範囲、既存ページへの副作用を人が確認する。AIの説明だけで表示確認を済ませない。
  • AIレビュー:最後に、要件確認で判定できない設計、保守性、アクセシビリティ、性能の懸念を尋ね、指摘ごとに根拠を確認する。AIレビューは失敗した要件確認を合格に変えない。
結果意味報告と次の動き
PASS必須要件と独立確認の証拠が揃った通ったcheck、生成HTML、残る任意のriskを添える
FAIL再現可能な要件または境界条件が外れた失敗した条件とbaselineとの差を示して修正へ戻す
BLOCKED環境・権限・入力不足で判定できない理由と必要な証拠を記し、PASSとは扱わない
NOT RUN予定したcheckや目視確認を実行していない未実行の項目を明示し、全体をPASSと報告しない
## 受け入れ確認カード

- 変更・issue: [ ]
- 変更前のcommitと確認した挙動: [ ]
- 入力: [ ]
- 期待する結果: [ ]
- 境界条件: [ ]
- 禁止する副作用: [ ]
- ビルドの実行内容と結果: [PASS / FAIL / BLOCKED / NOT RUN + 証拠]
- 要件確認と期待値: [ ]
- 変更前に失敗した証拠: [ファイル / 出力 / 画面記録]
- 同じ入力で変更後に通った証拠: [ ]
- 独立した差分確認と目視結果: [ ]
- 残る設計上の疑問に対するAIレビュー: [ ]
- 全体の状態: [PASS / FAIL / BLOCKED / NOT RUN]
- 未確認の項目と担当者: [ ]

よくある質問

この記事はAIコーディングを否定する話ですか?

否定ではありません。生成速度だけでなく、仕様、レビュー、テスト、保守、権限を含めた納品速度で見るための整理です。

CodexやClaude Codeに任せるなら何を先に決めるべきですか?

対象ファイル、触ってよい範囲、禁止操作、build/check、完了報告、差分レビュー、本番反映前の確認方法を先に決めます。

AIレビューは使わない方がよいですか?

使えます。ただし、仕様、テスト、期待動作を置いたうえで、設計上の違和感、未テスト境界、レビュー観点の漏れを探す補助として使うのが現実的です。