エージェンティックエンジニアリング

2026年9月12日

🐧 要するにどういう話か

エージェンティックエンジニアリングとエージェントエンジニアリングは名前が似ていてややこしいが、後者はエージェントをどうやって作るかだが、前者はエージェントを使ってソフトウェアをどう作るかの話である。

1. はじめに

本書はエージェンティックエンジニアリングの入門書である。エージェンティックエンジニアリングとは何か、なぜ登場したのか、周辺分野と何が違うのか、どのような実践パターンがあるのかを説明する。

2. エージェンティックエンジニアリングとは何か

一言でいうと、エージェンティックエンジニアリングとは、コーディングエージェントの支援を受けながらソフトウェアを開発する実践である。

エージェントとは

エージェンティックエンジニアリングを理解するためには、まず「エージェント」が何かを理解する必要がある。LLM(大規模言語モデル)の文脈における実用的な定義は次の通りである。

エージェントとは、目標を達成するためにツールをループで実行するソフトウェアである。

具体的には、エージェントとは、プロンプトをLLMに渡し、ツールの定義セットを渡して、LLMが要求したツールを呼び出し、その結果をLLMにフィードバックするソフトウェアである。このループは、目標が達成されるまで繰り返される。

コーディングエージェント

コーディングエージェントとは、コードを書き、コードを実行できるエージェントである。代表的なものにClaude Code、OpenAI Codex、Gemini CLIがある。

コーディングエージェントの場合、ツールにはコードを実行するものを含む。ユーザーが目標をプロンプトとして与えると、エージェントはコードを生成し、実行し、その目標が達成されるまでループで繰り返す。

コード実行こそが、エージェンティックエンジニアリングを可能にする決定的な能力である。 コードを実行できない場合、LLMの出力は限られた価値しか持たない。コード実行があれば、エージェントは明らかに動作するソフトウェアに向けて反復できるようになる。

人間の役割

動作するコードを書けるソフトウェアが存在するようになった今、人間には何が残されているのか。

コードを書くことは、ソフトウェアエンジニアの唯一の活動ではなかった。この仕事の本質は、常に「どのコードを書くか」を決めることである。ソフトウェアの問題には数十通りの解決策があり、それぞれトレードオフが異なる。私たちの仕事は、それらの選択肢の中で、自分の状況や要件に最も合うものを見つけることである。

コーディングエージェントから良い結果を引き出すには、以下が必要である。

  • 問題解決に必要なツールを提供する
  • 適切な詳細さで問題を指定する
  • 結果を検証し、確信が持てるまで反復する

LLMは過去の失敗から学習しないが、コーディングエージェントはそれができる。ただし、学習したことを反映するために、指示書やツールハーネスを意図的に更新する必要がある。

3. 登場した背景

コードは常に高価だった

コードの生成は常に高価だった。数百行のクリーンでテスト済みのコードを作るのに、多くのソフトウェア開発者が1日以上かかっていた。我々のエンジニアリングの習慣は、マクロレベルでもミクロレベルでも、この制約を前提に築かれている。

マクロレベルでは、高価なコーディング時間を効率的に使うために、設計・見積もり・計画に多くの時間を費やしてきた。プロダクトの機能アイデアは、その時間に対してどれだけの価値を提供できるかで評価される。

ミクロレベルでは、1日に何百もの判断を、使える時間と想定されるトレードオフに基づいて行っている。

  • その関数をリファクタリングして少しエレガントにする価値があるか? 1時間余計にかかるが。
  • ドキュメントを書く価値があるか?
  • このエッジケースにテストを追加する価値があるか?
  • デバッグインターフェースを作る正当性はあるか?

現在、コードは安くなった

コーディングエージェントは、コードを書くコストを劇的に下げる。これにより、どのトレードオフが合理的なのかについての、個人も組織も持っていた直感が大きく揺らぐ。

並列エージェントを実行できることで、この評価がさらに難しくなる。1人の人間が、同時に複数箇所で実装・リファクタリング・テスト・ドキュメント作成を並行して行えるようになったからである。

良いコードには依然としてコストがかかる

