MemoryLake
すべての記事に戻る
Tutorial2026年7月30日·8 分で読了

ChatGPTがテストケースを忘れてしまう理由と、その解決策 (2026)

新しいチェックアウトフローのテストケースを作成するようChatGPTに依頼したとします。ChatGPTは、一見しっかりした20個のケースを出力してくれます。しかし、それはチームが昨年廃止した命名スタイルで書かれており、その半分はすでに存在するカバレッジと重複しており、3月に請求システムをダウンさせたタイムゾーンのバグには一切触れていません。そのため、あなたは再び命名規則を貼り付け、既存のスイートを再度リストアップし、エッジケースをもう一度説明することになります。そして翌週、次の機能を開発するときに、また同じことを繰り返すのです。

結論から言うと、ChatGPTはあなたのテストスイートの全体像を常に把握しているわけではありません。多くのQA担当者が指摘しているように、ChatGPTは既存のテストスイート、命名規則、組織の標準を知りません。また、あなたのアプリケーション、アーキテクチャ、ビジネスルール、あるいは過去に痛い目を見たエッジケースについても把握していません。ChatGPTに組み込まれているメモリ機能は、ユーザーの好みやプロフィール情報を保持するためのものであり、スプリントごとに変化するレグレッションスイートの状態を保持するためのものではありません。セッションごとに、そのとき貼り付けられた情報からプロジェクトの状況を推測し直しているのです。

これは解決可能な問題ですが、より優れたプロンプトを書くことによって解決するわけではありません。モデルがQAのコンテキストを読み取れる永続的な場所を提供することで解決します。

ChatGPTがテストケースを忘れてしまう理由

そもそもあなたのテストスイートを最初から持っていない

テストスイートは、数百のケース、命名規則、フィクスチャ、タグ付けのルール、何がカバーされていて何があえてカバーされていないかの暗黙のマップなど、大規模で構造化され、進化し続ける成果物です。これらは、会話の中で提供しない限りモデルには伝わりません。その結果、得られるのは一般的なベストプラクティスに基づいたテストスイートになります。単体で見れば合理的ですが、あなたのリポジトリにとっては間違ったものになってしまいます。

アップロードしたファイルはチャット終了と同時に消滅する

テストスイートをアップロードすることは、そのチャット内では有効です。会話が続いている間はコンテンツを利用できますが、チャットが終われば消えてしまいます。新しいチャットは、そのファイルが存在したことすら認識せずに始まります。これは、ChatGPTがアップロードされたファイルを忘れてしまう理由で説明されているのと同じ壁です。毎週変更されるテストスイートの場合、再アップロードは面倒な作業であり、徐々に実際のコードと乖離していきます。最新バージョンを毎回アップロードし直す人はほとんどいません。

組み込みメモリは「好み」を保存するものであり、「カバレッジ」を保存するものではない

ChatGPTのメモリ機能は、ユーザーの役割、トーン、常時適用したい指示などを保持するように設計されています。これは非常に便利ですが、タグ、所有者、根拠を含む400個のテストケースのインデックスではありません。メモリ機能にカバレッジマップを保持させようとするのは、その機能が想定していない仕事を任せるようなものです。そして、その失敗は静かに起こります。モデルは、古い記憶に基づいて自信満々に回答してしまうのです。

最も価値のあるQAコンテキストは「歴史」である

最も重要なテストは、何かが壊れた後に書かれたテストです。その価値は「経緯」にあります。このアサーションが存在するのは、本番環境で一部返金が二重にクレジットされたためであり、あのリトライテストが存在するのは、決済ゲートウェイが30秒でサイレントタイムアウトしたためです。こうした歴史は、インシデントの報告書、チケットのスレッド、そして当時オンコール対応していた人の記憶の中に存在しており、今朝開いたチャットの中にはありません。関連する問題は、ChatGPTがプロジェクトのコンテキストを忘れてしまう問題や、テストが検証すべき要件を見失ってしまう問題(ChatGPTが製品要件を忘れてしまう問題で解説)として現れます。

QAチームが試みる対策

巨大なプロンプトテンプレート

