2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GitHub Copilot】/compact って何?長くなった会話を要約してコンテキストを空けるコマンドを調べてみた

2
Posted at

はじめに

GitHub Copilot のチャットで使えるスラッシュコマンドの中に、/compact というものがあるのを見つけました。

/compact

名前から「何かを小さくするコマンド」なのだろうとは想像できるものの、何が小さくなるのか、実行すると何が起きるのかはわかりませんでした。そこで次のことを調べました。

  • /compact は何をするコマンドなのか
  • 自動でも実行されるなら、手動で実行する意味はあるのか
  • Codex や Claude Code にも同じようなコマンドはあるのか

/compact は会話履歴を要約して置き換えるコマンド

/compact は、これまでの会話履歴を AI に要約させて、その要約で古い履歴を置き換えるコマンドです。会話は同じスレッドのまま続けられます。

VS Code、Visual Studio、GitHub Copilot CLI のいずれも、チャットの入力欄に /compact と入力して使うとドキュメントに書かれています。

長いメモを要点だけの 1 ページにまとめ直して、空いたスペースで作業を続けるイメージだと捉えました。

なぜ会話を要約する必要があるのか

AI が一度に扱える情報量には上限があり、これをコンテキストウィンドウと呼びます。

チャットでのやり取りは、ユーザーの指示、AI の返答、添付したファイルなどがこのコンテキストウィンドウに積み重なっていきます。長い作業をしていると、いずれ上限に近づきます。

/compact は、この上限に達する前に会話を要約して、空きを作るためのコマンドです。

使い方

チャットの入力欄で /compact を実行します。

Visual Studio では、コマンドを入力する以外に、コンテキストウィンドウのインジケーターから 会話の圧縮(Summarize conversation) を選んでも、同じように会話を圧縮できます。

スクリーンショット 2026-09-29 16.25.15.png

自動でも実行される

手動で実行しなくても、自動で圧縮される環境があります。

  • VS Code は、会話が上限に近づくと、古い部分を自動で要約にまとめます。
  • GitHub Copilot CLI は、通常は会話がコンテキストウィンドウの約 80% に近づくと、自動で圧縮を始めます。

それでも手動で使う場面として、GitHub Copilot CLI のドキュメントでは、新しい作業フェーズに入る前に空きを作っておく使い方が挙げられています。Visual Studio のドキュメントでは、コンテキスト使用率が高く、直近の重要な内容を失いたくないときや、スレッドが長くなっても同じチャットで続けたいときに使うよう書かれています。

圧縮すると何が失われるのか

圧縮は要約なので、すべてが残るわけではありません。VS Code のドキュメントには、以前のメッセージの詳細は要約されたり省略されたりすることがある、と書かれています。

そのため、複数のリクエストやセッションにまたがって守ってほしいルールは、会話の中に書くのではなく、カスタム指示に書いておくよう案内されています。また、無関係な作業に移るときは、新しいセッションを始めるのがよいとされています。

使用量を確認する

どれくらいコンテキストを使っているかを確認する方法は、環境によって違います。

  • Visual Studio では、コンテキストウィンドウのインジケーターで使用率を確認できます。選択すると、会話メッセージやワークスペースのファイルなど、何が使用量に含まれているかの内訳も見られます。
  • GitHub Copilot CLI では、/context コマンドで内訳が表示されます。

/compact を実行するかどうかの判断材料になりそうです。

Codex や Claude Code にもある

同じ名前のコマンドが、OpenAI の Codex と Claude Code にもあります。GitHub Copilot と同じく、AI に要約を作らせて古い履歴と置き換えるという点は共通しています。

違いは、自動圧縮の開始タイミングと、その閾値の変更方法、圧縮後に何を残すかです。

ツール 自動圧縮の開始 閾値の変更 圧縮後に主に残るもの
Codex モデル既定、または設定したトークン閾値 手元の環境の config.toml の model_auto_compact_token_limit 以前のターンを置き換える要約
Claude Code 未設定時はモデルや実行環境に応じた既定値 /autocompact、--autocompact、環境変数 会話の要約、起動時コンテキストの一部、呼び出したスキルの本文(上限あり)

