Claude Code の教科書
第1章 Claude Code とは何か

コンテキストウィンドウの中身を知る

セッション開始前に何が自動で読み込まれ、ファイル読取やフックがどれだけコンテキストを消費し、圧縮(/compact)で何が残るかを解説する

第1部 クイックスタート0/12

この節で学ぶこと

この節を一言で言うと、コンテキストウィンドウは、あなたが文字を打つ前からかなり埋まっているという話です。

セッションを始める前から何が自動で積まれるか、ファイルを読むたびに何が増えるか、サブエージェントや圧縮(/compact)が何を残して何を消すかがわかります。

見えない情報で先に埋まっている

コンテキストウィンドウ
起動時に自動ロード
会話で増える
圧縮で整理
CLAUDE.md自動メモリMCPツール名ファイル読取

何も入力していない時点で、これらはすでにコンテキストに入っている

イメージでつかむ

限られた広さの作業机を思い浮かべてください。仕事を始める前から、机の上にはすでに参考資料のバインダーが何冊も置かれています。

限られた作業机

資料は先に並んでいる

仕事を始める前から、ルール集や作業メモ、道具の一覧が机に置かれている

開くたびに机が埋まる

資料を1冊開くと、その分だけ面積を占有し続ける

片付ければまた広がる

机が埋まったら要点だけメモに書き写して本を片付ける(圧縮)。人に調べ物を頼めば(サブエージェント)、別室の机で作業して報告書1枚だけが返る

コンテキストウィンドウはこの机。指示・読んだファイル・応答に加え、端末には表示されない情報も同じ机に載っている

Claude Code のコンテキストウィンドウはこの机です。あなたの指示・Claude が読んだファイル・Claude 自身の応答、そしてあなたの端末には表示されないが確実にコンテキストへ入っている情報が、すべて同じ1つの机の上に載っています。

ここがポイント

端末に見えない情報も同じ机に載っている

起動時に自動で読み込まれるもの

新しいセッションを始めて何も入力していない時点で、すでに次のものがコンテキストに入っています。公式のシミュレーション例による内訳は次の通りです。

約7,850

起動時に自動ロードされるトークン数の例(何も入力する前・公式シミュレーション)

4,200

システムプロンプト

1,800

プロジェクトの CLAUDE.md

680

自動メモリ(MEMORY.md)

システムプロンプト

振る舞い・ツール利用・応答フォーマットの中核指示。常に最初に読み込まれ、あなたの目には触れない

自動メモリ(MEMORY.md)

前回までのセッションで Claude が自分用に残したメモ(学んだビルドコマンド、気づいたパターン、避けるべき失敗)。先頭200行または25KBのどちらか早い方までがコンテキストに読み込まれる

環境情報とgitの状態

作業ディレクトリ、プラットフォーム、シェル、OSバージョン、gitリポジトリかどうか。gitのブランチ・状態・直近のコミットは、システムプロンプトの一番最後に別ブロックとして読み込まれる

MCPツール名

Claude が何を使えるか把握できるようツール名の一覧が入る。デフォルトでは完全なスキーマは遅延され、必要になった時にツール検索で個別に読み込まれる。ENABLE_TOOL_SEARCH=auto ならスキーマがコンテキストウィンドウの10%以内に収まる場合に先読みし、ENABLE_TOOL_SEARCH=false ならすべて先読みする

スキルの説明文

呼び出せるスキルの一行説明の一覧。スキル本体は実際に使われた時だけ読み込まれる。disable-model-invocation: true を付けたスキルはこの一覧に載らず、/名前 で呼び出すまで完全にコンテキスト外

CLAUDE.md(グローバル+プロジェクト)

~/.claude/CLAUDE.md はあなたのグローバル設定で、すべてのプロジェクトに適用される。プロジェクトの CLAUDE.md は規約・ビルドコマンド・アーキテクチャのメモで、作成できる中で最も重要なファイルとされている

これに加えて、出力スタイル(公開準備中)や --append-system-prompt で渡したテキストも、同じくシステムプロンプトの一部としてここに乗ります。

会話が進むとコンテキストはこう増える

Claude がファイルを1つ読むたびに、その内容がまるごとコンテキストに入ります。端末には「Read auth.ts」のような一行表示しか出ませんが、Claude 側にはファイルの中身がそのまま渡っています。

ファイル読取はコンテキスト消費の中で最も大きな割合を占めます。 プロンプトを具体的にする(「認証まわりを直して」ではなく「auth.ts のバグを直して」)と、Claude が読むファイル数を絞れます。調査量が多いタスクはサブエージェントに任せるのも有効です。

  1. 1

    ファイルを読む

    内容がまるごとコンテキストに入る。端末には一行しか出ない

  2. 2

    ルール・フックが発火

    パス限定ルールや PostToolUse フックが自動で動く

  3. 3

    コンテキストが増える

    読むほど、動くほど積み上がる

