コンテキスト(文脈)の維持とリセット
AIを活用したExcel VBA開発において、プロンプトの書き方と同じくらい重要なのが、AIとの「会話のキャッチボール」をどのように管理するかという点です。これを専門用語で「コンテキスト(文脈)の管理」と呼びます。人間同士の会話であれば、「あれ」や「それ」で通じる話も、AI相手ではそうはいきません。特に、長時間にわたる開発作業や、複雑な修正を繰り返す場面では、AIが過去の指示を忘れてしまったり、誤った文脈で解釈してしまったりすることが頻繁に起こります。
さらに、利用するAIモデル(ChatGPTやGeminiなど)によって、この「記憶力」や「文脈維持能力」には明確な個性があります。この違いを理解せずに漫然とチャットを続けていると、いつの間にか要件とは異なるコードが生成され、デバッグに膨大な時間を費やすことになりかねません。本記事では、AI開発の成否を分ける「コンテキスト管理」の極意について、10の視点から徹底的に解説します。これをマスターすれば、あなたはAIという優秀な部下の記憶をコントロールし、常に最高パフォーマンスを引き出せる「開発者」となれるでしょう。
コンテキスト(文脈)とは何か:AIの短期記憶のメカニズム
まず、AIにおける「コンテキスト」の正体を技術的な視点から理解しておきましょう。私たちがチャット画面に入力するプロンプトは、一回ごとの独立した命令のように見えますが、実はAIは「過去のやり取り」も含めた全体のテキストデータを参照して、次の回答を生成しています。この「AIが一度に記憶・処理できる情報の範囲」をコンテキストウィンドウと呼びます。
例えば、あなたが最初に「A列の合計を出して」と依頼し、次に「それをB1セルに書いて」と頼んだとします。AIは2つ目の指示を受けた際、1つ目の指示内容(A列の合計を出すこと)を記憶しているため、「それ」が何を指すのかを理解できます。これがコンテキストの維持です。しかし、この記憶領域には限界があります。会話が長く続くと、古い情報はところてん式に押し出され、AIの記憶から消去されていきます。
Excel VBAの開発は、往々にして長文のコードや繰り返しの修正が発生するため、このコンテキストの限界に達しやすい作業です。AIが文脈を見失うと、突然変数名を勝手に変えたり、修正したはずのバグを再発させたりといった「先祖返り」現象が起きます。開発者であるあなたは、AIが今どの範囲まで記憶しているのか、どの情報が抜け落ちている可能性があるのかを常に意識しながら、会話をコントロールする必要があります。コンテキストは無限ではなく、有限のリソースであることをまずは認識してください。
ChatGPTの特性:文脈維持に長けた「専属エンジニア」
OpenAIが開発したChatGPTは、一連の会話の流れ(スレッド)の中での文脈維持能力が非常に高いことで知られています。特にコーディングのタスクにおいては、前のターンで提示したコードの内容や、ユーザーが指定した制約条件(変数名は日本語にする、など)を長く保持し続ける傾向があります。
これは、ChatGPTが過去の会話履歴を重視して回答を生成するように調整されているためです。「さっきのコードの3行目を直して」といった、人間に近い指示の出し方をしても、ChatGPTは「さっきのコード」を正確に特定し、的確な修正を行います。また、複数の機能を順次追加していくような開発スタイルとも相性が良く、まるで専属のエンジニアとペアプログラミングをしているような感覚で作業を進めることができます。
しかし、その高い記憶力が裏目に出ることもあります。一度間違った方向に話が進んでしまうと、ChatGPTはその「間違った文脈」を強く保持してしまい、修正指示を出してもなかなか軌道修正できないことがあります。例えば、最初に誤ったシート名を伝えてしまうと、何度訂正しても無意識に古いシート名を使ってしまうようなケースです。ChatGPTを使う際は、その「粘り強さ」を活かしつつ、誤った文脈が定着しないように早期に軌道修正することが重要です。
Geminiの特性:切り替えが早い「都度相談のアドバイザー」
一方、GoogleのGeminiは、ChatGPTとは対照的な特性を持っています。Geminiは一つ一つの質問に対して、その都度最適な答えを出そうとする傾向が強く、文脈の維持に関してはやや淡白な側面があります。会話のトピックが少し変わると、前の指示内容をリセットして、ゼロベースで回答を生成することがあります。
例えば、VBAコードの作成を依頼した後、そのコードに関する一般的な質問(「この関数はどういう意味?」など)を挟むと、その直後に「じゃあコードの続きを書いて」と頼んでも、Geminiは「どのコードのことでしたっけ?」といった反応を示すことがあります。あるいは、以前に指示した「変数は日本語で」というルールを忘れて、英語の変数に戻ってしまうこともあります。これはGeminiが劣っているわけではなく、「常に最新の情報に基づいて最適解を出そうとする」という設計思想の違いによるものです。
Geminiは「アドバイザー」としての能力に優れています。コードの生成そのものよりも、エラーの原因説明や、代替案の提案などが得意です。したがって、Geminiを利用する場合は、文脈に依存しすぎない指示の出し方が求められます。「前回のあれ」という指示は避け、必要な情報は毎回プロンプトに含めるようにすることで、Geminiの能力を最大限に引き出すことができます。
文脈切れのサインを見逃さない:AIが「忘れた」瞬間
開発を進めていると、AIが文脈を見失ったことを示すサインが現れます。これを見逃して作業を続けると、コードの整合性が取れなくなり、最終的に破綻します。開発者はこのサインに敏感でなければなりません。
代表的なサインの一つは、「制約条件の無視」です。最初に「エラー処理を入れてください」と頼んでいたのに、修正版のコードからエラー処理が消えている場合、AIは最初の指示を忘れています。また、「突然の変数名の変更」も危険信号です。それまで uriage という変数を使っていたのに、急に sales に変わった場合、AIの中で文脈がリセットされている可能性が高いです。
さらに、「幻覚(ハルシネーション)の増加」も文脈切れの兆候です。会話が長くなりすぎて処理しきれなくなると、AIは整合性を保とうとして、存在しない関数や誤った構文を捏造し始めます。AIの回答がなんとなく噛み合わなくなってきた、以前言ったことを守らなくなってきたと感じたら、それは「コンテキストの限界」です。無理に会話を続けようとせず、情報を再提示するか、会話をリセットする判断が必要です。
情報を再提示する技術:アンカー(錨)を打ち直す
AIが文脈を忘れかけた時、あるいは重要なルールを徹底させたい時に有効なのが「情報の再提示」です。これは、プロンプトの中に過去の重要な決定事項や制約条件を、再度含めるテクニックです。
例えば、コードの修正を依頼する際、単に「ここを直して」と言うのではなく、「以下の制約条件を守った上で、ここを修正してください」とし、その下に「#制約条件 ・変数は日本語 ・エラー処理を入れる」といったリストをコピペして貼り付けます。これにより、AIの記憶領域(コンテキストウィンドウ)の最新部分に重要なルールが再配置され、記憶が強化されます。
これを「アンカー(錨)を打ち直す」とイメージしてください。会話という海流に流されないように、定期的にルールの錨を下ろすのです。特にGeminiのような忘れっぽいAI相手には、毎回プロンプトの末尾に「前提条件」をセットで貼り付けるくらいの慎重さが、手戻りを防ぐ最大の防御策となります。面倒に感じるかもしれませんが、テンプレート化しておけば一瞬の作業です。
ステートレスなプロンプト設計:記憶に頼らない指示
さらに進んだテクニックとして、「ステートレス(状態を持たない)」なプロンプト設計があります。これは、AIが過去の会話を全く覚えていないとしても、その一回のプロンプトだけで完璧に意図が伝わるように指示を構成する方法です。
具体的には、修正依頼を出す際に、「今のコード」と「エラー内容」と「修正したい要件」と「制約条件」をすべて一つのプロンプトに詰め込みます。「以前のコードを修正して」ではなく、「以下のVBAコード(コード貼り付け)に対して、これこれこういう修正を加えて、再出力してください」と指示します。
このように、必要な情報をすべて「入力」として渡してしまえば、AIの記憶力に依存する必要がなくなります。この方法は、特にGeminiを使う場合や、会話が長くなってコンテキストが怪しくなってきた場合に極めて有効です。毎回情報をセットする手間はかかりますが、AIの解釈ミスを極限まで減らすことができるため、結果的に開発スピードは向上します。
会話のリセット(New Chat)のタイミングと重要性
コンテキストが長くなりすぎたり、AIが混乱して誤った回答を繰り返すようになったりした場合、最も効果的な解決策は「リセットボタンを押す」こと、つまり「新しいチャット(New Chat)」を開始することです。
多くの初心者は、一つのチャットスレッドで粘り強く修正しようとしますが、一度「汚染された文脈」を持ったAIを正常に戻すのは困難です。間違った前提を記憶してしまっているからです。そのような時は、潔く新しいチャットを開き、整理された要件と、現状の最新コードを貼り付けて、「ここから再スタート」する方が圧倒的に早いです。
特に、全く別の機能を追加する場合や、話題が大きく変わる場合は、必ずチャットを分けるべきです。一つのチャットに「売上集計マクロ」と「メール送信マクロ」の話題が混在すると、AIはそれらを関連付けてしまい、「メール送信機能付きの売上集計マクロ」という意図しない怪物を生み出すことがあります。トピックごとに部屋を分ける感覚で、チャットスレッドを管理しましょう。
ChatGPTとGeminiの「二刀流」運用フロー
AIごとの特性を活かし、両者を組み合わせて開発を進める「二刀流」のフローも効果的です。例えば、メインのコーディングは文脈維持力の高いChatGPTに任せ、そこで発生したエラーの解析や、コードの解説はGeminiに任せるといった使い分けです。
ChatGPTでコードを作成し、エラーが出たとします。そのエラー解決をChatGPT内で続けると、試行錯誤の履歴が増え、コンテキストが汚れていきます。そこで、エラーが出たコードとエラーメッセージをGeminiに投げ、「原因を教えて」と聞きます。Geminiは客観的な視点でアドバイスをくれます。そのアドバイスをもとに、人間がChatGPTに対して「〇〇が原因のようなので、修正して」と指示を出します。
このように、メインの開発ライン(ChatGPT)を汚さずに、サブの相談役(Gemini)を活用することで、文脈をきれいに保ったまま開発を進めることができます。AI同士のセカンドオピニオンを活用することは、現代の「開発者」の賢い仕事術です。
開発者としての要約力:AIに「今までのあらすじ」を伝える
新しいチャットに移る際や、長くなった会話を整理する際、人間に求められるのが「要約力」です。これまでの経緯をダラダラと説明するのではなく、「現状のコードはこれ」「達成したいゴールはこれ」「残っている課題はこれ」と、状況を構造化してAIに伝える能力です。
実は、この「あらすじの作成」自体をAIに任せることも可能です。「これまでの議論をまとめて、次のチャットで開発を引き継ぐための要件定義書を作って」と依頼するのです。AIが出力した要約文をコピーし、新しいチャットの冒頭に貼り付ければ、スムーズに文脈を引き継ぐことができます。
AIにAIを管理させる。このメタ的な視点を持つことで、あなたはコードを書く作業者から、AIというリソースを管理するプロジェクトマネージャーへと進化します。コンテキストの移行作業すらも自動化することが、効率化の最終段階です。
結論:コンテキストを支配する者がAI開発を制す
本章のまとめとして、コンテキスト管理は単なるテクニックではなく、AIと共存するための「共通言語」であることを強調します。AIは優秀ですが、記憶力には癖があり、限界があります。その限界を補い、正しい方向に導くのは、常に人間の役割です。
ChatGPTの「記憶力」とGeminiの「瞬発力」。それぞれの特性を理解し、情報を再提示し、時にはリセットする。この手綱さばきさえ覚えれば、AIはあなたの意図を完璧に汲み取り、驚くべきスピードでコードを生み出し続けます。
これで、プロンプトエンジニアリングの基礎となる第2章は終了です。ここまでの知識で、あなたはもう「なんとなくAIを使っている人」ではありません。AIの特性を理解し、指示を構造化し、文脈をコントロールできる「開発者」としての基礎体力がつきました。次章からは、これらのスキルを総動員して、より実践的で複雑な業務課題を解決する応用編へと進んでいきましょう。
