Claude Codeのチェックポイント機能(rewind)とは?コードを安全に巻き戻す方法
こんにちは、とまだです。
AIにコードを編集させていると、思わぬ方向に進んでしまうことがあります。
そんなとき便利なのが、Claude Codeのチェックポイント機能です。
この機能を使えば、過去の状態に簡単に戻れます。
今回は、チェックポイント機能の使い方を実際に検証しながら解説します!
ちなみに私は本業ではフリーランスエンジニア、ならびにAI駆動開発の導入支援を行っています。
また、Udemy で AI 駆動開発講座を複数開講しており、いくつかベストセラーもいただいています。
その経験を活かして、初心者の方でもわかりやすいよう、丁寧に解説しています!
忙しい人のために要約
- チェックポイント機能は
Escを2回押すか/rewindで起動 - 「コードと会話」「会話のみ」「コードのみ」の3つの復元方法がある
- 基本的には「コードと会話」を選ぶのがおすすめ
- bashコマンドや手動編集は追跡されないので注意
チェックポイント機能とは?
チェックポイント機能は、Claude Codeが行ったファイル編集を自動的に記録する機能です。
いわば、タイムマシンのようなものです。
すべてのプロンプト入力が自動的にチェックポイントとして保存されます。
そのため、何か問題が起きたときに過去の状態に戻れます。
/rewindコマンドの詳しい使い方については、別な記事で詳しく解説しています。
Claude Codeの/rewindコマンドで過去に戻る:会話の巻き戻しテクニック
どんなときに便利?
異なる実装方法を試したいとき、前の状態を保存しておけば安心して実験できます。
AIが予想外の変更をしてしまったとき、すぐに元の状態に戻せるので被害を最小限に抑えられます。
複数のアプローチを比較したいとき、それぞれの結果を確認してから最適なものを選べます。
チェックポイント機能の起動方法
チェックポイント機能を使うには、2つの方法があります。
キーボードショートカット
Escキーを2回連続で押します。
これが最も素早い方法です。
スラッシュコマンド
プロンプト入力欄で/rewindと入力します。
こちらも確実に起動できます。
どちらの方法でも、同じチェックポイントメニューが表示されます。
実際に検証してみた
初期状態の確認
まず、hello.txtというファイルを用意しました。
$ ls
hello.txt
$ cat hello.txt
Hello
内容は単純にHelloという1行だけです。
この状態でClaude Codeを起動します。
claude
起動後、/rewindコマンドを試してみます。
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
> /rewind
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
/rewind (checkpoint) Restore the code and/or conversation to a previous point
まだ何も変更していないため、次のように表示されました。
Rewind
Nothing to rewind to yet.
Esc to exit
これは予想通りの動作です。
Escで一旦終了します。
最初の編集を試す
次に、Claude Codeに編集を依頼してみます。
「hello.txtにWorldと書いてください」と指示しました。
⏺ Read(hello.txt)
⎿ Read 2 lines
⏺ ファイルには既に "Hello" と書かれています。これを "World" に変更します。
⏺ Update(hello.txt)
⎿ Updated hello.txt with 1 addition and 1 removal
1 - Hello
1 + World
⏺ 完了しました。hello.txt の内容を "World" に変更しました。
Claude Codeは正常にファイルを更新しました。
ファイルの内容がHelloからWorldに変更されました。
チェックポイントから復元する
ここで巻き戻しを試してみます。
> /rewind
今度は表示が変わりました。
Rewind
Restore the code and/or conversation to the point before…
hello.txt に World と書いてください
hello.txt +1 -1
❯ (current)
Enter to continue · Esc to exit
現状はcurrentになっています。
ここでEnterキーを押しても、現状には変更がありません。
そこで十字キーの上を押して、hello.txt に World と書いてくださいに移動してEnterキーを押します。
❯ hello.txt に World と書いてください
hello.txt +1 -1
(current)
>というマークが出ているので、カーソルが移動したことがわかります。
巻き戻る前に確認画面が出ます。
Confirm you want to restore to the point before you sent this message:
│ hello.txt に World と書いてください
│ (2m ago)
The conversation will be forked.
The code will be restored +1 -1 in hello.txt.
❯ 1. Restore code and conversation
2. Restore conversation
3. Restore code
⚠ Rewinding does not affect files edited manually or via bash.
ここで3つの選択肢が表示されます。
3つの復元方法の違い
それぞれ復元される範囲が異なります。
1. Restore code and conversation(コードと会話の両方を復元)
まず、一番上(デフォルト)のRestore code and conversationを選択してEnterキーを押します。
すると、Claude Codeのコンソールがすぐ表示されつつ、ファイルの内容が巻き戻されます。
コンソール(プロンプトを入力する場所)の表示は以下の通りです。
> hello.txt に World と書いてください
つまり、「さっきの指示を出す前の状態」に戻ったことになります。
- Claude Codeの認識:まだ何もしていない
- 実際のファイルの状態:まだ何もしていない
そのまま時間だけが戻ったような状態になります。
これが一番わかりやすいです。
この方法の良いところは、先ほど書いていた指示がそのまま残るところです。
何かプロンプトが間違っていた場合、そのプロンプトを修正して再び実行できます。
2. Restore conversation(会話のみを復元)
さて、もう一度hello.txtに編集をしてみます。
今度は「Hello」の次に「World」ではなく「Tomada」と書いてみます。
> hello.txt に Tomada と書いてください
⏺ Read(hello.txt)
⎿ Read 2 lines
⏺ ファイルを読み取りました。現在の内容は "Hello" です。次に "Tomada" を追加します。
⏺ Update(hello.txt)
⎿ Updated hello.txt with 1 addition
1 Hello
2 + Tomada
⏺ 完了しました。hello.txt に "World" を追加しました。ファイルの内容は以下のようになっています:
Hello
Tomada
また、ここで巻き戻しを試してみます。
> /rewind
次は、Restore conversationを選択してEnterキーを押します。
まず、コンソール上は以下の通りです。
> hello.txt に World と書いてください
コンソール上は変わりません。
しかし、hello.txtの内容は巻き戻されておらず、Tomadaが追加されたままです。
$ cat hello.txt
Hello
Tomada
そこで、戻った会話(コンソール上の会話)は一旦削除した上で、もう一度/rewindを試してみます。
> /rewind
すると次のように表示されました。
Rewind
Nothing to rewind to yet.
Esc to exit
非常にややこしいですが、今回二番目のRestore conversationを選択した場合、会話は巻き戻されましたが、ファイルの変更は巻き戻されませんでした。
- Claude Codeの認識:まだ何もしていない
- 実際のファイルの状態:変更が行われたまま
もちろん、ファイル自体の変更はそのままです。
つまり、ファイルの状態とClaude Codeの認識は異なります。
3. Restore code(コードのみを復元)
さて、3つ目も試してみます。
一旦、hello.txtにhogeと書いてみます。
> hello.txt に hoge と追記してください
⏺ hello.txt に "hoge" を追記します。
⏺ Read(hello.txt)
⎿ Read 3 lines
⏺ Update(hello.txt)
⎿ Updated hello.txt with 1 addition
1 Hello
2 World
3 + hoge
4 \ No newline at end of file
⏺ 完了しました。hello.txt に "hoge" を追記しました。
また、ここで巻き戻しを試してみます。
> /rewind
今度はRestore codeを選択してEnterキーを押します。
Confirm you want to restore to the point before you sent this message:
│ hello.txt に hoge と追記してください
│ (31s ago)
The conversation will be unchanged.
The code will be restored +0 -1 in hello.txt.
1. Restore code and conversation
2. Restore conversation
❯ 3. Restore code
まずこのとき、Claude Codeのコンソール上は空っぽになります。
言い換えると、会話は戻っていませんし、会話履歴もそのまま残っています。
⏺ Update(hello.txt)
⎿ Updated hello.txt with 1 addition
1 Hello
2 World
3 + hoge
4 \ No newline at end of file
⏺ 完了しました。hello.txt に "hoge" を追記しました。
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
>
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
しかし、hello.txtの内容は巻き戻されており、hogeが削除されました。
$ cat hello.txt
Hello
World
つまり、Claude Codeの認識と実際のファイルの状態は異なります。
- Claude Codeの認識:
hogeを追記した - 実際のファイルの状態:
hogeが追記される前の状態
複数のチェックポイントから選ぶ
もう少し実験を続けてみましょう。
2回ぐらい連続でClaude Codeの指示を出してみます。
> fuga を追記して
⏺ hello.txt に "fuga" を追記します。
⏺ Read(hello.txt)
⎿ Read 3 lines
⏺ Update(hello.txt)
⎿ Updated hello.txt with 1 addition
1 Hello
2 World
3 + fuga
4 \ No newline at end of file
⏺ 完了しました。hello.txt に "fuga" を追記しました。
> nyanko と追記して
⏺ hello.txt に "nyanko" を追記します。
⏺ Read(hello.txt)
⎿ Read 3 lines
⏺ Update(hello.txt)
⎿ Updated hello.txt with 2 additions and 1 removal
1 Hello
2 World
3 - fuga
3 \ No newline at end of file
4 + fuga
5 + nyanko
6 \ No newline at end of file
⏺ 完了しました。hello.txt に "nyanko" を追記しました。
ここで/rewindを試してみます。
すると、このように連なっていくつかのバージョンが表示されます。
Rewind
Restore the code and/or conversation to the point before…
hello.txt に hoge と追記してください
hello.txt +1 -0
fuga を追記して
hello.txt +1 -0
nyanko と追記して
hello.txt +2 -1
❯ (current)
ここで十字キーの上を押してfuga を追記してに移動してEnterキーを押します。
❯ fuga を追記して
hello.txt +1 -0
そしてRestore code and conversationを選択してEnterキーを押します。
この場合、お察しの通りfugaを追記する前の状態にすべてが戻ります。
⏺ 完了しました。hello.txt に "hoge" を追記しました。
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
> fuga を追記して
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
以上がチェックポイント機能の動作確認です。
検証からわかったこと
基本的にはRestore code and conversationを選択することになります。
たとえばRestore conversationを選択すると、会話は巻き戻されますが、ファイルの変更は巻き戻されません。
また、Restore codeを選択すると、会話は巻き戻されませんが、ファイルの変更は巻き戻されます。
これは、Claude Codeの認識と実際のファイルの状態が異なることを意味します。
特別な理由がない限り、両方を復元する方が安全です。
注意すべき制限事項
チェックポイント機能には、いくつかの制限があります。
bashコマンドの変更は追跡されない
Claude Codeがbashコマンドでファイルを変更した場合、チェックポイントには記録されません。
たとえば、次のようなコマンドです。
rm file.txt
mv old.txt new.txt
cp source.txt dest.txt
これらの変更は、巻き戻しの対象外です。
あくまで、ファイル編集ツールを使った変更のみが追跡されます。
手動編集は追跡されない
エディタで直接ファイルを編集した場合も、記録されません。
Claude Code外での変更は、チェックポイントの対象外です。
ただし、Claude Codeが同じファイルを編集すれば、その時点の状態は記録されます。
バージョン管理の代わりにはならない
チェックポイント機能は、セッション内での素早い復元が目的です。
長期的なバージョン管理には、Gitなどを使用すべきです。
チェックポイントは30日後に自動削除されます。
あくまで、Gitを補完する機能として考えましょう。
セッション管理やコンテキスト管理については、別な記事で詳しく解説しています。
Claude Codeのセッション管理:開始・終了・再開の完全ガイド
Claude Codeのコンテキスト管理完全ガイド:/clear・/compact・/contextの使い分け
/rewindを使った巻き戻しの具体的な操作手順は、拙著『Claude Codeで作って学ぶ AI駆動アプリ開発入門』(技術評論社、2026年9月8日発売)の5.4節でハンズオン形式で扱っています。
チェックポイント機能のほかにも、エラーが出たときの対処法やコンテキストの仕組みなど、開発中に安心して手を動かすための考え方を扱う構成です。
実践的な使い方
実験的な変更を試すとき
新しいアプローチを試す前に、チェックポイントがあることを確認します。
もし失敗しても、すぐに元に戻せます。
安心して大胆な変更に挑戦できます。
AIの出力が意図と違ったとき
プロンプトの書き方が不十分だと、意図しない変更が起こります。
そんなときは、Restore code and conversationで巻き戻します。
プロンプトを修正して、再度実行しましょう。
複数の実装を比較したいとき
まず1つ目の実装を試して、チェックポイントで戻ります。
次に2つ目の実装を試して、結果を比較します。
最終的に、より良い方を選択できます。
まとめ
チェックポイント機能は、Claude Codeでの作業を安全にする重要な機能です。
Escを2回押すか/rewindで起動できます。
復元方法は3つありますが、基本的にはRestore code and conversationを選びましょう。
ただし、bashコマンドや手動編集は追跡されない点に注意が必要です。
この機能を活用すれば、より大胆にAIとの共同作業を進められます。
Xをフォローいただけると嬉しいです!
AI駆動開発(特に Claude Code)のノウハウや Tips をよく発信しています!
Discussion