ステップ3「コンテキストが増える」の後の分岐

サブエージェントに委任

別窓の独立したコンテキストで調査する。あなたの窓に戻るのは要約だけ

そのままメインで続行

ファイル読取・ルール発火・フックの結果がそのままあなたのコンテキストに積まれる

ファイル読取とパス限定ルール

.claude/rules/ に置いたルールファイルに paths: というfrontmatterを設定しておくと、そのパターンに一致するファイルを Claude が読んだ瞬間に、そのルールが自動でコンテキストに追加されます。端末には「Loaded .claude/rules/xxx.md」という一行通知が出るだけで、ルールの中身自体は表示されません。

.claude/rules/api-conventions.md(frontmatter)
---
paths: "src/api/**"
---

フックの発火とコンテキストへの反映

settings.json に設定した PostToolUse フックは、たとえばファイル編集のたびに自動実行されます(例: 編集後に prettier を走らせる)。フックの結果がコンテキストに入るかどうかは、返し方で変わります。

標準出力(exit code 0)は届かない

プレーンな標準出力はコンテキストに入らず、デバッグログにのみ記録される。Claude に情報を渡すには hookSpecificOutput.additionalContext フィールドで返す必要がある

exit code 2 は実行済みでブロック不可

PostToolUse フックが exit code 2 を返すと標準エラーがエラーとして Claude に見えるが、対象のツールはすでに実行済みのためブロックはできない

フックの出力形式(hookSpecificOutput.additionalContext)
{
  "hookSpecificOutput": {
    "additionalContext": "ここに書いた文字列だけがContextへ入る"
  }
}

サブエージェントは別のコンテキスト窓を持つ

Claude がサブエージェントに調査を委任すると、サブエージェントはあなたの会話履歴やメイン側の自動メモリを引き継がない、独立したコンテキスト窓で動きます。

専用メモリを読める

カスタムエージェントの frontmatter に memory: が指定されていれば、その専用の MEMORY.md を代わりに読み込む

CLAUDE.mdも別コピー

プロジェクトの CLAUDE.md も自分のコピーとして読み込む(コンテキストを消費するのはサブエージェント側)。ただし組み込みの Explore / Plan エージェントは、コンテキストを小さく保つためこれを省略する

一部ツールは渡されない

同じ MCP サーバーとスキルにアクセスできるが、プランモードの操作・バックグラウンドタスク用のツール、そしてデフォルトでは再帰を防ぐために Agent ツール自体など、入れ子のコンテキストでは意味を持たない一部のツールは渡されない

指示を受け取り要約だけ返す

ユーザーのプロンプトの代わりに、Claude が書いたタスク指示を受け取る。読んだファイルはすべて自身のコンテキストを消費し、メインには一切触れない。メインに戻るのは最終的なテキスト応答と、トークン数・所要時間を記したごく小さなメタデータだけ

バングコマンドと呼び出し制限スキル

バングコマンド(!)

!git status のように先頭に ! を付けるとあなたのシェルで実行され、コマンドと出力の両方が次のメッセージの一部としてコンテキストに入る。Claude 自身に実行させずに、その結果だけを踏まえさせたい時に使える

呼び出し制限スキル

disable-model-invocation: true を付けたスキルは起動時の一覧にも載らずコンテキストコストはゼロのまま。/名前 で明示的に呼び出した時に初めて本文が読み込まれる。コミット・デプロイ・メッセージ送信のような副作用のあるスキルに向く

ここがポイント

読むほど・動くほど増える。委任すれば戻るのは要約だけ

コンテキストが埋まったらどうなるか

Claude Code は上限に近づくと自動的に圧縮するため、コンテキストが満杯になってもセッションが終わるわけではありません。自動での圧縮は、/compact を手動で実行した時と同じ処理です。

圧縮で何が残るか

圧縮は会話履歴を構造化された要約に置き換えます。v2.1.198 以降、この要約リクエストはセッションの拡張思考の設定を引き継ぎます。

拡張思考が有効なセッションでは要約作成時も思考が有効になり、無効なセッションではオフのままです。セッション自体の設定は、圧縮後も変わりません。何が残るかは、その指示がどう読み込まれたかによって変わります。

