--fork-session(フォークセッション)

起動オプション
--fork-session
フォークセッション
Claude Code の起動時に付ける追加スイッチで、過去のセッションをコピーして別IDで開くためのもの。元のセッションは picker にそのまま残る。単独では動かず、必ず --resume か --continue とセットで叩く前提

既存セッションを残したまま別アプローチを試したい人向け

過去の会話を残したまま、そこから別アプローチを試したい場面で叩く。元の流れを上書きせずに枝分かれさせて、後で両方を picker から比較したい時に使う。たとえば料理ブログの記事案を、短文版と長文版で並走させて最終的にどちらを採用するか選びたい時など

過去のセッションをもう一度開いて、続きから別の方向に書き換えてみたい場面があります。ただ、そのまま続きをやると元の流れが上書きされて、戻れなくなる。--fork-session(フォークセッション)は、その悩みを構造的に解く起動時の追加指定です。

本体は単独で動きません。--resume もしくは --continue とセットで叩く前提で、過去の会話をコピーした上で別のセッションIDを発番してくれる、いわば「枝分かれ専用の追加スイッチ」です。元は picker に丸ごと残ります。

噛み砕くと

Google Docs の「コピーを作成」を、ファイルではなく会話に対してやる動きに近いです。元の会話はそのまま残して、コピーされた方に乗り換える。乗り換えた先で何を喋っても、元には1文字も反映されません。

分岐させたいタイミングは、たいてい「元の答えも捨てたくないけど、別の答えも見てみたい」みたいな実験のときです。元を上書きしないので、後で picker から両方を見比べられます。

大事な前提:単独では何も起きない、必ず resume か continue とセット

公式ドキュメントは use with --resume or --continue と明記しています。つまり claude --fork-session だけで叩いても何も起きません。「どのセッションをコピーするか」を --resume または --continue で先に指定しないと、コピー元がそもそも存在しないからです。

「料理ブログの記事案を、短文版と長文版で並走させる」を例に、実際の手順を見る

料理ブログを始めて、最初の1本を Claude Code に下書きしてもらった状況を想定します。読了2分の短文版を出してもらった後、「やっぱり長文版も比較したい」と思った。ただし短文版の流れは残しておきたい。ここで --fork-session の出番です。

ステップ1:元のセッションを名前付きで再開する

まず、料理ブログ用のセッションをすでに recipe-001 という名前で保存してある前提で、続きから開きます。

$ claude --resume recipe-001 "下書きをレビューして"

Claude が下書きを読み、読了2分の凝縮した短文版を提案してきました。良さそうですが、5分でしっかり手順を読ませる長文版も比較したい欲が出てきます。

ステップ2:このまま続けると元が上書きされる、と気づく

同じセッションで「もっと詳細な手順を含めた長文版にして」と頼むと、短文版を出してくれた会話の続きとして履歴が積み上がっていきます。後から「やっぱり短文版に戻したい」と思っても、その時点では短文版の文脈はもう奥のほうに埋もれてしまう。

ここで分岐させたい、と判断します。

ステップ3:fork して別のセッションに乗り換える

セッションを抜けて、コマンドラインから次のように叩きます。

$ claude --continue --fork-session

--continue は「直近のセッションを開く」、--fork-session は「ただし開くときにコピーして別IDを発番する」という意味です。起動直後、新しいセッションIDが標準出力に表示されます。手元にメモしておくと、後で picker から探す手間が減ります。

なお、セッションを抜けたくない場合は、セッション内から /branch <名前> を叩く方法もあります。これは --fork-session と対の関係にある同じ機能の2つ目の入り口で、公式ドキュメントも「セッション内なら /branch、コマンドラインからなら --fork-session」と並記しています。今回はステップ2でいったんセッションを抜けているので --fork-session を使っていますが、作業途中で思いついたなら /branch の方が手数が少ないです。

ステップ4:fork 先で別アプローチを試す

新しいセッション(コピー)の中で、長文版を依頼します。

> もっと詳細な手順を含めた長文版にして。
  読了5分、各工程に分量と火加減を明記、写真キャプション付きで。

Claude が長文版を出してきます。ここでの会話は全て fork 先に書き込まれ、元の recipe-001 には1文字も影響しません。

ステップ5:元の短文版セッションが残っていることを確認

別の画面で claude --resume を叩いて picker を開くと、recipe-001 が変わらず存在しているはずです。fork で作られたセッションは元の下にグループ化されていて、矢印キーの「→」で展開すると見えます。

つまり、短文版と長文版が両方手元に残り、後で並べて比較できる、という状態が出来上がりました。

ステップ6:ここで初心者が踏みやすい勘違いを1つ

fork 先で短文版を改善しても、元の recipe-001 側の短文版には反映されません。fork は「コピーして乗り換える」だけで、双方向の同期はない。元も育てたいなら、元に戻って別途編集する必要があります。

つまり --fork-session は何をしてくれるのか

  • やってくれる:過去のセッションをコピーして別IDで開く。元はそのまま残る。コピー後の会話は元に伝播しない
  • やってくれない:単独起動。--resume--continue と必ずセット。fork 元と fork 先の双方向同期もしないし、許可した権限の引き継ぎもしない
  • 意味が薄い場面:元の流れを残す必要がないとき。普通に --resume--continue だけで続ければ十分。まっさらな新規セッションで始めたいときも、fork ではなく claude 単独起動か --session-id で新規発番する方が筋

使いどころ3シナリオ(具体題材で再現)

シナリオ1:レシピ記事のリライト方針を2つ並走させたいとき

