AIエージェントを"使い倒す"ためのContext Engineering実践術
はじめに
LLMの呼び出しだけでなく、ファイル参照、ファイル編集、コマンド実行などのツール呼び出しが可能となったAIエージェントの登場によって、アプリケーション開発におけるAI活用が加速しています。
一方で、AIエージェントはLLMに対して、様々な・大量のコンテキストを与えるため、従来のプロンプトの工夫(プロンプトエンジニアリング)だけでは、AIエージェントのポテンシャルを引き出すことが難しくなっています。 そのため、ユーザーが期待する動作をしてくれない、いつの間にかLLM呼び出しの料金が高騰している、といった課題が発生しがちです。
本記事では、このようなAIエージェント特有の課題に対するアプローチである「Context Engineering」について、アプリケーション開発における実践術を紹介します。
本記事の前提情報
- 筆者はエンタープライズのアプリケーション開発におけるAI活用に取り組んでいます
- 特に、AIエージェントを活用したアプリケーション開発を検証しています
- 設計書や開発標準化資料(ガイド)といったコンテキストを充実させることで、AI生成成果物の品質向上を目指しています(ドキュメント駆動開発)
想定読者
- AIエージェントを利用したアプリケーション開発に興味がある方
- AIエージェントを利用したアプリケーション開発を実践していて、コンテキストに関する課題を感じている方
- Context Engineeringの「Isolate(分離)」「Write(書き出し)」の実践について興味がある方
この記事で書くこと、書かないこと
書くこと
- 「アプリケーション開発」の文脈におけるContext Engineeringの実践術
- 特に、単一のAIエージェントでチャットセッションを切り替えながら適切なコンテキストを与えるための工夫について
書かないこと
- 「アプリケーション開発」以外の文脈におけるContext Engineeringの実践術
- マルチAIエージェント、サブエージェント前提のContext Engineeringの実践術
- Context Engineeringの定義に関する詳細な説明
1. Context Engineeringの概要
Context Engineeringとは、LLMのコンテキストウィンドウに、AIエージェントが実行するタスクの各ステップで必要最小限の情報のみを与えるための技術です。(※)
※本記事におけるContext Engineeringの定義は、LangChainの記事における定義(参考:https://blog.langchain.com/context-engineering-for-agents/)に従います。
上記を実現するために、Context Engineeringでは「Write(書き出し)」「Select(選択)」「Compress(圧縮)」「Isolate(分離)」という4つの戦略が定義されています。
1.1. Write(書き出し)
タスクの直接的な成果物以外の情報(例:タスクの計画など)をファイルとして書き出す方法です。
1.2. Select(選択)
AIエージェントのルールファイルや、AIエージェントで利用可能な特定の書式(例:@メンションで参照するファイルを指定する)を利用して、LLMに選択的に情報を与える方法です。
1.3. Compress(圧縮)
Auto-Compact(LLMによる要約)やコンテキスト編集(古い情報のトリミング)などの機能を利用して、コンテキストウィンドウ内のコンテキストを小さくする方法です。
1.4. Isolate(分離)
AIエージェントに与えるタスクを分割して、LLMに対して分割したコンテキストのみを与える方法です。
2. アプリケーション開発におけるContext Engineeringの実践術
ここまでは、Context Engineeringの概要を紹介しました。本章では、4つの戦略のうちで筆者が特に重要と考えている「Isolate(分離)」および「Write(書き出し)」について、より具体的な実践術を紹介します。
2.1. Isolate(分離)の実践術
Isolate(分離)の実践については、大別して「単一のAIエージェントで、コンテキストを分割して別々のチャットセッションに与える」アプローチと「メインのAIエージェントがタスクを分割して複数のサブエージェントで実行する」アプローチがあります。
本記事では、筆者がサブエージェントの活用経験に乏しいことと、コンテキストを分割するアプローチの方が、タスクの分割粒度を制御しやすいことから、前者のアプローチを紹介しますが、ここで紹介するアプローチをサブエージェントに応用することも可能と考えています。
2.1.1. 与えるコンテキストは、可能な限りファイルとして分割する
エンタープライズのアプリケーション開発では、開発の標準化として「開発ガイド」のような開発のポイント、実装例などを記載したドキュメントを作成することがあります。
AIを利用してアプリケーション開発を行う際にも、上記のドキュメントをコンテキストとして与えることがあります。
開発ガイドのようなドキュメントは、様々なユースケースを1つのファイルにまとめて記載している場合がありますが、AIエージェントにコンテキストとして与える際には、ユースケースの単位でファイルとして分割することをおすすめします。
ユースケースごとにファイル分割することで、AIエージェントが実行するタスクに紐づくユースケースのドキュメントのみを参照することができ、与えるコンテキストを最適化できます。
また、AIエージェントへの直接的な指示であるプロンプトを分割することもおすすめです。プロンプトを分割することで、AIエージェントが実行するタスクを小さく、かつスコープを明示的に指定できるため、よりよい生成結果が得られやすくなります。
しかし、コンテキストをファイルとして分割すると、作成すべきファイルの数が非常に多くなってしまいます。これらを全て開発者が作成・管理するのは、現実的ではありません。そこで、次節では「分割版のコンテキストをAI生成する」アプローチを紹介します。
2.1.2. 分割版のコンテキストをAI生成する
分割版のコンテキストをAI生成することで、コンテキスト分割による恩恵を受けつつ、管理の手間を減らすことが可能です。以下は、設計書からタスク単位に分割されたプロンプトをAI生成するフローの一例です。
① 設計書をインプットに、AIでタスクの分割を行い、タスク一覧を作成する。
② 事前に作成した「タスクのパターンごとのプロンプトテンプレート」とタスク一覧をインプットに、分割されたタスクごとのプロンプトをAI生成する。
生成した分割版のプロンプトは、いくつかの方法でAIエージェントに与えることができます。
① ユーザーが順番に入力する
② AIエージェントの機能で順番に自動入力する(※)
③ マルチエージェントの場合は、メインエージェントから分割版のプロンプトを順次サブエージェントに渡す
※例えばClineには、new_taskという「特定のプロンプトのみを参照した状態で新規のチャットセッションを開始する機能」があります
2.2. Write(書き出し)の実践術
Write(書き出し)の実践については、主に「Isolate(分離)によって失われる情報」を書き出して再利用することで、コンテキストの最適化と、分割による生成結果の悪化の防止を実現します。
2.2.1. タスク間の管理情報を書き出す
タスクを分割して実行すると、分割前のタスク全体の計画、現在の進捗状況、後続タスクとして何をすべきか、といったタスク間の管理情報が失われます。
これらの情報を事前にファイルとして書き出しておき、分割されたタスクの実行中に参照することで、AIエージェントがタスク全体の文脈を「思い出しながら」作業することができます。
2.2.2. タスクの実行過程・結果の記録を書き出す
AIエージェントは、タスクを自律的に実行できるため、ユーザーがタスクの実行記録をトレースすることが難しくなります。また、本記事の執筆時点では、AIによる生成結果は最終的に人間によるチェックを求められることが多いと思われます。
そこで、AIエージェントによるタスク実行結果のトレーサビリティを高め、人間によるチェック負荷を軽減するために、タスクの実行過程・結果の記録を書き出すことをおすすめします。以下は書き出す情報量の一例です。
3. まとめ
本記事では、AIエージェント利用における課題解消のアプローチとしてContext Engineeringに注目し、アプリケーション開発における実践例を紹介しました。ここで紹介した例が、アプリケーション開発におけるAIエージェント利用の参考になれば幸いです。
一方で、本記事では紹介できませんでしたが、AIエージェントにはMCP、Skills、hooks、マルチエージェントなど、筆者自身が十分に活用できていない機能がまだまだあります。AIエージェントを"使い倒す"ためにも、これらの機能を活用して、また情報を発信できればと思います。
最後に、ここまでお読みになってくださった皆様、誠にありがとうございました!