仕組み圧縮後どうなるか
システムプロンプト・出力スタイル変化なし(メッセージ履歴の一部ではないため)
プロジェクトルートの CLAUDE.md とパス指定なしのルールディスクから再読み込みされる
自動メモリディスクから再読み込みされる
paths: frontmatter を持つルール該当パスのファイルを再度読むまで失われる
サブディレクトリ内のネストした CLAUDE.mdそのサブディレクトリ内のファイルを再度読むまで失われる
呼び出し済みスキルの本文再注入される。ただし1スキルあたり5,000トークン・合計25,000トークンで打ち切られ、古いものから削除される
フック対象外(コードとして実行されるためコンテキストには乗らない)

パス限定ルールとネストした CLAUDE.md は、対象ファイルが読まれた時点で会話履歴に載る仕組みなので、圧縮では他の履歴と一緒に要約されて消えます。ルールを圧縮後も残したいなら、paths: frontmatter を外すか、プロジェクトルートの CLAUDE.md に移してください。

スキル本体は先頭優先

呼び出し済みスキルの本文は圧縮後も再注入されるが、1スキルあたり5,000トークン・合計25,000トークンで打ち切られ、古いものから削除される。切り詰めはファイルの先頭から残す方式なので、重要な指示ほど SKILL.md の冒頭に書いておくべき

スキル一覧は戻ってこない

起動時のスキル一覧(説明文のリスト)は、圧縮後には再注入されない。実際に呼び出したスキルだけが残る

パス限定ルールは要注意

paths frontmatter を持つルールとネストした CLAUDE.md は、対象ファイルを再度読むまでコンテキストから失われる

圧縮前に自分でできること

自動圧縮を待たなくても、次の方法で先回りできます。

意図を絞って圧縮する

長い新しいタスクを始める前に /compact focus on the auth bug fix のように指示付きで実行すると、自動判定に任せるより自分が選んだ内容を要約に残せる

早めに圧縮する

/autocompact 500k のようにトークン数を指定して実行すると、自動圧縮が走るタイミング(コンテキストがどれだけ埋まった時点で走るか)を調整できる

無関係な作業は /clear

古い会話は次に必要なファイルの邪魔になり、メッセージのたびにトークンを消費する

大きな読み込みは委任する

ファイルの中身をサブエージェント側のコンテキストに留め、あなたのコンテキストには入れない

より大きなコンテキストウィンドウを使う

会話を圧縮するのではなく、そもそも大きなウィンドウが必要な場合、Fable 5・Sonnet 5・Opus 4.6 以降・Sonnet 4.6 は100万トークンのコンテキストウィンドウに対応しています。Sonnet 5 は [1m] バリアントを選ばなくても最初から100万トークンで動作します。自動圧縮が走るしきい値はモデルと設定によって変わります。

ここがポイント

圧縮は待たなくても先回りできる。窓を大きくする手もある

つまずきポイント

よくある誤解

起動時のトークン数はいつも同じ数値だと思われがち

実際は

システムプロンプト約4,200など、本節に挙げた各項目のトークン数は公式のシミュレーションが示す目安の一例。実際の値は CLAUDE.md のサイズ・MCPサーバー構成・ファイルの長さで変わる

よくある誤解

パス限定ルールは一度コンテキストに読み込まれれば、その後もずっと有効だと思われがち

実際は

paths frontmatter を持つルールは、対象パターンに一致するファイルを Claude が再び読むまでコンテキストから失われる。圧縮を挟むと一時的に「ルールが効いていない」ように見えることがあるのはこのため

よくある誤解

起動時のスキル一覧は圧縮後も残ると思われがち

実際は

起動時のスキル説明一覧は圧縮の再注入対象から外れている。呼び出した実績のあるスキルの本文だけが戻ってくる

よくある誤解

PostToolUseフックの標準出力はそのまま Claude に伝わると思われがち

実際は

通常の標準出力(exit code 0)はデバッグログ行き。Claude に情報を渡したい場合は hookSpecificOutput.additionalContext を使う必要がある

  • 参考(公式ではない): 大きめのタスクに着手する前に /context で現状を確認し、無関係な調査は最初からサブエージェントに投げる癖をつけると、メインのコンテキストを長く保てます

関連リンク

  • 原文: Explore the context window
  • CLAUDE.md・スキル・ルール・フック・MCPの使い分け: Claude Codeを拡張する
  • コンテキストウィンドウの基本的な位置づけ: Claude Codeの仕組み
  • 同じキャッシュされた前置き部分を再利用する仕組み: プロンプトキャッシュ
  • CLAUDE.mdと自動メモリの詳細: メモリ管理(公開準備中)
  • サブエージェントの作り方: サブエージェント(公開準備中)
  • フックの設定方法: フック(公開準備中)

出典

On this page