一般的な回避策は、技術スタック、命名規則、ユーザーロール、ビジネスルールをまとめた再利用可能なブロックを、すべてのセッションの冒頭に貼り付けることです。これは機能しますが、コストがかかります。リクエストのたびにそれらのトークン代を支払うことになり、テンプレートはコードベースと同期しなくなって古くなり、命名規則が変更されたスプリントの後に誰もそれを更新しなくなります。

セッションごとにテストスイートを再アップロードする

テンプレートよりも正確ですが、より面倒であり、コンテキストウィンドウに収まる量やモデルが有効に読み取れる量に制限されます。また、これは悪いインセンティブを生みます。面倒であるため、人々はテストスイートの一部だけをアップロードするようになり、モデルは見えていないカバレッジについて推論することになります。

Custom GPTsまたは専用のプロジェクト

これは確実な改善策です。指示と参照ファイルが一箇所にまとまり、チームで共有できます。しかし、依然として手動で維持する必要があるサイロです。カバレッジが変更されてもファイルは自動的に更新されません。また、実装を書くコーディングエージェントや、リリースを要約するアシスタントからはその情報にアクセスできません。同じテストスイートに対して2つの真実のソース(Source of Truth)が存在することが、矛盾の始まりとなります。

仕様書を丸ごと貼り付ける

長いコンテキストウィンドウが利用できるため、仕様書を貼り付けたくなります。しかし、仕様書は「意図」を記述するものであり、「カバレッジ」を記述するものではありません。また、どのケースがすでに存在しているかについては何も教えてくれません。結果として重複が発生し、誰も400個のテスト名を頭の中に保持できないため、その重複はレビューを通過してしまいます。

解決策:ChatGPTに永続的なQAメモリを与える

この繰り返しを終わらせるパターンは、QAコンテキストを単一のチャットの外にあるメモリレイヤーに保持し、モデルにそこから読み取らせることです。MemoryLakeはそのために構築されています。命名規則、カバレッジマップ、インシデント履歴を一度保存すれば、作業を行うアシスタントやエージェントがいつでも取り出すことができます。

ステップ 1: APIキーを作成する

キーを生成し、約30秒で最初のリクエストを実行できます。

MemoryLakeのAPIキーを作成する
MemoryLakeのAPIキーを作成する

ステップ 2: 最初のメモリをアップロードする

チームのテスト方法を定義するドキュメント、画像、ファイルを投入します。命名規則やタグ付けのルール、カバレッジマップ、テスト計画、受入基準、レグレッションテストを作成するきっかけとなったバグのポストモーテム、および理由付きのフレーキーテスト(不安定なテスト)のリストなどです。

最初のメモリをMemoryLakeにアップロードする
最初のメモリをMemoryLakeにアップロードする

ステップ 3: AIとエージェントを接続する

Claude、Codex、OpenClaw、およびその他のエージェントに、MCPまたはAPIを介してそのメモリへのアクセス権を与えます。ChatGPTの場合、APIを通じて関連するメモリを取得し、会話やQAツールに流し込みます。これにより、モデルは一般的なテストスイートではなく、実際のテストスイートに基づいて動作を開始できます。重要なのは、すべてが同じソースを読み取ることです。コードを書くエージェントとテストを書くアシスタントの間で、何が存在するかについての意見の食い違いがなくなります。

MCPを介してAIとエージェントを接続する
MCPを介してAIとエージェントを接続する

実務における変化

繰り返しのコストを計算してみましょう。QAエンジニアが週に10回、セッションの開始時に5分間モデルに状況を説明し直すとしたら、1人あたり毎週約1時間が、変更されていない内容を再説明するために費やされていることになります。もし常時送信するコンテキストブロックが2,500トークンで、チーム全体で1日に30回送信されるとすると、1日あたり75,000トークン、月に約220万トークンを、同じことを繰り返すためだけに支払っていることになります。

請求書に現れないコストはさらに大きくなります。テストスイートの実行時間を引き延ばす重複ケース、モデルが何が欠けているかを知らないために誰も気づかないカバレッジのギャップ、そして理由が記録されていないために静かに再検証されてしまうレグレッションテストなどです。メモリはモデルをより優れたテスト設計者にするわけではありません。あなたのテストスイートを熟知したテスト設計者にするのです。

