AIエージェントによる開発が普及する中で、エージェントに内在する不安定性を制御し、自律性や柔軟性といった利点をいかに引き出すかが課題となっている。こうした中で注目を集めているのが「仕様(スペック)駆動開発」と呼ばれる手法だ。本セッションでは、株式会社ジェネラティブエージェンツの吉田真吾氏が、著書『実践Claude Code入門』(技術評論社)の内容をもとに、仕様駆動開発の手引きと、さらに大規模な開発へ向けた発展的な手法について紹介した。

「Claude Code」と「Dify」の違いとは?AIエージェントの2タイプを学ぶ

 冒頭、吉田氏は自身と本セッションを提供するPE-BANKの関係について触れた。現在、ジェネラティブエージェンツで取締役COO、セクションナインで取締役を務める吉田氏だが、フリーランスエンジニアをしていた際にPE-BANKの前身である首都圏コンピュータ技術者協同組合に所属。そこから今に至るまでのつながりにより、本セッションが実現した。

株式会社ジェネラティブエージェンツ 取締役COO/株式会社セクションナイン 代表取締役 吉田 真吾氏
株式会社ジェネラティブエージェンツ 取締役COO/株式会社セクションナイン 代表取締役 吉田 真吾氏

 Claude Codeによる開発の前提として、まずはAIエージェントの性質を知る必要がある。そこで吉田氏は、AIエージェントの基本的な定義から振り返った。

 AIエージェントには、2つのタイプが存在する。ひとつは、Difyやn8nに代表される「事前定義型ワークフロー」と呼ばれるもので、人間があらかじめ処理フローを定義しておく方式だ。LLMはワークフローの中での条件判断や処理に部分的に活用されるに留まるが、広義のAIエージェントに分類される。

 もうひとつが、Claude Codeに代表される「適応型ワークフロー」だ。現在の環境を知覚し、次に取るべきアクションを判断して環境に働きかける。その結果生じた変化を観察し、再び次のアクションを決定する。このようなエージェンティックループを繰り返しながら、ゴールに向かって自律的に動作するタイプだ。ループの過程でAIエージェントは、自らの手足となるツールまたは機能を呼び出し、アクションを実行に移す。

 例えばコーディングエージェントであれば、bashやgrepといったコマンドを実行できるようになっており、ファイルの読み書きや検索といった操作を状況に応じて自律的に選択しながら、目的の達成へと進んでいく。吉田氏自身は、このような「目標に向けて環境と相互作用しながらタスクをこなす知能システム」こそがAIエージェントだと定義する。

 ただし吉田氏は、事前定義型と適応型に優劣があるわけではないと付け加える。事前定義型の場合、処理内容を状況に応じて柔軟に変化させることはできないが、動作の再現性が保証されるというメリットがある。一方で適応型のエージェントは、柔軟性に優れるが、その分大きなリスクを伴う。例えばユーザーの曖昧な指示を取り違え、重要なファイルを削除してしまうような事態も起こりうる。

 そこで、適応型のエージェントを利用する際には、事前に明確な運用ルール集(ステアリングポリシー)を準備しておくことが重要だ。ステアリングポリシーがあれば、どのようなタスクが来てもエージェントはそのルールを踏まえてワークフローを自ら構築し、適切に動いてくれる。

AIエージェントの種類と、従来のワークフローとの比較

AIエージェントの種類と、従来のワークフローとの比較

 こうした前提を踏まえ、吉田氏は仕様駆動開発の概念を紹介した。Thoughtworks Technology Radarは、仕様駆動開発を「仕様書を信頼できる唯一の情報源(Single Source of Truth)として、コーディングエージェントに実装生成を委ねる開発手法」だと定義している。

 仕様駆動開発における「仕様書」に明確な決まりはないものの、一般的には要件定義書(PRD)、設計書、タスクリストを含むとされている。さらに、ドメインのユビキタス言語(用語集)や開発ルールなども仕様の構成要素に含まれる。

「仕様」を構成するドキュメントの範囲は、開発対象やAIの機能などによって異なる

「仕様」を構成するドキュメントの範囲は、開発対象やAIの機能などによって異なる