結論:コンテキスト(Context)とは、生成AIが推論を行う際に参照する「前提知識・背景情報・文脈・制約条件」の総称です。
これまでのAI活用では「どう指示するか(プロンプト)」が重視されてきましたが、これからのAI開発や高度な利用においては「何を知っているか(コンテキスト)」の設計が、出力精度を決定づける最重要ファクターとなります。
【核心】「プロンプト」と「コンテキスト」の決定的違い
多くの人が「プロンプトエンジニアリング」という言葉に引きずられ、AIへの指示出しを「いかに巧みな命令文を書くか」という国語の問題として捉えています。しかし、実務レベルのシステム開発や高度なタスク実行において、その認識は不十分です。
Mikoto私もプロンプトの勉強をしてるんですけど、具体的な指示を出すだけじゃダメなんですか?
Yachiもちろん指示も大事ですが、それだけだと毎回「ゼロから状況説明」をしなきゃいけなくなりますよね。AIの賢さは、命令そのものより、その命令を受ける「前提(コンテキスト)」をどう整えるかで8割決まるんです。
AIの出力品質の8割は、命令そのものではなく、その命令が実行される「土壌(コンテキスト)」で決まります。両者のエンジニアリング上の違いを、まずは明確に定義しましょう。
Action(動詞)としてのプロンプト
プロンプトは、AIに対して特定の動作を促すトリガー(Action)です。
- 性質: 一時的、命令指向、フロー型
- 役割: 処理を開始させるスイッチ。「要約して」「コードを書いて」「翻訳して」といった動詞が中心になります。
- コードでの扱い: 関数呼び出し時の引数やメソッドに近いイメージです。
State(状態)としてのコンテキスト
コンテキストは、AIが思考するために必要な環境変数や静的な定義(State/Environment)です。
- 性質: 持続的、環境定義、ストック型
- 役割: 推論の前提となる土壌。「あなたはSREエンジニアである」「対象システムはAWS上で動いている」「ログフォーマットはJSONである」といった定義情報の集合体です。
- 構成要素: システムプロンプト、会話履歴(Chat History)、RAGによる検索結果、ユーザープロファイルなど。
両者の違いを整理すると、以下のようになります。
| 項目 | プロンプト (Action) | コンテキスト (State) |
|---|---|---|
| 役割 | 動作のスイッチ(命令) | 思考の土壌(前提・世界観) |
| 性質 | 一時的・フロー型 | 持続的・ストック型 |
| 主な内容 | 「要約して」「コード書いて」 | 「あなたはSRE」「ログはJSON形式」 |
| イメージ | 関数への入力(引数) | グローバル変数・環境設定 |
比喩で理解する:注文住宅の建築(家づくり)
この関係性は、「注文住宅の建築」に例えると非常にクリアになります。
- プロンプト(施主の要望):
- 「リビングを明るくしてほしい」
- 「キッチンは対面式がいい」
- 「書斎を作ってほしい」
- コンテキスト(敷地条件・法規制・予算):
- 「敷地面積は30坪」
- 「北側斜線制限がある(高さ制限)」
- 「予算は3000万円以内」
- 「家族は4人構成」
もし、コンテキスト(敷地条件や予算)を無視して、ひたすらプロンプト(要望)だけを建築家(AI)に投げ続けたらどうなるでしょうか?
「敷地からはみ出す図面」ができあがるか、あるいは建築家が「条件不明のため回答できません」とフリーズしてしまうでしょう。
Mikotoあ、なるほど!予算も土地の広さも教えずに「豪邸建てて!」って言ってるようなものか…。そりゃ無理ですよね。
Yachiその通りです。逆に、コンテキスト(土地や予算)さえ完璧に共有されていれば、「いい感じの家を頼む」という雑なプロンプトでも、プロの建築家なら「この条件なら、このプランが最適です」と正解を出せるんです。
つまり、コンテキストエンジニアリングとは、AIが「常識外れな提案」や「文脈違いの回答」をしないように、外堀(前提条件)を埋める作業そのものなのです。


