チェックポイントと巻き戻し
- チェックポイントが何を記録し、何を黙って記録しないのかを理解する
- 巻き戻しメニューを2通りの方法で開き、毎回適切な復元アクションを選ぶ
- 「restore」(状態を元に戻す)と「summarize」(コンテキストを圧縮する)を区別する
- チェックポイントが Git を補完こそすれ、決して置き換えない理由を正確に知る
基本の考え方
大規模で野心的な変更を Claude に任せるとき、いちばん怖いのは「3回編集したところで失敗したらどうしよう?」という点です。チェックポイントはその答えです。Claude Code は、あなたが開始するターンの前に毎回コードを自動でスナップショットするので、中途半端なリファクタリングを手作業でほどく代わりに、以前の状態へ巻き戻せます。
セッション全体のローカルな元に戻す機能と考えてください。「よし、大胆な方法を試そう」と、怖がらずに言えるセーフティネットです。
チェックポイントの作られ方
チェックポイントは自分で作るものではなく、自動で作られます。
- ターンを開始する各プロンプトは、Claude のファイル編集ツールが動く前のコードの状態を記録します。コマンドも設定も儀式も不要です。
- Claude Code は、セッション内の直近100個のチェックポイント分のファイルスナップショットを保持します。それより古いものは破棄されるため、非常に長いセッションを最初まで巻き戻すことはできません。
- チェックポイントは会話と一緒に保存されるので、セッションを再開した後でも、実行中のセッションだけでなく /rewind を使えます。
- セッションのファイルスナップショットは、保持期間のクリーンアップで削除されます。デフォルトでは、そのセッションが最後にスナップショットを保存してから約30日後です。スナップショットが消えたチェックポイントに巻き戻そうとすると 'No files were restored' で失敗します。長く保持したい場合は cleanupPeriodDays を引き上げてください。
巻き戻しメニューを開く
入り方は2通りあります。
- プロンプトでスラッシュコマンドを入力します。常に使えます。/checkpoint と /undo は同じコマンドのエイリアスなので、思い浮かんだ名前で構いません。
- プロンプト欄が空のとき、Esc の2回押しで巻き戻しメニューが開きます。テキストが入っている場合、2回押しはそのテキストを消去します(消去したテキストは入力履歴に保存されるので、↑ キーで呼び戻せます)。
巻き戻しメニューを開く
/rewind
- エイリアス名は、字面ほど文字どおりではありません。/checkpoint はその場でスナップショットを取るわけではなく(スナップショットは自動です)、/undo も直前の編集を単独で取り消すわけではありません。3つの名前はどれも同じメニューを開き、そこで時点とアクションを選びます。
メニューには、このセッションで送信したすべてのプロンプトが並びます。操作したい時点を選び、アクションを1つ選びます。
restore と summarize:重要な区別
ここで混乱しやすくなります。メニューには2種類のアクションがあります。
- Restore アクションは、ディスク上や会話の状態を変えます — 元に戻す操作です。
- Summarize アクションは、ファイルには一切触れません — 会話を圧縮してコンテキストウィンドウの空きを増やします。
- Restore = 元に戻す(コード、会話、または両方を巻き戻す)。Summarize = コンテキストを圧縮する(ディスク上のファイルは変わらない)。
- 編集で何かが壊れたら restore を使う。セッションが肥大化したがコードは問題ないなら summarize を使う。
restore アクション
- ファイルとチャット履歴の両方を選択した時点まで戻します。その瞬間への、きれいな「時間の巻き戻し」です。
- チャットをそのメッセージまで巻き戻しつつ、現在のコードは保持します。残したい編集を失わずに質問をやり直したいときに便利です。
- ファイルの変更を元に戻しつつ、会話は保持します。編集は取り消し、それについての議論は残します。
2つのコードの restore オプションは、選択したチェックポイントに、元に戻せる追跡済みのファイル変更が実際にある場合にだけ表示されます。その時点以降にファイル編集が記録されていなければ、メニューには Restore conversation、2つの summarize オプション、Never mind(何も変更せずメッセージ一覧に戻る)だけが表示されます。
会話を復元した後(または "Summarize from here" を選んだ後)、選択したメッセージの元のプロンプトが入力欄に戻されるので、再送信や編集ができます。
summarize アクション
どちらも会話の一部を AI が生成した要約に圧縮します — 選択したメッセージのどちら側を圧縮するかを選べる、対象を絞った /compact のようなものです。
- 選択したメッセージより前のメッセージはそのまま残ります。選択したメッセージとそれ以降が要約になります。脇道の議論を捨てつつ、初期のコンテキストを詳細のまま残したいときに使います。
- 選択したメッセージより前のメッセージが要約になり、選択したメッセージとそれ以降はそのまま残ります。会話の末尾にとどまります。序盤のセットアップのやり取りを圧縮しつつ、最近の作業を一字一句そのまま残したいときに使います。
どちらの場合も、元のメッセージはセッションの記録に残るため、Claude は詳細を参照でき、圧縮されたメッセージのあった場所には Summarized conversation のマーカーが表示されます。要約の焦点を指示するには、矢印キーで Summarize オプションを選択し、add context (optional) と表示された行に指示を入力して Enter を押します。数字キーでオプションを選ぶと、指示なしですぐに要約されます。
全体の流れは Context Management を参照してください。/rewind の summarize アクションが外科用メスなら、/compact は太い刷毛です。
- Summarize は同じセッションにとどまります。元のセッションをそのまま残して別のアプローチを試したい場合は、代わりに /branch または claude --continue --fork-session を使ってください。
/clear を越えて巻き戻す
同じ Claude Code プロセス内で以前に /clear を実行した場合、巻き戻しメニューの先頭に /resume <session-id> (previous session) という項目が追加で表示されます。これを選ぶと、/clear の前にアクティブだった会話に戻れます。
チェックポイントの限界 — 痛い目に遭うポイント
チェックポイントは魔法のように思えますが、そうでなくなる瞬間があります。次の穴は重要です。
- 追跡はファイル単位で、ファイルが追跡対象になるのは Claude がファイル編集ツールでそのファイルを編集したときだけです。いったんそうなると、その後に Bash コマンドが同じファイルへ加えた変更も /rewind で元に戻せます。編集済みのファイルをフォーマッタやジェネレータが書き換えた場合も巻き戻し可能です。Bash しか触れていないファイルは追跡されず、そのまま残るため、Claude が一度も編集していないファイルを rm で削除した場合は Git が必要です。メニューにもこれが反映され、各プロンプトの下には、原因を問わず、Claude がすでに編集していたファイルへの変更が数えられます。
- サブエージェントも同じファイルツールで編集しますが、あなたのセッションはたいていその編集を記録しません。例外は、フォアグラウンドで動く fork したスキル(context: fork で background: false)で、これはあなた自身のターン中に編集するため通常どおり巻き戻せます。それ以外のサブエージェント(デフォルトであるバックグラウンドの fork したスキルや、バックグラウンドの /code-review --fix の実行を含む)では、巻き戻しで復元されるのは、あなたの会話内で Claude がすでに編集していたファイルだけです。サブエージェントによるそれ以外のファイルへの編集は残るので、それらは Git で元に戻してください。/docs/claude-code/subagents を参照してください。
- Claude Code の外で行った手動の編集や、並行する他のセッションによる編集は、通常は記録されません — 現在のセッションが編集したのと同じファイルに触れた場合を除きます。
- Claude の作業中にキューに入れ、実行中のターン内で届いたメッセージは、新しいターンを始めるのではなくそのターンに合流するため、自分専用のチェックポイントを持ちません — 巻き戻しメニューでは「No code restore」と表示されます。その後に起きたことを取り消すには、そのターンを開始したプロンプトまで巻き戻します。つまり、あなたのメッセージが届く前に行われた作業を含め、ターン全体が巻き戻されます。この印の付いたメッセージ自体を選んだ場合は、Restore conversation が選べ、ファイルはそのまま残ります。
- Claude Code は、巻き戻した会話を次に送るプロンプトと一緒に保存します。そのため、送信せずに終了すると、再開したときに巻き戻したメッセージが戻ってきます。復元を確定させるには、終了する前に Claude へプロンプトを 1 つ送ってください。戻ってきたメッセージを後で再び取り除くには、/rewind を実行し、同じプロンプトを選んで Restore conversation を選びます。復元したファイルはどちらの場合も巻き戻した状態のままなので、影響を受けるのは会話だけです。
- Restore は、追跡対象のうちシンボリックリンクまたはハードリンクであるパスをスキップし、'Restored the code, but skipped N files' と警告します。それらのファイルは現在の内容のままです。dotfile マネージャーのシンボリックリンクと pnpm のハードリンクのどちらもこれに該当します。復元の前に /debug を実行すると、スキップされるパスがデバッグログに明記されます。
- チェックポイントは素早いローカルの復旧手段です。コミットでもブランチでもなく、チームと共有することもできません。
チェックポイントと Git:両方使う
解決する問題が違うので、組み合わせましょう。
チェックポイント (/rewind) | Git | |
|---|---|---|
| 範囲 | 1つのセッション | プロジェクト全体の履歴 |
| 粒度 | ターンを開始するプロンプトごと、自動 | コミットごと、意図的 |
| bash による変更を追跡する? | Claude がすでに編集したファイルのみ | はい(ステージ/コミット後) |
| 保持期間 | 直近100個のチェックポイント、セッションの約30日後に整理 | 永続 |
| 共有 / 共同作業 | 不可 | 可 |
| イメージ | 「ローカルの元に戻す」 | 「永続的な履歴」 |
- 危険で大規模な実行の前に、動作する状態を Git でコミットしておく — それが永続的な最低ラインになる。
- コミットの合間の素早いセッション内復旧には /rewind を使い、Git の履歴を汚さない。
- Claude が直接編集しないファイル、つまり破壊的な bash(rm/mv)やバックグラウンドのサブエージェントだけが触れるファイルについては Git に頼りましょう。rewind がカバーするのは、Claude が自分のファイルツールで編集した後のファイルだけです。
使いどころ
- 大胆な実装を試し、気に入らなければ分岐点までコードと会話を restore して別の方法を試します。
- 3プロンプト前の編集がバグを持ち込んだ? 残骸をデバッグする代わりに、その直前までコードを restore します。
- バリエーションを試しつつ、動作確認済みの状態がいつでも /rewind 1回で戻れると分かっていられます。
- 冗長なデバッグの寄り道でコンテキストウィンドウが埋まった? 途中から先を summarize し、最初の指示は詳細のまま残します。
理解度チェック
0/3- チェックポイントは、ターンを開始するプロンプトごとに取られる自動スナップショットで、セッションのローカルな元に戻す機能。直近100個を保持し、セッションの約30日後に整理される。
- 巻き戻しメニューは /rewind(エイリアス: /checkpoint、/undo)か、空の入力欄での Esc 2回押しで開く。送信したすべてのプロンプトが並ぶ。
- Restore アクションは状態(コード、会話、または両方)を元に戻し、summarize アクションはコンテキストを圧縮してファイルには触れない。
- 追跡はファイル単位で、Claude がファイルツールで編集した時点から始まり、その後はそのファイルへの Bash による変更も巻き戻せます。Claude が一度も編集していないファイル(bash のみ、外部、同時実行、ほとんどのサブエージェント)は追跡されず、シンボリックリンクやハードリンクのパスは restore 時にスキップされます。
- チェックポイントは Git を補完するもので、置き換えるものではない。「ローカルの元に戻す」と「永続的で共有できる履歴」だと考えよう。
次へ
- Context Management —
/compact、/clear、そして summarize が全体像にどう収まるか - プランモード — 編集が走る前に調査して計画を承認し、巻き戻しの回数を減らす
- 権限(Permissions) — 大がかりなタスクを安全に実行するための、もう半分