QAメモリのベストプラクティス

すべてのアサーションではなく、スイートの「形状」を保存する

メモリに400個のテスト本体をすべて入れる必要はありません。必要なのはマップです。モジュールとそのカバレッジレベル、命名およびタグ付けのルール、意図的にテストしていないもの、信頼できるスイートと不安定(flaky)なスイートはどれか、といった情報です。これは1〜2ページ程度で済み、まさにモデルに欠けている情報です。

各レグレッションテストが存在する理由を記録する

インシデントから生まれたテストごとに、症状、根本原因、日付を1行で記録します。これは保存すべき最も価値のある情報です。なぜなら、人が離職したときに失われやすい知識であり、6ヶ月後に「不要なテスト」として削除されるのを防ぐものだからです。

カバレッジと同じプルリクエストでメモリを更新する

メモリの更新が別の作業になっていると、メモリはすぐに陳腐化します。変更と紐付けましょう。命名規則が変わったり、スイートが廃止されたりしたときは、同じPRで保存されている事実を更新します。新しい情報を追記するよりも、古い記述を置き換えることを優先してください。古いQAコンテキストは、存在しないよりも悪影響を及ぼします。モデルも人間もそれを信頼してしまうからです。この習慣は一般化できます。これは、AIにコンテキストを再説明するのをやめるの背後にある規律と同じです。

結論

ChatGPTがテストケースを忘れてしまうのは、そもそもそれらを保持したことがないからです。ChatGPTはテストスイートの全体像を持っておらず、アップロードされたファイルはチャットの終了とともに消え、組み込みメモリはカバレッジマップではなくユーザーの好みを保持します。プロンプトを改善しても、この事実は変わりません。説明し直す時間が長くなるだけです。

テストスイートの形状、命名規則、インシデント履歴を、ツールが読み取れるメモリレイヤーに配置しましょう。そうすれば、モデルの出力は「それらしいもの」から「実用的なもの」へと変化します。あなたの命名スタイルに沿い、実際にカバーされていない部分を狙い、チームが過去に一度痛い目を見たバグを考慮したテストケースが生成されるようになります。これは、たった一度だけ、適切に書き留めておく価値のある情報です。

よくある質問

なぜChatGPTはすでに存在するテストケースを重複して作成してしまうのですか?

あなたのテストスイートが見えていないからです。コンテキストにカバレッジマップがないため、一般的なプラクティスに基づいて生成します。その結果、すでに持っているものと確実に重複し、持っていないものを見落とすことになります。マップを提供すれば、重複は劇的に減少します。

ChatGPTの組み込みメモリにテストの命名規則を保持させることはできますか?

好みの命名スタイルといった短い常時指示を保持することは可能であり、それは役立ちます。しかし、進化し続けるカバレッジマップ、モジュールの所有権、あるいは何百ものレグレッションテストの背景にある理由を保持する場所としては適していません。そのような大量の構造化され、変化する詳細情報には、そのために構築されたメモリレイヤーが必要です。

すべてのチャットにテストスイート全体をアップロードすべきですか?

そのチャット内では正確に動作しますが、習慣としては持続不可能です。古いバージョンを再アップロードしてしまったり、収まらない部分が切り捨てられたりします。テストスイートの形状と命名規則は外部メモリに一度保存し、アップロードはタスクに実際に必要な特定のファイルのみに限定してください。

コーディングエージェントとテスト作成アシスタントの整合性を保つにはどうすればよいですか?

両方を同じメモリに向かわせることです。機能を実装するエージェントと、そのテストを書くアシスタントが、命名規則やカバレッジに関する1つの共有ソースを読み取ることで、お互いに矛盾する成果物を作成することがなくなります。

QAのために保存すべき、最も有用な情報はどれですか?

レグレッションテストの「由来(経緯)」です。何が壊れ、なぜ壊れ、現在はどのテストがそれを防いでいるのか。これはメンバーの交代によって最も失われやすいコンテキストであり、AIにテストスイートの削減や拡張を依頼した際、AIの提案内容を最も大きく変えるコンテキストでもあります。