新しいコードを納品するコストはほぼ無料になった。しかし、良いコードを納品するコストは、それに比べれば依然として高い。

「良いコード」とは以下を意味する。

  • コードが動作する。意図した通り、バグなく動く。
  • コードが動作することが確証されている。動作することを確認するための手順を踏んでいる。
  • 正しい問題を解決している。
  • エラーケースを適切かつ予測可能に扱っている。エラーは将来のメンテナーが何を誤ったか理解するのに十分な情報を含んでいる。
  • 単純で最小限である。必要なことだけを、人間も機械も今も将来も理解・維持できる形で書かれている。
  • テストによって守られている。今動作することを示し、将来黙って壊れないための回帰テストスイートとして機能する。
  • 適切なレベルでドキュメント化されており、そのドキュメントはシステムの現在の状態を反映している。
  • 将来の変更を許容する設計である。不要な複雑さを避けつつ(YAGNI=You Are Gonna Need It、必要になる前に作らない)、将来の変更が不必要に難しくもない。
  • 関連する非機能品質を満たしている。アクセシビリティ、テスト可能性、信頼性、セキュリティ、保守性、観測可能性、スケーラビリティ、ユーザビリティなど。

コーディングエージェントのツールはこれら大半を支援できるが、現在のプロジェクトに必要な「良さ」の部分集合について、プロンプトを操作する開発者がこれを確実にする責任は残る。

新しい習慣が必要

課題は、エージェンティックエンジニアリングの可能性に応じた、新しい個人・組織の習慣を作ることである。これらのベストプラクティスは、業界全体でまだ模索中である。

実用的な指針としては、直感が「そんなものを作るな、時間の無駄だ」と言うたびに、とにかく非同期エージェントセッションにプロンプトを投げるだけでよい。最悪の場合、10分後に確認して「トークンを無駄にした」となるだけである。

4. 周辺分野との違い

4.1 バイブコーディングとの違い

「バイブコーディング」という用語は、Andrej Karpathy氏が2025年2月に作ったもので、コードの存在を「忘れて」LLMにコードを書かせることを指す。

エージェンティックエンジニアリングはバイブコーディングではない。バイブコーディングは未レビューのプロトタイプ品質のコードを産む。エージェンティックエンジニアリングでは、作者がコードを本番品質の基準まで引き上げることが前提である。未レビューのプロトタイプ品質のLLM生成コードと、検証されて本番品質の基準に達したコードを区別する用語が必要なのである。

4.2 AIコーディングエージェント(Claude Code、Codex等)との違い

Claude CodeやCodexのようなAIコーディングエージェントは、単一のユーザー駆動セッション内で、意図をコードに変換することに長けている。リポジトリの文脈の中で、リファクタリング、説明、デバッグができる。

エージェンティックエンジニアリングは、より高い抽象度で動作する。チーム横断のワークフローをオーケストレーションし、エージェント間で長期メモリを維持し、ソフトウェアデリバリの全ライフサイクルにわたる状態と追跡可能性を管理する制御平面である。

これらは競合関係ではない。Claude Codeのようなコーディングエージェントは、エージェンティックエンジニアリングのシステム内部で、推論やコード生成エンジンとして動作しうる。

4.3 エージェントエンジニアリングとの違い

エージェントエンジニアリングとは、非決定論的なLLMシステムを、本番環境で信頼できる運用に磨き上げる反復プロセスである。その対象は、有界自律システム全体である。目標、停止条件、コンテキスト、ツール、評価、運用を含む。

エージェントエンジニアリングの6本柱は次の通り。

  • アーキテクチャ:単一エージェント vs マルチエージェント、プランナー・エグゼキューター vs スーパーバイザー・ワーカー、ワークフローグラフ vs 開かれたループ
  • コンテキストとメモリ:検索設計、短期・長期メモリ、コンテキスト圧縮
  • 評価と信頼性:計画品質、ツール選択、完了品質、回復行動、繰り返し実行間の一貫性
  • 観測可能性:システムが何を解こうとしたか、どのコンテキストを引き、どのツールを選び、どこで方針を変えたかを示すトレース
  • 運用(AgentOps):バージョニング、ロールアウト戦略、コスト管理、回復、ロールバック
  • ガバナンス:権限、承認パス、監査証跡、説明可能性

