巻き戻しが期待通りに復元されない理由
チェックポイントの作成には正確なトリガーがあります。Anthropicは次のように書いています。「Claudeで作業すると、ターンを開始する各プロンプトを送信する前に、チェックポイント機能がコードの状態を自動的にキャプチャします。」そして、このメカニズムはプロンプトごとに行われます。「ターンを開始するプロンプトを送信するたびに、新しいチェックポイントが作成されます。」
ここで重要なフレーズは「ターンを開始する(that starts a turn)」です。Claudeがタスクを実行している最中に何かを入力した場合、何が起こるかについてドキュメントには明記されています。「Claudeの作業中にキューに入れたメッセージが、実行中のターン内にClaudeに到達した場合、新しいターンを開始するのではなく、そのターンに参加します。メッセージは会話に表示されますが、Claude Codeはそのメッセージに対するチェックポイントを作成せず、巻き戻しメニューにも表示されません。」Anthropicは回復手段も提供しています。「そのようなメッセージを削除するか、その後にClaudeが行った編集を取り消すには、ターンを開始したプロンプトまで巻き戻します。これにより、メッセージが届く前にClaudeが行った作業を含め、ターン全体が巻き戻されます。」
追跡の範囲も同様に具体的です。「チェックポイント機能は、Bashコマンドによって変更されたファイルを追跡しません」とAnthropicは書いており、その境界線を次のように示しています。「Claudeのファイル編集ツールを介して直接行われたファイル編集のみが追跡されます。」スクリプトによって移動されたファイルは、スナップショットの対象外となります。
サブエージェントは、その実行方法によって分かれます。Anthropicは、サブエージェントが「Claudeのファイル編集ツールを使用して編集を行いますが、Claude Codeは通常、セッションのチェックポイントでそれらの編集をキャプチャしません」と指摘し、ケースを分けています。フォアグラウンドにフォークされたスキルは「あなた自身のターン中にワーキングツリーを編集するため、巻き戻すことで通常通りその編集が復元されます」が、「それ以外のサブエージェントの場合:巻き戻しても編集は復元されません。Gitを使用して元に戻してください」としています。
並行して行われた作業も対象外です。「チェックポイント機能は、現在のセッション内で編集されたファイルのみを追跡します。Claude Codeの外部でファイルに加えた手動の変更や、他の同時実行セッションからの編集は、現在のセッションと同じファイルを偶然変更しない限り、通常はキャプチャされません。」2つのターミナルを開いていた場合、復元しようとしているスナップショットを保持していたのはそのうちの1つだけです。
そして、静かに警告してくれるカテゴリもあります。Anthropicは、「チェックポイント機能は、シンボリックリンクまたはハードリンクされたファイルを巻き戻しません」とし、Claude Codeは「シンボリックリンクまたはハードリンクである追跡対象のパスをスキップし、Restored the code, but skipped N files という警告を表示します」と述べています。また、「スキップされたファイルは現在のコンテンツを保持します」ともあります。ドットファイルマネージャーや一部のパッケージマネージャーは、まさにこのカテゴリにファイルを配置します。
最後に、タイミングの詳細です。スナップショットは永久に保持されるわけではありません。「Claude Codeは、セッション内の最新の100個のチェックポイントのファイルスナップショットを保持します。」また、これとは別に「Claude Codeは、セッションが最後にスナップショットを保存してからデフォルトで約30日後に、保持スイープ(retention sweep)でセッションのファイルスナップショットを削除します。」その結果として、「スナップショットが消去されたチェックポイントに巻き戻そうとすると、No files were restored というエラーで失敗することがあります」と記載されています。ドキュメント化されている調整手段は設定です。「スナップショットをより長く保持するには、cleanupPeriodDays を設定してください。」
代わりに試されがちな方法
Claudeに最後の変更を取り消すよう依頼する。 習慣になるほど頻繁に機能しますが、これは復元ではなく「再編集」です。古い状態に似た新しい状態が得られますが、それは元の状態と同一ではありません。
セッションがおかしくなったときに /clear を実行する。 这是会話をクリアするものであり、ファイルのロールバックではありません。Anthropicは、元の状態に戻るための架け橋をドキュメント化しています。同じ Claude Code プロセス内で以前に /clear を実行していた場合、「巻き戻しメニューのリストの最上部に /resume <session-id> (previous session) というラベルの追加エントリが表示されます」(これには最近のバージョンが必要です)。
実際にはコンテキストスペースを増やしたいだけなのに巻き戻しを行う。 2つの異なるニーズが1つのメニューを共有しています。要約(summarize)オプションは会話を圧縮し、復元(restore)オプションは状態を変更します。Anthropicはこれらを明確に区別しています。「要約してもディスク上のファイルは変更されず、元のメッセージはセッションのトランスクリプトに残るため、Claudeは引き続き詳細を参照できます。」圧縮後も何を残すかを選択することはそれ自体が1つの課題であり、これについては aiming auto-compact at what you need kept で詳しく解説しました。
セッションのトランスクリプトを記録として扱う。 トランスクリプトは何が起こったかを追跡するのには優れていますが、後で情報を検索する場所としては不向きです。この違いについては indexed session logs versus memory で説明しました。
チェックポイントをバージョン管理として使用する。 Anthropicはこれに直接言及しています。「チェックポイントは、迅速なセッションレベルの回復のために設計されています。永続的なバージョン履歴やコラボレーションには、コミット、ブランチ、長期的な履歴のために、引き続きGitなどのバージョン管理を使用してください。」
別のアプローチを試すために巻き戻しを行う。 そのための専用のメカニズムがあり、ドキュメントでも指摘されています。元のセッションをそのまま残しながら、分岐して別のアプローチを試すには、/branch を使用します。探索のために巻き戻しを行うと、後で戻したくなるかもしれない内容を上書きしてしまいます。
解決策:メニューを2つの操作として捉え、どの編集が対象範囲内かを把握する
/rewind を単一のボタンと考えるのをやめれば、すべてがはるかに簡単になります。
ステップ 1:メニューを開き、どのオプションが提供されているかを確認する
Anthropicは2つのアクセス方法を提供しています。「/rewind を実行するか、プロンプト入力が空のときに Esc を2回押して、巻き戻しメニューを開きます。」実行する前に知っておくべき注意点があります。入力フィールドにテキストがある場合、Esc を2回押すと代わりにテキストがクリアされます(ただし、クリアされたテキストは入力履歴に保存されます)。
メニューには送信した各プロンプトがリストされ、最大6つのアクションが提供されます。「Restore code and conversation(コードと会話を復元):コードと会話の両方をその時点に戻す」、「Restore conversation(会話を復元):現在のコードを保持したまま、そのメッセージまで巻き戻す」、「Restore code(コードを復元):会話を保持したまま、ファイルの変更を元に戻す」、「Summarize from here(ここから要約)」、「Summarize up to here(ここまで要約)」、および「Never mind(キャンセル)」。
どのオプションが表示されるか自体が情報になります。Anthropicは次のように説明しています。「2つのコード復元オプションは、選択したチェックポイントに元に戻すための追跡されたファイル変更がある場合にのみ表示されます。その時点以降にファイル編集がキャプチャされなかった場合、メニューには Restore conversation、要約オプション、および Never mind のみが表示されます。」したがって、Claudeがファイルを変更したことが確実であるにもかかわらずコードオプションが表示されない場合、それは変更が追跡対象外の場所(Bashコマンド、バックグラウンドのサブエージェント、別のセッションなど)から行われたことを示すシグナルです。
便利な機能として、次のようなものもあります。「会話を復元するか、[Summarize from here] を選択した後、選択したメッセージの元のプロンプトが入力フィールドに復元されるため、再送信や編集が可能です。」
ステップ 2:復元を信頼する前に、4つの対象外カテゴリを確認する
問題が発生しやすい順に、リストを確認してください。
Bashコマンドを介して何か実行されましたか?Anthropicの言葉を借りれば、それらのファイル変更は「巻き戻しによって元に戻すことはできません。」
バックグラウンドのサブエージェントが作業を行いましたか?フォアグラウンドにフォークされたスキル以外のサブエージェントの場合、「巻き戻しても編集は復元されません。Gitを使用して元に戻してください。」
同じリポジトリで2つ目のセッションが開かれていましたか?他の同時実行セッションからの編集は、「同じファイルを偶然変更しない限り、通常はキャプチャされません。」
シンボリックリンクまたはハードリンクされたパスはありますか?これらはスキップされ、ファイル名ではなく件数を示す警告が表示されます。どれがスキップされたかを確認するために、Anthropicは診断方法をドキュメント化しています。「復元する前に /debug でデバッグログを有効にします。~/.claude/debug/<session-id>.txt にあるデバッグログに、スキップされた各パスの名前が記録されます。」
ステップ 3:証拠を巻き戻して消去してしまう前に、結論を書き留める
巻き戻しは、多くの場合、何かを学んだ試行の終わりを意味します(このライブラリはドキュメント通りに動作しない、このスキーマ変更はあのジョブを壊す、このアプローチはある理由で断念された、など)。「Restore code and conversation」を実行すると、コードとともに、その発見が含まれていたトランスクリプトも削除されてしまいます。
まず30秒時間を取ってください。何が機能しなかったのか、そしてその理由についての1文は、破棄しようとしているブランチよりも価値があり、そうしなければ来月また同じことを再発見する羽目になります。同じ推論は、途中で編み出したコマンドや呼び出しにも当てはまります。これは when Claude Code forgets your command history で説明されているギャップです。
MemoryLakeでのセットアップ
チェックポイントは、約1ヶ月というスパンでのセッションレベルの回復のために構築されています。セッション内で到達した結論には、より長期的な保存場所が必要です。MemoryLakeは、単一セッションのスナップショットの外部にあり、接続するすべてのAIアシスタントから読み取り可能な、意図的に結論を書き込むためのストアです。エントリーはあなた自身の言葉で自分で書き込みます。Anthropicのシステムや他のベンダーのストアから何かが読み取られたり、書き込まれたり、削除されたりすることはありません。チェックポイント、トランスクリプト、ローカルファイルは完全に独自の管理下に置かれます。
ステップ 1:APIキーを作成する
ダッシュボードからキーを生成します。これにより、ターミナルセッション、エディタ、チャットアシスタントが、それぞれトランスクリプトから再学習することなく、同じ事実のセットにアクセスできるようになります。

