Claude Codeでどこまでできる?

Claude Codeの使い方や連携を、実際に試してわかりやすく伝えるサイト

チェックポイント機能とは?Claude Codeの変更を安全に巻き戻す仕組み

,
CC-057

Claude Codeにファイルの変更を頼んで、後から「やっぱり元に戻したい」と思ったことはないだろうか。チェックポイント機能は、そんな時に自動で残っているセーブポイントのようなものだ。この記事では、チェックポイントがいつ作られるのか、どう巻き戻すのか、どこからGitなどの対策が必要になるのかを順番に見ていく。

チェックポイント機能とは — 一言でいうと

チェックポイントとは、Claude Codeがユーザーのプロンプト(メッセージ)ごとに自動で作成する、ファイル変更のセーブポイントだ。

ゲームで言えば、ステージの始まりに自動セーブが入る仕組みに近い。Claude Codeに何かを頼むたびに、その直前のファイル状態がそっくりそのまま記録される。後で「やっぱりあの時の状態に戻したい」と思ったら、そのチェックポイントを指定して巻き戻せる。

各チェックポイントには checkpoint UUID という一意の識別子が付いている。どのプロンプトで作られた記録かが一目で分かる仕組みだ。追跡の対象になるのは、Claude Codeが WriteEditNotebookEdit の3つのツールを使って行った変更のみ。つまり、Claude Code経由でファイルを書き換えた分は自動で記録される。

チェックポイントが自動で作られる仕組み

仕組み自体はシンプルだ。ユーザーがClaude Codeにメッセージを送るたびに、自動で1つのチェックポイントが作られる。

具体的には、メッセージを送った時点でのファイルの状態がバックアップされ、そこにcheckpoint UUIDが割り当てられる。Claude Codeがそのメッセージに応じてファイルを変更したあとでも、変更前の状態はチェックポイントとして残っている。つまり、何かを頼む前の状態が常に保存されている。

追跡の対象になるのは次の3つのツールによる変更だ。

ツール 追跡 具体例
`Write` される 新規ファイルの作成
`Edit` される 既存ファイルの一部書き換え
`NotebookEdit` される Jupyterノートブックの編集
`Bash`(コマンド実行)経由 **されない** `del`、`echo … > file` 等

この表の最後の行にだけ注意が必要だ。Bashツール経由でファイルを変更した場合、その変更はチェックポイントの追跡対象外になる。詳しい対策は後で触れるとして、まずは「Claude Codeが直接ファイルを操作した分は自動で記録される」と押さえておけばいい。

巻き戻し(rewind)の操作方法

巻き戻しには、CLI上で2つの方法が用意されている。

Esc キーを2回押す または /rewind コマンド

どちらの操作でも、巻き戻し用のメニュー(rewind menu)が開く。メニューにはこれまでのプロンプトごとの履歴が表示されるので、戻りたい地点を選択する。選んだ後は、次のアクションから目的に合うものを選ぶ。

  • Restore code and conversation — ファイルと会話の両方をその時点に戻す
  • Restore code — ファイルだけを戻す(会話はそのまま)
  • Restore conversation — 会話だけを戻す(ファイルはそのまま)
  • Summarize from here — 選んだ地点以降の会話を要約に圧縮する(コンテキストを空ける用途)

直前の変更を取り消すなら「Restore code」を選ぶのが一番手軽だ。「やっぱり今の変更は取り消したい」と思ったら、まずは Esc を2回押して rewind menu を開いてみる。

数回前の変更まで遡りたい場合や、特定のタイミングの状態に戻したい場合も、同じ rewind menu から該当するプロンプトを選択できる。

Windows環境では、ターミナル上でClaude Codeを動かしている状態でそのまま操作できる。特別な設定は不要だ。

戻せない変更とその対策

セクション2の表で触れた通り、コマンド実行(Bash)経由の変更はチェックポイントの追跡対象外だ。では、コマンド実行経由で変更してしまった時はどうすればいいのか。対策を3つ挙げる。

Gitを併用する

一番手堅い対策は、プロジェクトをGitで管理しておくことだ。git stash で変更を退避させたり、git checkout で特定のファイルを元に戻したりできる。Bash経由の変更であっても、Git管理下にあれば巻き戻しが可能になる。「Claude CodeのチェックポイントとGitの両方で保険をかける」という構成だ。

