【Claude Code実践入門 第3回】走らせながら操縦する ― Escで止める、/clear、/compactの指示、/rewindの巻き戻しと戻らないもの、/goal、worktree、コマンド早見表

生成AI
スポンサーリンク
スポンサーリンク

「Claude Code が計画にないファイルを触り始めたのですが、止めて直す方法が分かりません」
「巻き戻せば全部元に戻ると思っていたのに、サーバーに加えた変更は戻りませんでした」

Claude Code は、一度任せると何段階もの作業を自分で進めます。便利な反面、方向がずれたまま走り続けることもあります。第2回(作業範囲を決める)で作業の範囲を決めたうえで、走らせている途中に早めに止める・戻す・区切るための操作を知っておくと、やり直しの手間が小さくなります。

第3回では、Esc で止めて直す、/clear、指示を付けた /compact、巻き戻し(/rewind)と巻き戻しで戻らないもの、完了の条件を渡す /goal、worktree での並行作業、そして操縦のコマンド早見表を扱います。


早めに止めて直す

方向のずれは、気づいた時点で直すほど安く済みます。冒頭の1つ目の相談がこれです。使う操作は次の4つです。

  • Esc で止める:作業の途中で止められる。それまでのコンテキストは残るので、方向を直して続けられる
  • 「いまのを元に戻して」と頼む:直前の変更を取り消させる
  • 2回直してだめなら /clear:同じ問題を何度も直すと、失敗した試みがコンテキストに残って悪くなる。分かったことを入れたプロンプトで、新しい会話からやり直す
  • /clear しても戻れる:前の会話は /resume で開き直せる

止めるべきタイミングを見分けるための、方向がずれたサインも挙げておきます。

  • 計画にないファイルを開き始めた
  • 同じコマンドを何度も試している
  • 質問と関係のない調査を始めた