なぜ今「コンテキスト」なのか?単発回答から自律エージェントへ
これまでプロンプトが持て囃されていたのは、AIの利用形態が単純だったからです。しかし、技術トレンドの変化により、コンテキスト管理能力がAI活用の成否を分けるようになりました。
1. ChatbotからAgentへの進化
かつてのAI利用は「Chatbot(一問一答)」が主流でした。「この文章を要約して」と投げれば、その場限りで答えが返ってくる世界です。このレベルなら、毎回呪文のようなプロンプトをコピペすれば対応できました。
しかし現在は、DevinやClaude Codeに代表される「自律型AIエージェント(Autonomous Agents)」の時代です。
Yachi個人的には、一問一答形式のチャットボット活用はもう「過去のもの」になりつつあると感じています。これからの主戦場は、AIが自律的にタスクをこなすエージェント領域です。ここでは「いかに良い質問をするか」よりも「いかにAIが働きやすい環境(コンテキスト)を用意するか」がエンジニアの腕の見せ所になります。
エージェントは、「環境構築」→「コード記述」→「エラー修正」→「デプロイ」といった連続的なタスクを自律的にこなします。ここで求められるのは、「3ステップ前に自分が何をしたか」「プロジェクト全体のゴールは何か」を記憶し続ける能力(Stateful)です。コンテキストが途切れると、エージェントは自分が何をしているか忘れ、同じ修正を無限に繰り返すループに陥ります。
2. 技術的な追い風
技術インフラも、コンテキスト重視へとシフトしています。
- Long Context Window: GoogleのGemini 1.5 Proなどが数百万トークン(文庫本数千冊分)のコンテキストを一度に入力可能にしました。
- MCP (Model Context Protocol): Anthropicなどが推進する、AIに渡すコンテキストの供給方法を標準化するプロトコルが登場しました。これにより、ローカルのファイルやデータベースを「コンテキスト」としてAIにシームレスに接続する動きが加速しています。
Mikoto最近よく聞く「MCP」って、AIに情報を渡すための共通ルールみたいなものなんですね。
Yachiそうです。これまでは各社バラバラの方法でデータを渡していましたが、MCPによって「PC内のファイル」や「社内データベース」を、まるでAIの手足のように接続できるようになりつつあります。
失敗するAI導入プロジェクトの多くは、AIモデルの性能不足ではなく、この「前提情報の供給不足(コンテキスト設計の不備)」によるハルシネーションが原因です。