Bash経由の変更を避けて、Write/Editで依頼し直す

Claude Codeに変更を頼む時に、Bash経由ではなく、WriteやEditで依頼し直すことで、その変更はチェックポイントの追跡対象になる。最初から追跡対象のツールで依頼しておけば、後でEsc2回で戻せる。

失敗しやすいポイント

気をつけたいのは、delRemove-Item などのコマンド実行経由でファイルを削除した場合だ。チェックポイントでは復元できないし、Git管理下でなければ元に戻す手段がない。Bash経由での削除操作は、実行前に一度立ち止まって確認する習慣をつけておくと安心だ。

また、手動でエディタからファイルを編集した場合も、その変更はチェックポイントの追跡対象外になる。Claude Code経由の変更と自分の手動編集が混在すると、「どの変更が戻せてどれが戻せないか」が分かりにくくなるので、できれば変更を依頼する単位を区切っておく方が管理しやすい。

混同しやすい機能との違い

Claude Codeには巻き戻し以外にも「操作を取り消す」系の機能がいくつかあり、初心者のうちは混同しやすい。3つの機能を比べてみる。

機能 対象 何をするか
`/rewind`(Esc2回) ファイルの状態 チェックポイント時点のファイル内容に復元する
`/undo` バージョンにより扱いが異なる この記事では混乱を避けるため、巻き戻し操作は `/rewind` と Esc 2回に統一する
`Git` checkout/revert コミット単位 明示的にコミットした時点に戻す

/undo は環境やバージョンによって扱いが異なる可能性があるため、初心者はまず /rewind または Esc 2回を使うのが安全だ。「会話の流れを取り消す」か「ファイルの状態を復元する」かの違いがある。

Gitとの違いは、記録のタイミングにある。Gitは明示的なコミット単位で記録するのに対して、チェックポイントはプロンプト単位で自動記録する。コミットを忘れても、プロンプトを送っていればチェックポイントは残っている。

実務的には、次のような棲み分けが分かりやすい。

  • Claude Code経由の変更 → チェックポイント(/rewind、Esc2回)で対応
  • 手動編集やBash経由の変更 → Gitで対応

両方を併用しておけば、大抵の「元に戻したい」に対応できる。

SDKからチェックポイントを使う

Agent SDKを使ってClaude Codeをプログラムから操作している場合、チェックポイント機能を有効にして利用できる。

有効化は簡単だ。ClaudeAgentOptionsenable_file_checkpointingTrue に設定するだけ。

from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions

options = ClaudeAgentOptions(
    enable_file_checkpointing=True,
)

有効にしておくと、各プロンプトの処理後にcheckpoint UUIDが記録される。このUUIDを取得しておけば、後からセッションを再開して rewind_files() を呼び出し、ファイルを巻き戻せる。詳しい手順は公式ドキュメントのAgent SDK「Rewind file changes with checkpointing」ページを参照されたい。

SDK経由でチェックポイントを使う場合、気をつけたい点が2つある。1つは、CLIと同じく追跡対象がWrite・Edit・NotebookEditのみであること。もう1つは、チェックポイントの履歴はセッションと共に30日後に自動クリーンアップされることだ(期間は設定で変更可能)。長時間のセッションで大量にチェックポイントが作られる場合は、こまめに確認しておく方が安心だ。

SDKを使わないCLI利用が中心であれば、このセクションは読み飛ばしても問題ない。

まとめ — 変更を頼むのが怖くなくなる

チェックポイント機能の本質は、「変更前の状態が自動で残るので、『やっぱり元に戻したい』が怖くなくなる」という点にある。

押さえておくべき境界線は1本だけだ。Claude Code経由の変更(Write・Edit・NotebookEdit)はチェックポイントで戻しやすい。一方、コマンド実行経由の変更は別対策(Git等)が必要になる。この線だけ押さえておけば、どこまでチェックポイントに任せられるか判断しやすい。

巻き戻しの操作も難しくない。直前の変更を取り消すなら Esc を2回。過去の特定地点に戻るなら /rewind コマンド。この2つを覚えておけば、実務上は十分に対応できる。

もしBash経由の変更も含めて安心したいなら、プロジェクトをGit管理下に置いておくのがおすすめだ。チェックポイントとGitの二重の保険がかかるので、大抵の「戻したい」に対応できる。