料理ブログで「キーマカレーの作り方」を書いたあと、SNS向けの2分版と検索流入向けの5分版で別ルートのリライトを試したい場面。元の素のテキストは recipe-keema に残したまま、claude --resume recipe-keema --fork-session で2分版ブランチに乗り換え、別端末で同じく fork して5分版ブランチを進める。両方を picker から行き来して、最終的にどちらを採用するか比較できます。

シナリオ2:副業の家計簿アプリで、UI案 A と B を別軸で深掘りしたいとき

家計簿アプリの画面構成を Claude Code に相談していて、A案のカード型表示と B案のリスト型表示のどちらでも詰めたい場面。元のセッション budget-app でひと通り議論した時点で fork し、片方は A案のコンポーネント設計、もう片方は B案のコンポーネント設計に専念させる。同じスタート地点から枝分かれするので、議論の前提を共有できたまま比較できます。

シナリオ3:旅行プランで「節約ルート」と「贅沢ルート」を並べて選びたいとき

3泊4日の京都旅行プランを Claude Code に相談していて、ベースの行き先候補や移動手段までは固まった状況を想定します。ここから先を「予算3万円の節約ルート」と「予算8万円の贅沢ルート」で別々に詰めて、後で比較したい。元のセッションで --fork-session をかけて節約ルート専用の枝に乗り換え、別端末で同じく fork して贅沢ルート専用の枝を作る。両方できあがった時点で picker から並べて、家族と相談しながらどちらを採用するか決められます。

初心者が踏みやすい落とし穴

  • 単独起動では何も起きないclaude --fork-session だけ叩いてもエラーにならず普通に新規セッションが立つだけで、何もコピーされない。必ず --resume--continue とセットで叩く。公式ドキュメントが use with --resume or --continue と明記している通り
  • 権限の承認は引き継がれない。元のセッションで「このセッションに限り許可」で通したツールの権限は、fork 先では再度承認が必要。自動化で --allowedTools を指定していた場合、fork 先でも同じ指定を渡す必要がある(公式ドキュメント明記)
  • fork なしで同じセッションを2画面から開くと、会話が混ざる。並列で実験したいなら必ず fork する。claude --resume recipe-001 を2端末から同時に叩くと、両方の入出力が同じ履歴ファイルに織り交ぜられて、後から読み返したとき意味不明になる(公式ドキュメント明記)
  • fork 元と fork 先は完全独立で、双方向の同期はない。fork 先で良い案が出ても、元には自動で反映されない。両方育てたいなら別途、元側にも書き戻す手間が必要
  • fork 直後の新しいセッションIDをメモし損ねがち。起動直後に表示されるので、立ち上がってすぐコピーしておくと、後で picker から探す手間が省ける。名前を付けたいなら /rename でその場で命名できる
  • session picker で fork 系はグループ化されて隠れている。デフォルト表示では元のセッションしか見えない。fork した分は元の下にぶら下がっていて、矢印キー「→」で展開しないと出てこない
  • 新規セッションを始めたいのに fork で済ませると意味がズレる。「過去会話のコピーを枝分かれさせる」のが fork の役割で、まっさら新規が欲しいなら claude 単独起動か、IDを指定したいなら --session-id を使うのが筋
  • 巻き戻し(rewind)と混同しがち/rewind は同一セッションの中で過去のメッセージまで時間を巻き戻す動きで、別セッションは作らない。fork は別セッションを新規に作るので、用途が全く違う
  • セッション中に分岐したいなら /branch の方が手軽--fork-session はセッションを抜けてコマンドラインから叩く必要がある。作業の途中で「今の地点から別アプローチを試したい」と思ったときは、セッションを抜けずにそのまま /branch <名前> を打つ方が速い。--fork-session は「すでに閉じたセッションを再開しながら分岐させたい」場面向き(公式ドキュメントが /branch--fork-session を対称な2手段として並記している)

書き方

claude --resume <セッション名orID> --fork-session
claude --continue --fork-session

やってみるとこうなる

入力

claude --continue --fork-session

出力例

直近のセッションをコピーした新しいセッションが起動し、新しいセッションIDが標準出力に表示される。元のセッションは picker に変化なく残り、fork で作られた新セッションは元の下にグループ化される(picker で矢印キー「→」を押すと展開して見える)。fork 先の会話は元に一切伝播しない。

このページに出てきた言葉

セッション
Claude Code との1回の会話のかたまり。プロジェクトのフォルダごとに保存されていて、終了しても次回 <code>--resume</code> や <code>--continue</code> で続きから戻れる
セッションID
1つのセッションに割り当てられる固有の識別子。fork すると新しいIDが自動で発番されて、標準出力に出る
session picker
<code>claude --resume</code> で開く選択画面。過去のセッション一覧がずらっと並んで、矢印キーで選べる
fork(フォーク)
プログラミングの世界で「コピーして枝分かれさせる」動作の呼び名。元を残してコピーを作る発想
--resume
過去のセッションを名前やIDで指定して再開する追加スイッチ。何もつけずに <code>claude --resume</code> だけ叩くと、選択画面が開く
--continue
今いるフォルダで一番最近のセッションを、選択画面を出さずにそのまま再開する追加スイッチ
/branch
セッションの中から叩く分岐コマンド。<code>--fork-session</code> と同じ機能を、セッション内側から呼ぶための入り口
標準出力
コマンドを叩いた直後に画面に流れてくる文字情報のこと

関連項目

公式ドキュメント

https://code.claude.com/docs/en/sessions#branch-a-session

-

← 戻る