エンジニアリング対象としての4つの技術レイヤー
「文脈を読ませる」といっても、エンジニアにとっては具体的に何を実装すればいいのか曖昧です。システム実装の観点から、コンテキストは以下の4つのデータレイヤーに分解できます。
Mikotoちょっと難しそう…。具体的に何を設定すればいいんですか?
Yachi難しく考える必要はありません。要は「変えてはいけないルール」から「今の状況」まで、情報の種類を4つに分けて管理しようという話です。
L1: Identity & Rules (System Context)
最も優先度が高い、不変の固定情報です。
- 内容: AIのペルソナ(役割)、企業の倫理規定、絶対的な制約事項。
- 実装: システムプロンプト(System Message)として記述します。
- 例: 「あなたは弊社のカスタマーサポートAIです。競合他社の製品については『回答できません』と答えてください。出力は必ずJSON形式で行ってください。」
Yachi開発現場で一番手っ取り早く効果が出るのがこのL1です。個人的には、ここを曖昧にしたままL2やL3を作り込んでも砂上の楼閣だと考えています。まずは「お前は何者で、何をやってはいけないか」を徹底的に定義するのが定石です。
L2: Session Memory (Interaction Context)
ユーザーとの対話の中で生まれる短期記憶です。
- 内容: 直前の質問、AIの回答、ユーザーが訂正した内容。
- 役割: 「さっきの件だけど」という指示語を解決するために必須です。
- 実装: チャット履歴(Chat History)を配列として保持し、リクエストのたびに送信します。
L3: Knowledge Base (Semantic Context / RAG)
AIが学習していない、固有の外部知識です。
- 内容: 社内ドキュメント、API仕様書、製品マニュアル、最新のニュース。
- 役割: 汎用的なLLMを「自社専用AI」に変えるための知識源です。
- 実装: ベクトルデータベース等を用いたRAG(Retrieval-Augmented Generation)により、質問に関連する情報だけを動的に取得してコンテキストに挿入します。
L4: Device & User State (Situational Context)
ユーザーが明示的に語らない、暗黙のメタデータです。
- 内容: ユーザーの現在地、使用デバイス(PC/スマホ)、現在時刻、OSのバージョン、ユーザーの熟練度ランク。
- 役割: 「近くのコンビニ教えて」と言われた時に、GPS情報(コンテキスト)がなければ回答できません。
- 実装: アプリケーション側で自動取得し、プロンプトのヘッダー情報として付与します。
実践:コンテキスト設計の実装テンプレート
では、実際にAI(CursorやClaudeなどのコーディングAIを含む)に指示を出す際、どのようにコンテキストを構成すればよいのでしょうか。
曖昧な自然言語でダラダラ書くのではなく、開発者らしく構造化データとして記述することを強く推奨します。
Yachi僕は普段、AIへの指示をMarkdownかXMLタグで完全に構造化して書いています。「〜してください」と丁寧語で作文するよりも、箇条書きでパラメータとして渡す方が、AIも誤読しませんし、何より書くのが楽だからです。
ここではC.G.E.S.モデル (Context, Goal, Expectation, Source) の考え方をベースに、より実装寄りにチューニングしたMarkdownテンプレートを紹介します。
推奨構造 (Markdown Template)
AIへの指示は、以下のセクションに分けて記述すると、誤読リスクを劇的に減らせます。
- # Role: 何者として振る舞うか
- # Context: 背景・前提知識
- # Input Data: 処理対象の生データ
- # Constraints: 制約条件(禁止事項)
- # Output Schema: 出力形式の定義
実装シナリオ:SaaS製品の障害報告レポート自動生成
あなたがSRE(サイト信頼性エンジニア)として、サーバーログから経営層向けの報告書をAIに書かせるシーンを想定してください。
悪い指示例:
「ログを見て、障害の原因と対策をいい感じにレポートにまとめて。偉い人が見るから分かりやすくね。」
これでは「偉い人」の定義も「分かりやすく」の基準もAI任せになり、専門用語だらけのレポートが出てくる可能性があります。
良いコンテキスト設計例 (Markdown):
# Role
あなたは大手SaaS企業のシニアSRE(Site Reliability Engineer)です。
高度な技術的知識を持ちつつ、非技術者である経営層にも分かりやすく説明する能力に長けています。
# Context
- 対象システム: 決済基盤マイクロサービス (Payment-Gateway)
- 発生事象: 202X年10月15日 14:00〜14:30の間、決済APIのエラー率が15%に上昇。
- 現在のステータス: ロールバックにより復旧済み。
- 読者ターゲット: CTOおよび事業部長(技術的な詳細よりも、ビジネス影響と再発防止策に関心がある)
# Input Data
以下は障害発生時のログ抜粋です:
```json
[
{"timestamp": "14:05:01", "level": "ERROR", "msg": "Connection timeout to DB-Primary"},
{"timestamp": "14:05:05", "level": "WARN", "msg": "Retry attempt 3 failed"},
{"timestamp": "14:15:00", "level": "INFO", "msg": "Auto-scaling group triggered"}
]
```
# Constraints
- 専門用語(「DBのコネクションプール枯渇」など)を使う場合は、必ず括弧書きで平易な補足説明を入れること。
- 責任の所在(誰が悪かったか)ではなく、仕組みの問題(プロセス)にフォーカスすること。
- 「推測」と「事実」を明確に書き分けること。
# Output Schema
以下のセクション構成で出力してください。
1. **Executive Summary**: 3行以内で概要を要約
2. **Business Impact**: ユーザーへの具体的な影響(推定機会損失など)
3. **Root Cause**: 技術的な根本原因
4. **Action Plan**: 恒久対策とスケジュール
Mikotoすごい…!これなら「偉い人」が誰なのかも、何を書くべきかも明確ですね。
Yachiそうなんです。特に# Output Schemaを指定することで、AIが勝手なフォーマットで書き出すのを防げます。ここまで型を決めてあげれば、AIは「ログの分析」という本質的な作業だけに能力を使えるわけです。
AIが誤読しないコンテキスト構築の6品質基準
コンテキストを作成したら、それが機能するかどうかを以下の6つの基準でバリデーション(検証)してください。
- 1. Clarity (明確性)
- 定義揺れはありませんか?(例:「ユーザー」と「顧客」が混在していないか)
- 2. Specificity (具体性)
- 「適当に」「よしなに」といった表現を排除していますか?数値や固有名詞で指定しましょう。
- 3. Relevance (関連性)
- ノイズ情報は除去されていますか?無関係な情報を大量に渡すと、「Needle in a Haystack(干し草の中の針)」問題が発生し、AIが重要な指示を見落とす原因になります。
- 4. Consistency (一貫性)
- 指示Aと指示Bで矛盾していませんか?(例:「詳細に書いて」と「簡潔にまとめて」が同居している)
- 5. Completeness (網羅性)
- 推論に必要な変数は全て揃っていますか?(先の例で言えば、ログデータなしで「原因を特定せよ」と言っていないか)
- 6. Conciseness (簡潔性)
- トークンは節約されていますか?過剰な敬語や「こんにちは」といった挨拶は、AIのメモリを圧迫するだけのノイズです。可能な限り削ぎ落としましょう。
Yachi個人的には、特に「Relevance(関連性)」を意識してほしいです。何でもかんでも情報をぶち込めばAIが賢くなるわけじゃありません。ノイズが多いと、逆にAIは混乱します。「必要な情報だけを渡す」のが、できるエンジニアの設計です。
「ホワイトボード」の限界:トークン制限と管理技術
なぜコンテキストエンジニアリングが必要なのか。それはAIの記憶容量(コンテキストウィンドウ)に物理的な限界があるからです。
会議室のホワイトボード理論
AIのコンテキストウィンドウは、「会議室にあるホワイトボード」に例えられます。
- 面積の限界: ホワイトボードの大きさには限りがあります(トークン制限)。
- 情報の密度: 無理やり大量の情報を書き込むと、文字が極小になり、どこに何が書いてあるか分からなくなります(Accuracy/精度の低下)。
- 上書き: スペースがなくなると、古い議論(過去の会話)から消していくか、新しい情報が書けなくなります。
Mikotoあ、だから長いチャットをしてると、最初の方で言った設定を忘れちゃうんですね。
Yachiまさにホワイトボードがいっぱいで、古い文字から消されている状態です。「数百万トークン対応」という最新モデルでも、情報を探す手間(レイテンシ)や料金は増えるので、整理整頓は必須スキルです。
したがって、以下の技術でホワイトボードを綺麗に保つ必要があります。
1. Summarization (要約)
古い会話履歴をそのまま残すのではなく、「これまでの決定事項まとめ」として要約・圧縮してから次のターンに引き継ぎます。
- Before: 2時間の会議の全発言記録
- After: 議事録(決定事項のみ)
2. RAG (Retrieval-Augmented Generation)
ホワイトボードには今必要なことだけを書き、詳細な資料は「資料棚(外部データベース)」に入れておきます。必要な時だけ資料棚から取り出してホワイトボードに貼り付ける仕組みがRAGです。これにより、ホワイトボードを埋め尽くすことなく、膨大な知識を利用できます。
3. Context Clearing
タスクが完了したら、ホワイトボードを一度完全に消去します。前のタスクのコンテキスト(変数や設定)が残っていると、次のタスクに悪影響を与える(コンタミネーション)ためです。