ステップ 2:最初のメモリをアップロードする
断念した試みの結果から始めましょう。巻き戻して離れたアプローチ、それが失敗した理由、明らかになった制約などです。巻き戻しによって消去されてしまう運用上の詳細(最終的に機能した呼び出し、重要だったフラグ、ステップを実行する必要があった順序など)も追加します。

ステップ 3:AIとエージェントを接続する
ツールをこのレイヤーに向けることで、スクロールバックの最後の内容から再構築するのではなく、セッションの開始時にそれらの事実がロードされるようになります。その後、適切にテストします。別のアシスタントに、なぜそのアプローチを断念したのかを尋ねてみてください。もし答えが返ってくれば、その発見はそれを生み出したセッションよりも長生きしたことになります。

実務においてこれがもたらす変化
最初の変化は、部分的な復元に混乱しなくなることです。元に戻ると思っていたファイルがそのまま残っている場合、4つの対象外カテゴリがその理由を説明してくれます。また、メニュー内でグレーアウトされたコードオプションが、事前にそれを教えてくれていることもよくあります。
2つ目は、「戻る」ことと「スペースを空ける」ことを区別できるようになる点です。復元(Restore)は状態を変更し、要約(summarize)は会話を圧縮してファイルには手を付けず、元のメッセージをトランスクリプトに残します。この切り分けが明確になれば、一方が必要なときにもう一方を使用してしまうことがなくなります。これは、圧縮ステップを持つすべてのエージェントに現れるのと同じ切り分けであり、deciding what survives compaction が単発の作業ではなく、繰り返し行うべき課題である理由でもあります。
3つ目は、約30日間の保持スイープ(retention sweep)が、突然気づくものではなく、計画に組み込むものになる点です。いずれ巻き戻そうと思っていた古いセッションは巻き戻せなくなります。より長い期間が必要な場合は、ドキュメントに記載されている cleanupPeriodDays がその解決策となります。
4つ目は、断念した作業が何かを生み出し始める点です。巻き戻しを行うたびに1文の記録を残すようにすれば、失敗はスナップショットとともに消え去るのではなく、知識として蓄積されていきます。
Claude Codeセッションを巻き戻すためのベストプラクティス
修正は独自のターンとして送信する。 実行中のターンに参加するメッセージはチェックポイントを作成せず、巻き戻しメニューにも表示されません。ターンが終了するのを待つことで、復元ポイントを確保できます。
エージェントを自由に動かす前にコミットする。 チェックポイントはセッションレベルの回復です。Anthropic自身が推奨しているように、Gitが永続的な履歴となります。
推論プロセスを残したい場合は、Restore code(コードを復元)を優先する。 会話を保持したままファイルを元に戻すことで、学んだすべての内容を画面に残したまま再試行できます。
重要な復元を行う前にデバッグログを有効にする。 これは、件数だけを見るのではなく、どのシンボリックリンクまたはハードリンクされたパスがスキップされたかを特定するためのドキュメント化された方法です。
並行セッションについて何も仮定しない。 編集を行ったセッションのみが、そのスナップショットを保持します。
Restore code and conversation を実行する前に発見を書き留める。 このオプションは、状態と、なぜそれを変更したのかという記録の両方を削除する唯一のオプションです。再利用可能な部分を永続的な場所に保管する習慣については、making Claude Code remember your command history で説明しています。
結論
/rewind はAnthropicが説明している通りの動作をします。リストから選択したプロンプトの前の状態に、コード、会話、またはその両方を復元します。メニュー自体もよく設計されており、元に戻すための追跡されたファイル変更がある場合にのみコード復元オプションが表示されるという詳細も含まれています。
巻き戻しが信頼できないように感じられる原因は、その対象外となる変更のセットにあります。Anthropicはそのセットをすべて公開しています。Bashコマンドによって変更されたファイル、ほとんどのサブエージェントによる編集、手動および同時実行セッションによる変更、シンボリックリンクおよびハードリンクされたパス、そしてすでに進行中のターンに参加したメッセージなどです。これらはすべてドキュメント化されていますが、発生した時点では何も通知されません。
これに保持期間の詳細(最新の100個のチェックポイントのスナップショット、セッションが最後に保存してからデフォルトで約30日後にクリーンアップ、より長い期間が必要な場合は cleanupPeriodDays が利用可能)を加えると、この機能の真の姿が見えてきます。それは、意図的にバージョン履歴としては設計されていない、優れた近距離の回復機能です。
永続性にはGitを、代替案の探索には /branch を、コンテキストの圧迫には要約オプションを、そして本来の目的には /rewind を使用してください。そして、断念した各試行が何を教えてくれたかを書き留めてください。なぜなら、それこそがスナップショットが保持することのない唯一のものだからです。