Codex は、手元の環境の config.toml にある model_auto_compact_token_limit で設定した閾値を超えると自動で圧縮します。未設定の場合はモデルごとの既定値が使われます。

Claude Code は、/autocompact 500k のようにコマンドで自動圧縮の閾値を指定できます。指定した値はユーザー設定 autoCompactWindow に保存されます。起動時に claude --autocompact 500k とすると、その起動時だけ有効になります。スクリプトなどでは環境変数 CLAUDE_CODE_AUTO_COMPACT_WINDOW に 500000 のような整数で指定することもできます。/autocompact と --autocompact で指定できる範囲は 100K〜1M トークンで、いずれもモデルのコンテキストウィンドウが上限になります。/autocompact auto でモデルごとの既定値に戻せます。

Claude Code は、要約に加えて、起動時に読み込んだ内容の一部や、呼び出したスキルの本文が圧縮後に再度読み込まれます。スキルの本文には 1 つあたり 5,000 トークン、合計 25,000 トークンまでの上限があります。

補足:GitHub Copilot CLI の場合

ここまでの内容に加えて、GitHub Copilot CLI のドキュメントには、処理の流れなどがより詳しく書かれています。

/compact を実行すると、次の順で処理されます。

  1. 現在の会話履歴のスナップショットを取る
  2. 会話全体を AI に渡し、構造化された要約を作らせる
  3. 古い会話履歴を、その要約に置き換える。元のユーザー指示と、計画や ToDo リストの状態も残る
  4. バックグラウンド圧縮中に追加されたメッセージは、そのまま残す

要約には、会話の目的、完了した作業、重要な技術的詳細、重要なファイル、次のステップが含まれます。

自動圧縮では、ツール操作用に通常は約 20% のバッファが確保されていて、圧縮が終わる前に約 95% へ達すると、完了するまで処理が待機します。自動圧縮が始まるタイミングは固定ではありません。システムメッセージやツール定義などの固定のコンテキストが約 75% 以上を占める場合は、圧縮しても回収できる領域が小さいため、開始が 90% 付近まで遅くなります。また、デフォルトで 20 KiB を超える大きなツール出力は一時ファイルに保存され、モデルにはファイルパスとプレビューだけが渡されます。

/compact の後ろに指示を付けると、要約で優先して残す内容を指定できます。

/compact データベース接続のロジックに注目して

この例だと、一般的なやり取りは要約しつつ、データベース接続まわりの詳細は残すように指示しています。実行中の手動圧縮は Esc でキャンセルできます。

圧縮のたびに、圧縮時の要約を保存した番号付きのチェックポイントファイルが作られ、あとから確認できます。

自動圧縮の閾値を変更する設定項目は、公式ドキュメントの範囲では見つけられませんでした。

まとめ

  • /compact は、長くなった会話を AI に要約させて、古い履歴と置き換えるコマンド
  • VS Code、Visual Studio、GitHub Copilot CLI のチャット入力欄で使える
  • Visual Studio では、インジケーターの Summarize conversation からも実行できる
  • VS Code は上限に近づくと自動で圧縮し、GitHub Copilot CLI は通常約 80% に近づくと自動圧縮を始める
  • 要約なので、以前のメッセージの詳細は省略されることがある。守ってほしいルールはカスタム指示に書いておく
  • GitHub Copilot CLI では、/compact の後ろに指示を付けて、優先して残す内容を指定できる
  • Codex や Claude Code にも /compact があり、違いは自動圧縮の開始タイミング、閾値の変更方法、圧縮後に残る内容

調べる前は、単に古い履歴を切り捨てるコマンドだと思っていました。実際は「要点だけ残す」ものだとわかり、長い作業の区切りで使えそうだと感じました。細かい情報は失われるため、残したい内容を指示で指定する使い方を試してみたいです。

参考になったら いいね や ストック をお願いします!
同じような経験をされた方のコメントもお待ちしています。

参考

関連リンク

技術ブログでも学びや検証内容をまとめています。

nakamuuublog

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?