よくある質問と誤解 (FAQ)
- コンテキストさえ完璧なら、プロンプトエンジニアリングはもう不要ですか?
-
不要にはなりませんが、役割が「微調整」へと縮小します。
出力精度の9割はコンテキスト(役割定義や前提データ)で決まります。プロンプトエンジニアリングは、最後の1割、つまり「語尾のニュアンス調整」や「出力フォーマットの微修正」を行うための技術として残ります。ゼロから指示を作り込む技術というよりは、コンテキストを正しく機能させるためのスイッチ操作に近いイメージです。 - コンテキストを長くしすぎるとどうなりますか?
-
「コスト増大」「反応速度の低下」「精度の低下」の3重苦を招きます。
特に注意すべきは精度の低下です。情報量が多すぎると、AIはどの情報が重要なのか判断できなくなり、指示の一部を無視したり(Lost in the Middle現象)、関連性の薄い情報に引きずられて幻覚(ハルシネーション)を見たりする可能性が高まります。 - RAGと長いプロンプト(Long Context)、どちらが良いですか?
-
情報の「更新頻度」と「量」で使い分けます。
- Long Context (プロンプトに全部書く): AIの「役割」や「不変のルール」、あるいは中規模な固定マニュアル。常に参照させたい情報に向いています。
- RAG (検索して差し込む): 社内Wiki全体や過去数年分のログデータなど、膨大でかつ頻繁に更新される情報。必要な部分だけをピンポイントで取得する場合に向いています。
まとめ:コンテキストエンジニアリングへシフトせよ
「プロンプト」がAIへの命令だとすれば、「コンテキスト」はAIが生きる世界そのものの定義です。
AIモデルが進化し、単純な命令は誰でも出せるようになった今、エンジニアに求められるスキルは「上手な言い回しを考えること」ではありません。
業務フロー、データ構造、制約条件といった曖昧な文脈を、「構造化されたデータ(コンテキスト)」として再定義し、AIに渡してあげる設計能力です。
Mikoto単に「いいプロンプトを書こう」とするだけじゃなくて、AIが働きやすい環境を整えてあげるのが私たちの仕事なんですね。
Yachiその通りです。AIへの指示を「チャット欄への書き込み」ではなく、「システム設定」として捉え直してみてください。それだけで、AIの回答精度は劇的に向上するはずです。
今日から、コンテキストを意識したAI活用を始めてみてください。