エージェンティックエンジニアリングとの関係は次のようになる。エージェントエンジニアリングはエージェントシステムそのものを設計する。エージェンティックエンジニアリングはコーディングエージェントを使ってソフトウェアを開発する実践である。 一方は機械を造り、他方は機械を運転する。

4.4 ハーネスエンジニアリングとの違い

ハーネスエンジニアリングとは、AIエージェントをスケールして信頼可能にする環境・制約・フィードバックループ・インフラを設計する実践である。

実用的な定義は Agent = Model + Harness である。ハーネスとは、モデル自身を除くすべてのコード・設定・実行ロジックである。生のモデルはエージェントではない。ハーネスが状態、ツール実行、フィードバックループ、強制可能な制約を与えたとき、初めてエージェントになる。

馬と具の比喩がこれによく当てはまる。馬(モデル)は原始的な力を提供する。具(ハーネス)は制御と方向を与える。

ハーネスには以下が含まれる。

  • システムプロンプト
  • ツール、スキル、MCP、それらの説明
  • バンドルされたインフラ(ファイルシステム、サンドボックス、ブラウザ)
  • オーケストレーションロジック(サブエージェント生成、ハンドオフ、モデルルーティング)
  • 決定論的な実行のためのフックとミドルウェア(コンパクト化、継続、lintチェック)

ハーネスエンジニアリングの3本柱は次の通り。

  • コンテキストエンジニアリング:エージェントがアクセスできる情報、アクセスするタイミング、情報の構造を管理する
  • アーキテクチャ的制約:ツールアクセス制御、リンター、型チェック、スコープ境界、安全ガードレール
  • エントロピー管理:定期的な監査、自動クリーンアップ、回帰検出、モデルドリフト監視

3つの関連分野を区別する簡潔な方法は次の通り。

  • プロンプトエンジニアリングは単一のインタラクションを最適化する。
  • エージェントエンジニアリングはエージェントのロジックを最適化する。
  • ハーネスエンジニアリングはエージェントを信頼可能にする全体システムを最適化する。

エージェンティックエンジニアリングとの関係は次のようになる。ハーネスエンジニアリングはモデルを包む環境を設計する。エージェンティックエンジニアリングは、コーディングエージェント(=モデル+組み込みハーネス+ユーザーが定義する外側ハーネス)を使ってソフトウェアを開発する実践である。

4.5 マルチエージェント協調

最も高い抽象度で考えると、エージェンティックエンジニアリングはマルチエージェント協調に拡張できる。複数のエージェントがチームとして動作する形である。

CiscoのエンジニアがLangChainのフレームワーク(LangGraph、LangSmith、LangMem)を用いて設計した参照アーキテクチャは、2つの補完的役割から成る。

  • ワーカーエージェント:個人貢献者のデジタル版。ユーザーの意図を解釈し、コンテキストを集め、ツールやコーディングエージェントを通じてワークフローを実行し、結果を検証し、リーダー層に報告する。
  • リーダーエージェント:プロジェクトリーダーのデジタル版。調整・統治・共有機能を提供する。共有プロンプトとワークフローライブラリ、共通ツールゲートウェイ、長期メモリ、グローバル観測可能性、オーケストレーション。

核心の洞察は次の通り。最大の飛躍は、より良いツールだけでは生まれない。実際のチームを模倣するシステムから生まれる。

5. 基礎:実践パターン

5.1 より良いコードを生み出す

技術的負債の回避

技術的負債の最良の緩和策は、最初から負債を作らないことである。技術的負債の修正としてよくあるカテゴリーは、概念的には単純だが時間のかかる変更である。

  • API設計が重要なケースをカバーしていない。修正には何十箇所もコードを変える必要があり、少し異なる新しいAPIを追加して重複を許容してしまう。
  • 初期に悪い命名を選んでしまった(例:「teams」ではなく「groups」であるべきだった)。全箇所の整理はあまりに面倒なので、UIだけで直している。
  • 重複しながら微妙に異なる機能が時間とともに増え、統合・リファクタリングが必要になっている。
  • ファイルが数千行に膨れ上がり、モジュールに分割すべきである。