出典は公式のベストプラクティス(https://code.claude.com/docs/en/best-practices#course-correct-early-and-often)です。

/resume は公式のコマンド一覧に「会話を ID か名前で再開する、またはセッションの選択画面を開く」とあります。デスクトップアプリの Code タブでは、/resume で CLI のセッションを開き直せると公式の desktop のページにあり、ローカルのセッションで使えます(SSH・WSL・クラウドのセッションでは使えません)。

/clear や /compact などコンテキストを管理する操作は、連載「Claude活用入門」第5回「コンテキストの管理」にも一覧があります。


/compactには指示を付ける

/compact は、会話を要約し、その要約で会話を置き換えて、コンテキストを空けるコマンドです。長くなった会話を続けたいときに使います。

  • 危険:要約で大事なことが抜けると、Claude が本筋からそれる
  • 指示を付ける:単独で実行せず、残すことを書く。例:/compact NTPの変更方針と、決めた参照先の3台だけを残して
  • 方針を決めておく:CLAUDE.md に「Compact instructions」の節を書くと、要約の方針を指定できる

例の「3台」は、NTP の参照先を3台にする演習(第8回)に合わせた数です。2台は1台と大差ない理由は、連載「NTP入門」第3回「何台の時刻源を使うか」を見てください。

公式の commands のページでは、/compact [instructions] は「ここまでの会話を要約してコンテキストを空ける。要約の焦点を指示として渡せる」と説明されています。自動コンパクトも、/compact と同じ手順で動きます(公式の context-window のページ「When your context fills up」の節)。

CLAUDE.md の「Compact instructions」は、公式の節の見出しではなく、costs のページ(”Add custom compaction instructions”)にある、CLAUDE.md の例の中の見出しです。例では、# Compact instructions の見出しの下に「When you are using compact, please focus on test output and code changes」(コンパクトするときは、テストの出力とコードの変更に焦点を当てて)と書かれています。

コンパクトの後に残るもの・消えるもの

項目コンパクトの直後
システムプロンプト(と出力スタイル)そのまま適用される
プロジェクトのルートの CLAUDE.md(paths: なしのルールを含む)ディスクから入れ直される
auto memoryディスクから入れ直される
Git の状態のスナップショットセッションの始まりに読み込んでいれば、リポジトリから新しいものを読み直す
プランモードで Claude が書いた計画ディスクから入れ直される
直近に読んだ・編集したファイル最大5つ。最近更新したものから読み直される
呼び出したスキルの本文入れ直される。1つのスキルにつき5,000トークン、合計25,000トークンまでで、古いものから落ちる
サブディレクトリの CLAUDE.md要約に含まれて消えるが、必要になるとまた読み込まれる(公式の表の書き方は “reloads them on demand”)
paths: 付きのルール同上

サブディレクトリの CLAUDE.md と paths: 付きのルールは、Claude がそのファイルを読み書き・編集したときに会話の履歴へ読み込まれる仕組みです。そのため、コンパクトの要約には含まれて消えますが、該当するファイルにまた触れると読み込まれ直します(公式の memory のページでは “load again on demand”)。

出典は Claude Academy のレッスン「長時間セッションの操縦」と、公式の context-window のページ(https://code.claude.com/docs/en/context-window)です。


巻き戻しメニュー

Claude Code は、プロンプトを送るたびにチェックポイントを作ります。/rewind を実行するか、入力欄が空の状態で Esc を2回押すと、巻き戻しのメニューが開きます。

選択肢CLI での英語の表示名何が戻るか使いどころ
コードと会話を復元Restore code and conversationファイルと会話の両方方向を間違えた。まとめてやり直したい
会話を復元Restore conversation会話だけ(ファイルはそのまま)変更は残し、指示の出し方だけやり直したい
コードを復元Restore codeファイルだけ(会話はそのまま)議論は残し、変更だけ取り消したい
ここから要約Summarize from hereその時点より後を要約する脇道にそれた会話を圧縮したい
ここまで要約Summarize up to hereその時点より前を要約する長い準備段階を圧縮し、実装の部分は残したい
  • 公式の文書では、このほかに変更せずメッセージの一覧に戻る「Never mind」の選択肢があります(6行のメニュー)
  • チェックポイントは直近100個までファイルのスナップショットを保存する(1セッションあたり)
  • チェックポイントは会話と一緒に保存されるので、セッションを再開しても /rewind で戻せる
  • スナップショットは、セッションが最後に保存してから約30日で削除される(既定。長く残すには cleanupPeriodDays を設定する)

上の5つの選択肢は、公式の checkpointing のページにある CLI の /rewind のものです(https://code.claude.com/docs/en/checkpointing)。デスクトップアプリの Code タブの巻き戻しの選択肢は、公式の desktop のページには書かれていません。

Code タブで筆者が確かめたこと(2026-10-04、Claude Code 2.1.284)

Code タブでは、入力欄が空の状態で Esc を2回押すと、次のような画面が出ました。

  • 「このメッセージまで巻き戻しますか?」という確認
  • 「復元」のプルダウン(既定は「コードと会話」)で、何を戻すかを選ぶ
  • 戻るファイルの数と行数の表示(筆者の記録では「1件 +1 −1」)
  • 注意書き「シェルコマンドで行った変更は元に戻されません。コミットはそのまま残ります。」

戻るファイルの数と行数を確かめてから「巻き戻し」を押します。戻すファイルがないときは、メッセージを選んだ時点ですぐに会話だけが巻き戻りました。

プルダウンの選択肢が、上の CLI の5つと同じかどうかは確かめていません。なお、checkpointing のページ(英語)には、会話を巻き戻すか「ここから要約」を選ぶと、そのメッセージの文が入力欄に戻り、送り直したり書き直したりできると書かれています(CLI の説明。2026年10月23日に確認)。「巻き戻しを元に戻す」で取り消せるという説明も見かけましたが、こちらは公式の文書で確認できていません。


巻き戻しで戻らないもの

巻き戻しは便利ですが、追跡されるのは Claude がファイル編集の機能で編集したファイルだけです。Bash のコマンドだけで作ったり変えたりしたファイルは戻りません。

巻き戻しで戻るのはファイル編集の機能で変えたもの(例:main.ymlの編集)で、戻らないのはBashのコマンドの変更(echo > ファイルとsed -i、rm・mv・cp、リモートのホストへのansible-playbook)とサブエージェントの編集であること、Codeタブの巻き戻しの画面に「シェルコマンドで行った変更は元に戻されません。コミットはそのまま残ります。」と出ること、インフラの作業では作業の前にGitでコミットし本番の前に--check --diffで確かめることを示す図
  • 戻るもの:ファイル編集の機能で変えたもの(例:main.yml の編集)
  • 戻らないもの:Bash のコマンドによる変更
    • echo > ファイル、sed -i
    • rm・mv・cp
    • ansible-playbook を実行してリモートのホストに加えた変更
  • サブエージェントによる編集、ほかのセッション、外部での変更も、戻らない

たとえば、rm・mv・cp や sed -i で変えたファイル、ansible-playbook を実行してリモートのホストに加えた変更は、巻き戻しの対象外です。Code タブの巻き戻しの画面にも「シェルコマンドで行った変更は元に戻されません」と表示されます。

公式の checkpointing のページの「制限」の節にも、次の3つが挙がっています。

  • Bash のコマンドの変更は追跡されない:「A file that only Bash commands changed isn’t tracked and stays as it is」(Bash のコマンドだけで変えたファイルは追跡されず、そのまま残る)。ただし、会話の中で Claude が一度ファイル編集の機能で編集したファイルは、その後に Bash のコマンドで加えた変更も巻き戻しで戻ると書かれています(2026年10月23日に確認)
  • サブエージェントの編集は戻らない:サブエージェントは Claude のファイル編集の機能で編集しますが、Claude Code はたいていその編集をセッションのチェックポイントに記録しません。例外として、前景で動く context: fork のスキルは、自分のターンの中でファイルを編集するため、巻き戻しで戻ります。それ以外のサブエージェントの場合は、巻き戻しで戻るのは会話の中で Claude がすでに編集していたファイルだけで、サブエージェントによるほかのファイルの編集は残るため、Git で戻します
  • 外部の変更は追跡されない:追跡されるのは、現在のセッションの中で編集されたファイルだけ。Claude Code の外で手作業で変えたファイルや、同時に動いているほかのセッションの編集は、通常は記録されません(現在のセッションがたまたま同じファイルを変更した場合を除く)

インフラの作業は、ほとんどがコマンドの実行でホストの状態を変えるものです。巻き戻しを当てにせず、次の2つを前提にします。

  • 作業の前に Git でコミットしておく
  • 本番に実行する前に --check --diff で差分を確かめる

巻き戻しは、会話と手元のファイルのやり直しに使うものと考えてください。冒頭の2つ目の相談がこれです。

筆者が試したら

Code タブ(手動、Claude Code 2.1.284、2026-10-04)で、Claude にファイル編集で main.yml を直させ、Bash の echo で bash_created.txt を作らせ、sed -i で site.yml を変えさせてから巻き戻しました。戻ったのは、ファイル編集で変えた main.yml だけです。Bash で作った bash_created.txt と、sed -i で変えた site.yml は残りました。

この手順は、第9回の演習の手順4で試せます。


/goal:「完了」を条件で渡す

/goal は、完了の条件を設定すると、条件を満たすまで Claude が複数のターンにわたって作業を続けるコマンドです。

/goal ansible-lint の指摘が0件で、--check --diff の changed が想定どおりの3件だけ、という条件を設定すると、Claudeが作業し、評価役が「条件を満たした?」を確かめ、はいなら完了、いいえなら Claude に戻って作業を続ける、という流れの図。下の枠「条件の書き方」には、評価役が読むのは会話の記録だけ、→ コマンドの出力など、会話に出るもので確かめられる条件にする、とある。最後の行は「やめるときは /goal clear」。
  • 確かめ方:別の評価役が、条件を満たしたかを毎ターン確かめる。Claude が最初に「終わった」と思った時点で止まらない
  • 向いている作業:手順よりも「完了の状態」のほうがはっきり書ける作業
  • 例:/goal ansible-lint の指摘が0件で、--check --diff の changed が想定どおりの3件だけ
  • 注意:評価役が読むのは会話の記録だけ。条件は、コマンドの出力など会話に現れるもので確かめられる形にする
  • やめるとき:/goal clear

出典は Claude Academy のレッスン「長時間セッションの操縦」と、公式のベストプラクティス(https://code.claude.com/docs/en/best-practices)です。

公式の goal のページ(https://code.claude.com/docs/en/goal)には、次のように書かれています。

  • 各ターンの後に、モデルが条件を満たしているかを確かめる。評価役は、Claude が会話の中に出したものだけで条件を判断する。ツールは呼ばず、コマンドの実行やファイルの読み取りを自分では行わない
  • 評価役は、設定した小さく速いモデル(”configured small fast model”)で動き、毎ターンの終わりに、条件とここまでの会話が渡される
  • 途中でやめるには /goal clear。stop・off・reset・none・cancel も clear の別名として使える
  • 非対話モード(-p)・デスクトップアプリ・Remote Control でも使える
  • 評価役はフックの仕組みの一部なので、設定ファイルのフックと同じワークスペースの信頼のルールのもとで使える

/goal は、公式の週次の更新情報(2026年5月11〜15日の週、v2.1.139)で紹介された機能です。公式のページには research preview などの表示は見つかりませんでした。

筆者が試したら

筆者の演習(Claude Code 2.1.289 の CLI、claude -p、2026-10-18)では、/goal ansible-lint が違反0件で終わる(日本語のタスク名は変えない) を「編集を受け入れる」で送りました。9ターンで終わり、Claude は .ansible-lint を新しく作って skip_list に name[casing] を入れました(タスク名は変えず、コミットもしませんでした)。条件を「違反0件」と書いたので、lint の設定の変更だけで終わった例です(条件に何を入れるかで、Claude の選ぶ手段が決まります)。ansible-lint が指摘したのは、タスク名が英小文字の chrony で始まるためです(筆者の実測では、日本語の文字で始まる名前は指摘されません。第4回の「補足:日本語のタスク名と ansible-lint の name[casing]」)。Claude の説明や結果の全体は、第9回の「早く終わったら」に載せています。


worktreeで並行作業

調査用と修正用など、複数のセッションを同時に動かしたいことがあります。

  • 並行で動かす:Code タブでは、新しいセッションは Ctrl+N(macOS は Cmd+N)、切り替えは Ctrl+Tab(逆回しは Ctrl+Shift+Tab)。Ctrl(macOS は Cmd)を押しながらサイドバーのセッションをクリックすると、2つを並べて表示できる
  • 問題:同じフォルダーで2つのセッションを動かすと、同じファイルを取り合って競合する
  • worktree:Git のリポジトリでは、セッションを始めるときにブランチ名の横の worktree のオプションを選ぶと、Git の別の作業コピーで動く。ほかのセッションの変更を上書きしない
  • Git で管理していないファイル:.worktreeinclude に書いておくと、各 worktree にコピーされる(.env、ローカルの設定など)
  • 使いどころ:調査用のセッションと修正用のセッションを分ける、2つの案を並べて比べる
worktreeなしでは、セッションAとセッションBが同じプロジェクトのフォルダーを取り合い(衝突の印の×)、worktreeありでは、セッションAはworktree A、セッションBはworktree Bという別の作業コピーで動くことを示す図。場所は〈プロジェクト〉/.claude/worktrees/で、.worktreeinclude に書いた .env などもコピーされる

CLI では、--worktree(または -w)に名前を付けて起動すると、隔離した worktree を作って、その中で Claude を始めます。既定では、リポジトリのルートの .claude/worktrees/<名前>/ に、worktree-<名前> という新しいブランチで作られます(例:claude --worktree feature-auth。公式の worktrees のページ)。Code タブでも、worktree は既定でプロジェクトのルートの .claude/worktrees/ に作られます(公式の desktop のページ)。資料の図の <プロジェクト>/.claude/worktrees/ は、この既定の場所です。場所は、Local のセッションなら Settings → Claude Code の「Worktree location」で変えられます(SSH のセッションは、SSH の接続の「Worktree folder」で決めます)。

.worktreeinclude は .gitignore と同じ書式のファイルです。書いたパターンに一致し、かつ .gitignore で除外されているファイルだけがコピーされ、Git が追跡しているファイルは複製されません。--worktree の worktree、サブエージェントの worktree、デスクトップアプリの並行セッションのすべてに効きます。

出典は公式の desktop のページ(https://code.claude.com/docs/en/desktop)と worktrees のページ(https://code.claude.com/docs/en/worktrees)、Claude Academy のレッスン「長時間セッションの操縦」です。CLI での並行作業は、連載「Claude活用入門」第5回「並行作業と自動化」にもあります。

なお、worktree は筆者の演習ではまだ試していません。


操縦のコマンド早見表

操作何をするかいつ使うか
Esc作業を止める方向がずれ始めたとき
/clear新しい会話を始める作業が変わるとき、2回直してもだめなとき
/compact 〈残すこと〉指示に沿って会話を要約する同じ作業を続けたいが長くなったとき
/rewind(Esc 2回)チェックポイントに戻す・要約する方向を間違えたとき
/goal 〈条件〉条件を満たすまで続けさせる完了の状態がはっきり書けるとき
/btw 〈質問〉脇の質問をする(履歴に残らない)本筋を汚さずに確かめたいとき(Ctrl+;)
/contextコンテキストの中身を見る何が容量を使っているか知りたいとき

/btw は、公式の commands のページでは「会話に加えずに、現在のセッションについて脇の質問をする」と説明され、interactive-mode のページには「質問と答えは会話の履歴に入らない」とあります。Ctrl+;(macOS は Cmd+;)で脇のチャットを開けるのは、公式の desktop のページの記述で、このショートカットは Code タブのものです。CLI のキーボード操作の表には、この行は見つかりませんでした。


考えてみよう

  1. 手元で Claude Code が方向のずれたまま走ったことはありますか。そのとき、どのサイン(計画にないファイル、同じコマンドの繰り返し、関係のない調査)が出ていましたか。
  2. /compact に「残すこと」を書くなら、いま取り組んでいる作業では何を書きますか。
  3. ansible-playbook でサーバーの設定を変えた後に /rewind すると、何が戻り、何が戻りませんか。作業の前に何をしておくべきでしょうか。
  4. /goal の条件を「完了の状態」で書くなら、いまの作業ではどう書きますか。評価役が会話の記録だけで確かめられる形になっているでしょうか。

ヒント:「巻き戻しで戻らないもの」と「/goal」の節を見直してください。


まとめ

  • Esc で止めて、方向を直す。2回直してだめなら、分かったことを入れたプロンプトで /clear してやり直す
  • /compact には残すことを書く。CLAUDE.md の方針で要約を指定することもできる
  • 巻き戻し(/rewind、Esc 2回)は会話と、ファイル編集の機能で変えたものだけを戻す
  • Bash のコマンドの変更は戻らない。作業の前に Git でコミットし、本番の前に --check --diff で確かめる
  • /goal は、会話に現れるもので確かめられる完了の条件を渡して、続けさせる
  • 並行作業は worktree で、同じフォルダーの取り合いを避ける

この回の内容は、第9回の演習の手順4(巻き戻し)と「早く終わったら」(/goal)で試せます。

次回は、CLAUDE.md を扱います。「設定ではなく指示」であること、置き場所、書くこと・書かないこと、守られる書き方を見ていきます。


連載「Claude Code実践入門」全9回

  1. 任せる前に知っておくこと
  2. 作業範囲を決める
  3. 走らせながら操縦する(この記事)
  4. CLAUDE.mdを育てる
  5. 権限モードとauto mode
  6. allow・ask・denyのルールと設定ファイル
  7. 検証で終わらせる
  8. 演習(前編):準備から実装と検証まで
  9. 演習(後編):巻き戻し・差分・権限と振り返り

コメント

タイトルとURLをコピーしました