AI開発

コードは読めるのに仕様は読めない — AIが上流工程で躓く本当の理由

アツメル株式会社|8分で読めます
コードは読めるのに仕様は読めない — AIが上流工程で躓く本当の理由

# コードは読めるのに仕様は読めない — AIが上流工程で躓く本当の理由

「AIはコードを書くのは得意なのに、仕様書を作るのはなぜこんなに苦手なんだろう」

この疑問を持ったことがある方は、現場でAIを本格活用し始めた人だと思う。

GitHub CopilotやClaude Codeは、コードを驚くほど正確に補完・生成する。バグ修正やリファクタリングも、熟練エンジニアと遜色ないレベルまで来た。なのに、「この業務フローの要件を整理して」と頼むと、途端にハルシネーションが増え、出力が信頼しにくくなる。

この非対称性には、構造的な理由がある。

コードは「文法がある自然言語」だ

プログラミング言語には、文法がある。厳密に定義された構文ルール、型システム、スコープの規則。これらは曖昧さを許さない。

だから、コードをAIに理解させるのは比較的簡単だ。Tree-sitterのような構文解析ライブラリを使えば、どんなコードベースでも抽象構文木(AST)に変換できる。ASTにすれば、「この関数はどこから呼ばれているか」「このクラスの依存関係は何か」が、テキスト検索ではなく構造として取り出せる。

最近Slack上でも話題になっていたが、GitNexusのようなツールがコードベースを「知識グラフ」として扱えるのも、この仕組みのおかげだ。コードは構造化されているから、AIが確定的に解析できる。

さらに、コードはインターネット上に膨大なサンプルがある。GitHubだけで3億以上のリポジトリ。Transformerベースのモデルは、このデータで徹底的に訓練されている。

コードに関しては、AIは「文法書を丸暗記した上に、数億冊の参考書を読んだ人」に近い状態にある。

仕様書には「文法がない」

では仕様書はどうか。

「ユーザーが商品を検索できること」——この一文は、一見シンプルに見える。しかし実際には無数の解釈が可能だ。

  • 検索は全文検索か?それともカテゴリ絞り込みか?
  • 在庫切れの商品も表示するのか?
  • 検索結果は何件まで返すのか?
  • ログインしていないユーザーも検索できるのか?

仕様書の「文法」は存在しない。記述スタイルは会社ごと、プロジェクトごと、担当者ごとにバラバラだ。Wordで書く人もいれば、NotionやConfluenceを使う人もいる。テーブル形式もあれば、箇条書きだけの場合もある。

AIにとって仕様書は、解析ツールのない非構造化テキストだ。

しかもコードと違い、仕様書はビジネスドメインの文脈に依存する。「承認フロー」と書いてあっても、その会社の業務ルールを知らなければ正確に解釈できない。このドメイン知識は、インターネット上には存在しない。

「曖昧さ」こそが本質的な障壁

ここで重要な点がある。仕様書の難しさは、単に「構造がない」だけではない。意図的に曖昧に書かれることがあるという点だ。

要件定義の段階では、まだ決まっていないことがある。「○○の場合の処理は後で決める」「詳細は実装フェーズで検討」——こうした記述は、人間同士のコミュニケーションではよくあることだ。

しかしAIは曖昧さを補完しようとする。仕様書の行間を「合理的な解釈」で埋めようとする。その補完が正しければ問題ないが、ドメイン知識が不足しているともっともらしいハルシネーションが起きる。

特に厄介なのは、出力が自信満々に見えることだ。「この場合、○○という処理が適切です」と断言されても、それが本当にそのビジネスの要件を満たしているかどうかは、人間が検証しなければわからない。

コードのハルシネーションはコンパイルエラーや静的解析で検出できる。仕様書のハルシネーションは、ずっと後になって「あれ、この動きは要件と違うぞ」と気づく。

上流でAIを使えないのか、というと違う

ここまで読んで「じゃあ上流工程にAIは使えないのか」と思った方に、誤解を解いておきたい。

AIが苦手なのは、構造のない仕様書をそのまま渡したときだ。逆に言えば、仕様書を「AIが解析しやすい構造」に変えれば、話は変わる。

私たちが仕様駆動開発(SDD)の文脈で実践していることのひとつが、まさにこれだ。自然言語の要件を、AIが扱いやすい構造化フォーマットに変換してから渡す。

具体的には:

  • 機能要件を粒度を揃えて列挙する(「できること」「できないこと」を明示)
  • 例外パターンを明示的に書く(「ただし○○の場合は△△」)
  • 依存関係を明確にする(「この機能は○○が完了してから動く」)

コードのASTと同じように、仕様書も「AIが構造として認識できる形」にすることで、精度が大きく変わる。

この変換作業自体をAIに手伝わせることも可能だ。「この箇条書きの要件を、前提条件・正常系・異常系の3つに分類して」という指示は、かなり精度よく動く。構造化のルールを与えれば、AIは得意な処理に持ち込める。

現場でできること

抽象論だけでは意味がないので、明日から使える話をしておく。

要件定義の議事録をAIに渡す前に、一手間かける

生の議事録テキストをそのままAIに投げるのは、最も精度が出ない使い方だ。「この議事録から、誰が何を決めたのかを箇条書きにして」という前処理を1ステップ挟むだけで、後続の処理精度が上がる。

AIに「わからないことを聞かせる」役割を与える

「この仕様で不明な点を10個挙げてください」という使い方が、上流工程では意外に効く。AIが仕様書を読んで「これはどういう意味ですか?」と質問してくれることで、人間では見落としていた曖昧な記述が浮かび上がる。

構造化テンプレートを先に作る

ゼロから仕様書を書かせるのではなく、テンプレートを用意してその空欄を埋めさせる。「機能名:○○ / 対象ユーザー:○○ / トリガー:○○ / 正常系:○○ / 異常系:○○」という形式を固定することで、AIは「何を書けばいいか」の迷いがなくなる。

なぜこれが重要か

コードは書けるが仕様は読めない——これは単なるAIの弱点ではない。

上流工程の品質が低いと、どんなに優秀なAIコーディングツールを使っても、出来上がるものはズレる。「何を作るべきか」が曖昧なまま「速く作る」ことに投資しても、手戻りコストが跳ね上がるだけだ。

AI開発ツールが成熟した今、次のボトルネックは「上流工程をAIが扱えるように構造化すること」に移っている。ここへの投資が、今後の開発生産性を大きく左右する。

アツメルでは、上流工程のAI活用を実践するチームの支援をしています。具体的な導入方法や、仕様書の構造化アプローチについては、お気軽にご相談ください。


関連記事

#AI開発#要件定義#上流工程#仕様駆動開発#SDD#AIエージェント#コード理解

AI仕様書エディタKakusillに興味がありますか?

無料トライアルで、AIと開発する体験をすぐにお試しいただけます。

お問い合わせ