これらはすべて、コーディングエージェントの理想の用途である。エージェントを起動し、変更すべきことを伝え、バックグラウンドのブランチやワークツリーで作業させる。プルリクエストで結果を評価する。良ければマージし、あと少しならプロンプトで改善を指示し、悪ければ捨てればよい。

これらのコード改善のコストは十分に下がったため、軽微なコードスメル(コードに潜む、将来の問題の兆し)や不便さを見逃す理由がなくなった。

探索的プロトタイピング

技術選択に自信を持つ最良の方法は、プロトタイプで目的適合性を証明することである。コーディングエージェントは、1つの丁寧に作られたプロンプトからシミュレーションを構築できる。これにより、この種の実験のコストはほぼゼロに下がる。それほど安いなら、複数の実験を同時に走らせて、複数のソリューションから最も合うものを選べる。

LLMは、我々が思いつかなかった自明の解決策を見逃さないようにも手伝える。LLMが提案するのは学習データで一般的なソリューションだけであるが、それらは多くの場合、最もうまくいく地味な技術である。

複合エンジニアリングループ

エージェントは指示に従う。過去に学んだことをもとに、指示書を時間とともに進化させれば、今後の実行からより良い結果が得られる。

EveryのDan ShipperとKieran Klaassenが説明するパターン:すべてのコーディングプロジェクトの最後に振り返り(compound step)を行い、うまくいったことを記録して、今後のエージェント実行に活かす。

小さな改善が複利的に積まる。かつて時間がかかっていた品質向上が、コストが下がり、新機能のリリースと同時に品質に投資しない理由がなくなった。コーディングエージェントのおかげで、両立できるようになったのである。

5.2 知っていることの蓄積(Hoard)

ソフトウェア構築におけるスキルの大きな部分は、何が可能で何が不可能かを理解し、それらがどのように実現できるのかを少なくともおおまかに知っていることである。

これらの質問への答えに自信を持つ最良の方法は、動作するコードによってそれが示されたのを見ていることである。理論的に可能だということを知っていることと、自分の目でそれを見たこととは異なる。ソフトウェアプロフェッショナルとして育むべき重要資産は、この種の質問への答えの深いコレクションであり、それらの答えの証明である。

なぜ蓄積するのか? 自分の能力を高めるだけでなく、生成した資産がコーディングエージェントへの強力な入力になるからである。効果的なプロンプトパターンの1つは、エージェントに2つ以上の既存の動作する例を組み合わせて新しいものを作らせることである。

コーディングエージェントは、動作する例の蓄積をさらに価値あるものにしている。

  • インターネットアクセスがあれば、エージェントにドキュメントや例をフェッチさせて使えるように指示できる。
  • エージェントは検索が得意である。自分のマシン上で実行し、使わせたい例を指し示せる。
  • 自分のリポジトリをクローンさせて入力として使うよう指示できる。

核心はこれである。コーディングエージェントのおかげで、有用なトリックは一度だけ考えればよい。そのトリックが動作するコードの例とともにどこかに記録されていれば、エージェントはその例を参照して、将来の類似プロジェクトを解決できる。

5.3 アンチターン(避けるべきこと)

未レビューのコードを同僚に押し付けない

これは一般的で、深く苛立たしいアンチパターンである。自分でレビューしていないコードでプルリクエストを立てるべきではない。

エージェントが生成した何百・何千行のコードでPRを開き、それが動作することを自分で確認していなければ、実際の仕事の他者への委任である。相手もエージェントにプロンプトを投げられる(あなたの価値は何?)。

良いエージェンティックエンジニアリングのプルリクエストには、以下の特性がある。

  • コードが動作し、それが動作すると確信が持てる。
  • 変更が十分に小さく、レビュアーに過度な認知負荷をかけずに効率的にレビューできる。小さいPRを複数作る方が、大きなPRを1つ作るよりよい。
  • PRには変更を説明する追加のコンテキストが含まれている。より高いレベルの目標は何か、関連するissueや仕様にリンクする。
  • PRの説明も自分でレビューしている。エージェントは説得力のあるPR説明を書くが、それも検証する必要がある。

