Claude Codeのセッション管理術|/rewindと/forkで開発の手戻りをゼロにする方法
Claude Codeの/rewind・/fork・/clear・/compactを体系的に解説。コンテキストウィンドウの仕組みからチェックポイント、実践シナリオ、使い分けフローチャートまで、セッション管理を開発戦略として活用する方法を紹介します。
Claude Code を使い込むほど直面するのが「コンテキストの汚染」と「手戻り」の問題です。質問を重ねるうちに応答精度が落ちたり、実装方針を誤ったまま進めてしまったり――こうした課題を根本から解決するのが セッション管理 です。
本記事では /rewind・/fork・/clear・/compact の4つのコマンドを体系的に解説し、セッション管理を「後始末」ではなく 「開発戦略」 として活用する方法を紹介します。
なぜセッション管理が重要なのか
コンテキストウィンドウに格納されるもの
Claude Code のセッションでは、以下の情報がコンテキストウィンドウに蓄積されます。
- 会話履歴: ユーザーの指示と Claude の応答すべて
- ファイル内容: 読み込んだソースコード、設定ファイル
- コマンド出力: ビルドログ、テスト結果、git diff など
- CLAUDE.md: プロジェクトルールや指示
- ツール呼び出し結果: Grep / Glob / Bash などの出力
コンテキストが埋まると精度が下がる
公式ドキュメントでも明言されている通り、コンテキストウィンドウが埋まるにつれて Claude の応答精度は低下します。特に以下の症状が現れます。
- 初期に与えた重要な指示を忘れる
- 同じファイルを繰り返し読み込む
- 矛盾する提案をする
- 関連性の低い情報に引きずられる
自動コンパクションの限界
Claude Code にはコンテキストが上限に近づくと自動的に要約する仕組み(自動コンパクション)がありますが、万能ではありません。
- 初期の指示が圧縮されるリスク: 最初に与えた重要なルールが要約の過程で薄まる可能性がある
- 不要な情報が残る: 失敗した試行錯誤のログが要約に含まれ、以降の判断に悪影響を与える
- タイミングを制御できない: 自動発動のため、意図しないタイミングで情報が失われることがある
こうした問題を手動でコントロールするのが、セッション管理コマンドの役割です。セッション管理は「後始末」ではなく「開発戦略」 として捉えることが重要です。
チェックポイントの仕組み
/rewind を理解するために、まずチェックポイントの仕組みを押さえましょう。
自動スナップショット
Claude Code は ファイルを編集するたびに、変更前の状態を自動的にスナップショットとして保存 します。これは git のコミットとは独立した、セッションローカルな仕組みです。
- セッション内でのみ有効(セッション終了後は消える)
- git の作業ツリーに影響しない
- 明示的な操作なしに自動で作成される
取り消せない操作に注意
チェックポイントはファイルの変更を元に戻せますが、以下の操作は取り消せません。
| 操作 | 例 | 取り消し可否 |
|---|---|---|
| ファイル編集 | コードの変更、新規ファイル作成 | 取り消し可能 |
| git push | リモートへのプッシュ | 取り消し不可 |
| npm publish | パッケージの公開 | 取り消し不可 |
| API 呼び出し | 外部サービスへのリクエスト | 取り消し不可 |
| DB 操作 | データの挿入・更新・削除 | 取り消し不可 |
重要なのは、/rewind はあくまで ローカルのファイル変更と会話履歴 を巻き戻す機能だということです。外部に影響を与える操作は元に戻せないため、git push や npm publish の前には十分確認しましょう。
/rewind -- 安全に過去の状態に戻す
起動方法
/rewind を実行するには2つの方法があります。
Escキーを2回押す: 素早く呼び出せるショートカット/rewindと入力: コマンドとして明示的に実行
実行すると、セッション内のチェックポイント一覧が表示され、戻りたい地点を選択できます。
3つの復元モード
/rewind の最大の特徴は、コードと会話を独立して巻き戻せる 点です。チェックポイントを選択した後、以下の3つのモードから選べます。
1. コードと会話の両方を巻き戻す
最もシンプルなモードです。選択した時点の状態に完全に戻ります。
使用場面: 実装方針を根本的にやり直したいとき
効果: ファイルの変更も会話の流れもすべてリセット
2. コードだけ巻き戻す(会話の知見は保持)
ファイルの変更は元に戻しつつ、会話で得た知識や議論は残します。
使用場面: 実装は失敗したが、議論で得た知見は活かしたいとき
効果: コードはリセット、会話履歴はそのまま
3. 会話だけ巻き戻す(コードの成果は保持)
実装結果はそのまま残し、会話履歴だけを削減します。
使用場面: 実装は完了したが、試行錯誤のログでコンテキストが膨らんだとき
効果: コードはそのまま、会話をトリムしてコンテキストを軽量化
実践シナリオ
シナリオ1: リファクタリング実験が失敗
状態クラスパターンへのリファクタリングを Claude に依頼したが、既存テストが大量に壊れてしまった。
対処: コードだけ巻き戻す → リファクタリングの過程で判明した依存関係の知見は残し、別の戦略(ストラテジーパターンなど)で再挑戦する。
シナリオ2: デバッグの袋小路
認証エラーの原因を探るために様々なログ出力やコード変更を試したが、本当の原因はCORS設定だった。
対処: デバッグ開始前のチェックポイントまで巻き戻す → 試行錯誤で挿入したデバッグコードをすべて除去し、クリーンな状態からCORS設定の修正に集中する。
シナリオ3: 実装完了後のコンテキスト整理
API エンドポイントの実装が完了したが、途中の試行錯誤でコンテキストが圧迫されている。次はテスト作成に進みたい。
対処: 会話だけ巻き戻す → 実装済みのコードは保持したまま、不要な会話ログを削減。コンテキストに余裕を持ってテスト作成に取り組める。
/fork -- セッションを分岐させる
起動方法
/fork を使うには以下の方法があります。
- セッション内で
/forkと入力: 現在のセッションを分岐 - ターミナルから
claude --continue --fork-sessionを実行: 最新セッションをフォークして新しいターミナルで開始
仕組み
/fork を実行すると、以下が起こります。
- 新しいセッション ID が生成される
- 現在の会話履歴がコピーされる
- 元のセッションには一切影響しない
つまり、fork した時点での知識とコンテキストを持った「分身」が作られるイメージです。fork 後の操作は完全に独立しており、元セッションに戻っても変更は反映されません。
resume との違い
混同しやすいのが claude --continue(resume)です。
| 項目 | /fork | --continue(resume) |
|---|---|---|
| セッション ID | 新規生成 | 同じセッションを継続 |
| 会話履歴 | コピー(独立) | 共有(同一) |
| 複数ターミナル | 安全に並行作業可能 | 同じセッションを複数で開くと混在リスク |
| 用途 | 並行検証、実験 | 中断した作業の再開 |
重要: 同じセッションを複数のターミナルで --continue すると、会話が混在して予期しない動作になる場合があります。並行作業には必ず /fork を使いましょう。
実践シナリオ
シナリオ1: A/Bアプローチ比較
API設計で REST と GraphQL のどちらを採用すべきか迷っている。
対処: 現在のセッション(要件定義済み)を /fork で分岐。ターミナルAでは REST で、ターミナルBでは GraphQL でそれぞれ実装を進め、結果を比較して判断する。
シナリオ2: 本線を止めずに技術調査
機能実装の途中で「この設計パターンで本当に良いのか」という疑問が浮かんだ。
対処: /fork で分岐セッションを作り、そちらで設計の妥当性を検証。本線の実装はそのまま進められるため、調査結果が出てから判断できる。
シナリオ3: 破壊的変更の安全な試行
データベーススキーマの大幅な変更を検討しているが、影響範囲が読めない。
対処: /fork してからスキーマ変更を試行。問題があれば fork セッションを捨てるだけで、元セッションのクリーンな状態に戻れる。成功すれば git コミット経由で成果を取り込む。
4つのコマンドの使い分けガイド
Claude Code には、セッション管理に関わるコマンドが4つあります。それぞれの特性を理解して適切に使い分けましょう。
比較表
| 項目 | /rewind | /fork | /clear | /compact |
|---|---|---|---|---|
| 目的 | 過去の状態に戻す | セッションを分岐する | セッションを完全リセット | 会話を要約して圧縮 |
| コードへの影響 | 選択可(戻す/残す) | なし(分岐するだけ) | なし | なし |
| 会話履歴 | 選択可(戻す/残す) | コピーして独立 | 全削除 | 要約に圧縮 |
| コンテキスト消費 | 削減可能 | 増加なし(新セッション) | ゼロにリセット | 大幅に削減 |
| CLAUDE.md | 影響なし | コピーされる | 再読み込み | 保持される |
判断フローチャート
どのコマンドを使うか迷ったら、以下の流れで判断してください。
Q1. 現在のタスクを続けるか?
→ No: /clear で完全リセットして新しいタスクを開始
→ Yes: Q2 へ
Q2. 直前の作業を取り消したいか?
→ Yes: /rewind で特定のチェックポイントまで巻き戻す
→ No: Q3 へ
Q3. 別の方針を並行で試したいか?
→ Yes: /fork でセッションを分岐して並行検証
→ No: Q4 へ
Q4. コンテキストが逼迫しているか?(/context で確認)
→ Yes: /compact で会話を要約して圧縮
→ No: そのまま作業を続行
ベストプラクティス
セッション管理コマンドを最大限に活用するためのベストプラクティスを紹介します。
Plan モードと組み合わせる
大きなタスクでは Plan モード → 実装 → 問題があれば /rewind のサイクルを意識しましょう。
Shift + Tabで Plan モードに入り、実装計画を立てる- 計画を確認してから実装に進む
- 問題が発生したら
/rewindで計画段階まで戻り、方針を修正
Plan モードで立てた計画がコンテキストに残るため、/rewind で戻った際にも「なぜこの方針にしたか」の文脈を維持できます。
CLAUDE.md に永続ルールを書く
/compact や /clear で会話がリセットされても、CLAUDE.md に書かれたルールは必ず再読み込みされます。セッションをまたいで維持したい情報は CLAUDE.md に記録しておきましょう。
# プロジェクトルール
- TypeScript strict モード必須
- テストは Vitest を使用
- コミットメッセージは Conventional Commits に準拠
- エラーハンドリングは Result 型パターンを使用
/context でコンテキスト使用量を定期確認
/context コマンドでコンテキストウィンドウの使用状況を確認できます。使用率が高くなってきたら、/compact で圧縮するか /clear でリセットするタイミングです。
大きなタスクはサブエージェントに委譲する
Claude Code の Agent ツール(サブエージェント)は 独自のコンテキストウィンドウで動作する ため、メインセッションのコンテキストを圧迫しません。
- ファイル検索や調査タスク → サブエージェントに委譲
- メインセッション → 設計判断や統合作業に集中
これにより、メインセッションのコンテキストを効率的に使えます。
/rename でセッションに名前をつける
/rename コマンドでセッションに分かりやすい名前をつけておくと、後から claude --resume で再開する際に目的のセッションを素早く見つけられます。
/rename 認証機能リファクタリング
特に /fork で複数のセッションを並行させる場合、名前をつけておくと管理が格段に楽になります。
よくある質問(FAQ)
/rewind で戻した後、やり直すことはできますか?
はい、できます。 /rewind を再度実行すれば、さらに別のチェックポイントに移動できます。ただし、rewind で削除された会話やコード変更を「元に戻す(redo)」機能はないため、重要な変更がある場合は事前に git コミットしておくことをおすすめします。
/fork セッションの成果を元セッションに統合できますか?
git コミット経由で可能です。 fork セッションで実装した変更を git にコミットすれば、元セッション(やどのセッションからでも)その変更を取り込めます。セッション間で会話履歴を直接マージする機能はありません。
外部操作(git push 等)は取り消せますか?
いいえ、取り消せません。 /rewind はローカルのファイル変更と会話履歴のみを対象としています。git push、npm publish、API 呼び出し、データベース操作など、外部に影響を与える操作は元に戻せません。重要な外部操作の前には必ず確認しましょう。
/compact と /clear の違いは何ですか?
/compact: 会話履歴を AI が要約して圧縮します。文脈の概要は保持されるため、同じタスクを継続 できます。/clear: 会話履歴を完全に削除します。CLAUDE.md は再読み込みされますが、それ以外の文脈はすべて失われます。新しいタスクを始める ときに使います。
コンテキストウィンドウの上限はどのくらいですか?
Claude Code が使用するモデルのコンテキストウィンドウは 200K トークン です。ただし、実際にはシステムプロンプトや CLAUDE.md、ツール定義などが一定量を消費するため、ユーザーが使える実効的な容量はそれより少なくなります。/context コマンドで現在の使用状況を確認できます。
まとめ
Claude Code のセッション管理は、単なる「後始末」ではなく、開発効率を最大化するための 戦略的なツール です。
/rewindで安全に過去の状態に戻し、試行錯誤のコストを最小化/forkでセッションを分岐し、リスクなく並行検証/compactでコンテキストを圧縮し、応答精度を維持/clearで完全リセットし、新しいタスクにフレッシュな状態で取り組む
これらのコマンドを適切に使い分けることで、コンテキストの汚染による精度低下や手戻りを防ぎ、Claude Code のポテンシャルを最大限に引き出せるようになります。