checkpointing の仕組み
ファイル checkpointing を有効にすると、SDK は Write、Edit、または NotebookEdit ツールを通じてファイルを修正する前に、ファイルのバックアップを作成します。レスポンスストリーム内のユーザーメッセージには、復元ポイントとして使用できる checkpoint UUID が含まれます。ファイル巻き戻しは、ディスク上のファイルを以前の状態に復元します。会話自体を巻き戻すわけではありません。
rewindFiles()(TypeScript)または rewind_files()(Python)を呼び出した後も、会話履歴とコンテキストはそのまま保持されます。RewindFilesResult は、skippedLinks フィールドでスキップされたすべてのパスをカウントします。スキップには Claude Code v2.1.216 以降が必要です。v2.1.216 より前では、巻き戻しは追跡パスのリンクを通じて書き込みと削除を行いました。
checkpointing を実装する
ファイル checkpointing を使用するには、オプションで有効にし、レスポンスストリームから checkpoint UUID をキャプチャしてから、復元が必要な場合にrewindFiles()(TypeScript)または rewind_files()(Python)を呼び出します。
このセクションの例では、プロンプト「Refactor the authentication module」を使用しています。認証モジュールを含むプロジェクトで実行するか、プロンプトを変更してプロジェクトに存在するファイルを指定してください。ファイルの変更を確認し、巻き戻しがそれらを復元するのを見ることができます。
この例は checkpointing を有効にし、レスポンスストリームから checkpoint UUID とセッション ID をキャプチャしてから、後でセッションを再開してファイルを巻き戻します。例の番号付きコメントは、以下のステップと対応しています。
1
checkpointing を有効にする
checkpointing を有効にして checkpoint UUID を受け取るように SDK オプションを設定します:
checkpointing を実装するの下の先頭の例では、permission mode を
acceptEdits に設定しており、これはプロンプトなしでエージェントのファイル編集を承認します。詳細については、Permission modesを参照してください。2
checkpoint UUID とセッション ID をキャプチャする
replay-user-messages オプションが設定されている場合、レスポンスストリーム内の各ユーザーメッセージには、checkpoint として機能する UUID があります。ほとんどのユースケースでは、最初のユーザーメッセージ UUID(message.uuid)をキャプチャします。これに巻き戻すと、すべてのファイルが元の状態に復元されます。複数の checkpoint を保存して中間状態に巻き戻すには、複数の復元ポイントを参照してください。セッション ID(message.session_id)をキャプチャするのはオプションです。ストリームが完了した後に巻き戻したい場合にのみ必要です。Checkpoint before risky operations の例のように、メッセージの処理中に rewindFiles() をすぐに呼び出す場合は、セッション ID のキャプチャをスキップできます。3
ファイルを巻き戻す
ストリームが完了した後に巻き戻すには、空のプロンプトでセッションを再開し、checkpoint UUID を使用して
rewind_files()(Python)または rewindFiles()(TypeScript)を呼び出します。resumed セッションのオプションで checkpointing を有効にし、レスポンスループ内から巻き戻しを呼び出します。ストリーム中に巻き戻すこともできます。そのパターンについては、Checkpoint before risky operationsを参照してください。セッション ID と checkpoint ID をキャプチャした場合、CLI からも巻き戻すことができます。このコマンドには、Claude Code をインストールすることで取得できる claude 実行ファイルが必要です。SDK は checkpointing を有効にしますが、claude -p を直接実行する場合は、CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING 環境変数を設定する必要があります:--rewind-files フラグは claude --help 出力には表示されませんが、CLI は上記のように受け入れます。巻き戻しが成功すると、コマンドは Files rewound to state at message <checkpoint-uuid> を出力して、プロンプトを送信せずに終了します。一般的なパターン
これらのパターンは、ユースケースに応じて checkpoint UUID をキャプチャして使用するさまざまな方法を示しています。リスクのある操作の前に checkpoint を作成する
このパターンは、最新の checkpoint UUID のみを保持し、各エージェントターンの前に更新します。処理中に問題が発生した場合、最後の安全な状態にすぐに巻き戻して、ループから抜け出すことができます。 このサンプルを実行する前に、your_revert_condition(Python)または yourRevertCondition(TypeScript)を独自のチェック(エラー検出や検証失敗など)に置き換えてください。プレースホルダーはサンプルでは定義されていません。
複数の復元ポイント
Claude が複数のターンにわたって変更を加える場合、すべての方法で巻き戻すのではなく、特定のポイントに巻き戻したい場合があります。例えば、Claude がターン 1 でファイルをリファクタリングし、ターン 2 でテストを追加した場合、リファクタリングは保持したいが、テストは元に戻したい場合があります。 このパターンは、すべての checkpoint UUID をメタデータ付きの配列に保存します。セッションが完了した後、以前の任意の checkpoint に巻き戻すことができます:試してみる
この完全な例は、小さなユーティリティファイルを作成し、エージェントにドキュメンテーションコメントを追加させ、変更を表示してから、巻き戻したいかどうかを尋ねます。 開始する前に、Claude Agent SDK がインストールされていることを確認してください。1
テストファイルを作成する
utils.py(Python)または utils.ts(TypeScript)という新しいファイルを作成し、次のコードを貼り付けます:2
インタラクティブな例を実行する
ユーティリティファイルと同じディレクトリに
try_checkpointing.py(Python)または try_checkpointing.ts(TypeScript)という新しいファイルを作成し、次のコードを貼り付けます。このスクリプトは Claude にユーティリティファイルにドキュメンテーションコメントを追加するよう要求し、その後、元の状態に巻き戻すオプションを提供します。3
例を実行する
ユーティリティファイルと同じディレクトリからスクリプトを実行します。エージェントがドキュメンテーションコメントを追加し、巻き戻したいかどうかを尋ねるプロンプトが表示されます。はいを選択すると、ファイルは元の状態に復元されます。
- Python
- TypeScript
制限事項
ファイル checkpointing には、次の制限事項があります:トラブルシューティング
Checkpointing オプションが認識されない
enableFileCheckpointing または rewindFiles() が利用できない場合、古い SDK バージョンを使用している可能性があります。
解決策:最新の SDK バージョンに更新します:
- Python:
pip install --upgrade claude-agent-sdk - TypeScript:
npm install @anthropic-ai/claude-agent-sdk@latest
ユーザーメッセージに UUID がない
message.uuid が undefined または欠落している場合、checkpoint UUID を受け取っていません。
原因:replay-user-messages オプションが設定されていません。
解決策:オプションに extra_args={"replay-user-messages": None}(Python)または extraArgs: { 'replay-user-messages': null }(TypeScript)を追加します。
「No file checkpoint found for this message」エラー
このエラーは、指定されたユーザーメッセージ UUID の checkpoint データが存在しない場合に発生します。 一般的な原因:- ファイル checkpointing が元のセッションで有効になっていない(
enable_file_checkpointingまたはenableFileCheckpointingがtrueに設定されていない) - セッションが再開して巻き戻しを試みる前に適切に完了していない
enable_file_checkpointing=True(Python)または enableFileCheckpointing: true(TypeScript)が設定されていることを確認してから、例に示されているパターンを使用します:最初のユーザーメッセージ UUID をキャプチャし、セッションを完全に完了してから、空のプロンプトで再開し、rewindFiles() を 1 回呼び出します。
「File rewinding is not enabled」エラー
このエラーは、checkpointing が有効になっていない非対話的な巻き戻しを試みた場合に発生します:--rewind-files を使用して bare claude -p を実行するか、checkpointing を有効にしないオプションを持つ SDK セッション(再開されたセッションを含む)を実行します。SDK は、enable_file_checkpointing(Python)または enableFileCheckpointing(TypeScript)が巻き戻しを実行するセッションで有効になっている場合にのみ、CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING 環境変数を内部的に設定します。bare CLI はこれを設定しません。
解決策:bare CLI の場合、コマンドを実行するときに環境変数を設定します:
enable_file_checkpointing=True(Python)または enableFileCheckpointing: true(TypeScript)を設定します。
「ProcessTransport is not ready for writing」エラー
このエラーは、レスポンスを反復処理した後にrewindFiles() または rewind_files() を呼び出した場合に発生します。ループが完了すると、CLI プロセスへの接続が閉じられます。
解決策:空のプロンプトでセッションを再開してから、新しいクエリで巻き戻します。Implement checkpointing の先頭の例に、Step 3 とマークされたコメントで、両言語での再開と巻き戻しの呼び出しが示されています。
次のステップ
- Sessions:セッションを再開する方法を学びます。これはストリームが完了した後に巻き戻すために必須です。セッション ID、会話の再開、セッションフォーク化について説明します。
- Permissions:Claude が使用できるツールとファイル修正の承認方法を設定します。編集がいつ発生するかについてより多くの制御が必要な場合に便利です。
- TypeScript SDK reference:
query()のすべてのオプションとrewindFiles()メソッドを含む完全な API リファレンス。 - Python SDK reference:
ClaudeAgentOptionsのすべてのオプションとrewind_files()メソッドを含む完全な API リファレンス。