自分が検証作業をしたことの証拠を添えることをお勧めする。どのように手動テストしたかのメモ、実装選択についてのコメント、機能が動作しているスクリーンショットや動画は、レビュアーの時間が無駄にならないことを示すのに非常に役立つ。

6. マルチエージェント協調の具体的例

CiscoのエンジニアがLangChainのフレームワーク(LangGraph、LangSmith、LangMem)を用いて、実世界の開発・テスト・デバッグワークフローにマルチエージェントフレームワークを適用したパイロット調査の結果を以下に示す。

アーキテクチャ

システムは、A2Aプロトコル経由で通信するワーカーエージェントとリーダーエージェントからなる。ワーカーエージェントは、A2AをサポートしないエージェントともMCPラッパー経由でやり取りできる。エンジニアは、IDE、CLI、またはGitHubやJiraアクションなどの外部トリガーを通じて意図を表現する。

ワーカーエージェントの4段階フロー

  1. 意図分析:エンジニアが自然言語で意図を表現する。ワーカーエージェントがそれを分析し、MCPツールを通じて関連コンテキストを取得する。
  2. 計画と通知:エージェントが構造化されたマルチステップ計画を生成し、通信チャネル(Slack、Teamsなど)を通じてエンジニアに通知する。
  3. 実行と追跡:IDE内のAIコーディングエージェントと協力して、計画を1ステップずつ実行する。チェックポイントと状態追跡を用いて実行状態を管理する。
  4. 検証とクローズ:ワーカーエージェントが、実行された計画がチェックポイントされた状態と一致することを確認する。結果をエンジニアに通知し、長期状態として保存する。

パイロット結果

  • デバッグ:20以上のワークフローで、従来のデバッグ時間に対する根本原因特定時間の93%短縮。1ヶ月間の512セッションで200時間以上のエンジニアリング時間を節約。
  • 開発:15以上のワークフローで、実行時間の65%短縮。主な効果は、コード生成の高速化(AIコーディングエージェントがすでに得意とする領域)ではなく、PRマージ後の機能テストなどの下流ワークフローの圧縮から出た。

残るボトルネック

PRレビュープロセス自体が、人間が関わることで生じるボトルネックになった。このことは、マルチエージェントシステムであっても、品質保証の速度制限ステップとして人間の判断が依然として残ることを示している。

7. まとめ

エージェンティックエンジニアリングは、コーディングエージェントの支援を受けながらソフトウェアを開発する実践である。コードを書くコストが劇的に下がり、マクロレベルでもミクロレベルでもソフトウェア開発の経済学が変わったことにより登場した。

周辺分野との違いを整理する。

  • バイブコーディングは未レビューのプロトタイプを産む。エージェンティックエンジニアリングは検証された本番品質のコードを産む。
  • AIコーディングエージェントはセッション内で意図をコードに変換する。エージェンティックエンジニアリングはより広い開発ワークフローをオーケストレーションする。
  • エージェントエンジニアリングはエージェントシステムそのものを設計する。エージェンティックエンジニアリングはそれを駆使してソフトウェアを構築する。
  • ハーネスエンジニアリングはモデルを包む環境を設計する。エージェンティックエンジニアリングはその環境の中で開発を行う。

人間に依然として求められること。

  • 解くべき正しい問題を特定する
  • トレードオフを考慮し、設計判断を行う
  • 出力が正しく、十分な品質であることを検証する
  • 動作する例を蓄積し、指示書を時間とともに改善する
  • 出荷するコードをレビューし、責任を持つ

この分野は進化の真っ最中である。ベストプラクティスはまだ模索中である。しかし方向性は明確である。コーディングエージェントは、より野心的なプロジェクトに挑戦するのを手伝ってくれる。エージェンティックエンジニアリングは、それを責任を持って実現する方法である。

📚 参考文献