コンテンツにスキップ
↑↓移動 ↵開く esc閉じる

Worktree セッション

Worktree セッションは、リポジトリをチェックアウトした独自のコピーと独自ブランチ(git worktree)で実行されます。これにより、並行セッションが互いのファイルを踏み合うことを防げます。片方がリファクタリングし、もう片方がバグ修正をしても、行き来する必要はありません。

作成する

  1. new-worktree ダイアログを開きます。新しいセッションを始めるときに入力欄の上のブランチメニューで 新しいワークツリー… を選ぶか、サイドバーのプロジェクト行にあるワークツリーボタンを使います。
  2. Start from でいずれかを選びます。
    • new branch — ブランチ名を付けます
    • existing branch — すでにあるブランチをチェックアウトします
    • PR or issue — GitHub、GitLab、Gitea、Forgejo、Gerrit、Linear、または拡張機能から 1 つ選びます。ブランチ名はその項目から付けられ(PR の場合はその PR 自身のブランチを、Gerrit の変更の場合は最新のパッチセットを change-<number> にチェックアウトします)、項目は最初のメッセージに添付されます
  3. Based on(新しいブランチの起点。既定ではリモートのデフォルトブランチ(例: origin/main))と Folder name を確認し、必要なときだけ変更します。
  4. 作成します。プロジェクトにセットアップコマンドがある場合は、作成直後に実行されます。

OpenChamber はブランチを作り、フォルダをセットアップし、そこで新しいセッションを開きます。すぐに最初のメッセージを書けます。Todo や Issue またはプルリクエスト から直接開始することもできます。

質問を省きたいときは、同じブランチメニューで クイックワークツリー を選びます。OpenChamber がブランチに仮の名前を付け、新しいセッションをそこに向けます。エージェントがタスクに名前を付けると、ブランチがまだプッシュされていなければ、ブランチ名もタスクに合わせて fix/login-timeout のように変更します。

自分のツールでワークツリーを作成する

新しい worktree は毎回まっさらなチェックアウトなので、大きなプロジェクトでは何かを動かす前に依存関係のインストールで数分かかることがあります。コピーオンライト(copy-on-write)のツールを使うと、すでにあるチェックアウトのクローンとして worktree を作れます。node_modules、.venv、ビルド成果物もそのまま引き継がれ、変更されるまでディスク容量を追加で使いません。

使うには、プロジェクトの設定を開いて ワークツリー に移動し、ワークツリーの作成 にツールのコマンドを入力します。OpenChamber は先にブランチを作り、次の 2 つの環境変数を設定してプロジェクトのルートでコマンドを実行します。

  • $WORKTREE_PATH は worktree を作成するフォルダです。まだ存在しません。
  • $WORKTREE_BRANCH はそこでチェックアウトするブランチです。すでに存在します。

次のコマンドは、コマンドを設定していないときに OpenChamber が行う処理と同じです。git worktree add の部分をツールのコマンドに置き換えてください。

Terminal window
git worktree add "$WORKTREE_PATH" "$WORKTREE_BRANCH"

作成された worktree はほかと同じようにサイドバーに表示され、プロジェクトのセットアップコマンドもその中で実行されます。ツールがチェックアウトを別の場所に置き、$WORKTREE_PATH にリンクを残す場合、OpenChamber は実際のフォルダで作業します。コマンドが失敗すると、OpenChamber はその出力を表示し、自分で作ったブランチを削除します。ツールが worktree をロックしていても、あとから削除できます。

このコマンドはあなた専用です。リポジトリには保存されないので、ツールを持っていないチームメイトは通常の方法で作成し続けます。git に戻すにはフィールドを空にします。他の人のフォークからのプルリクエスト用の worktree は、常に git を使います。

サイドバーでの表示

worktree はサイドバーで 1 行になり、その下に中のすべてのセッションが並びます。プロジェクトの下では、プロジェクトのほかのセッションと一緒に最新のアクティビティ順に並ぶので、さっきまで作業していた worktree は上のほうにあります。行には、エージェントが名前を付けた後はタスク名(それまではそこで最後に作業したセッションのタイトル)、追っているプルリクエストや issue を示す色付きのマーク、そこのセッションが実行中かどうかや新着があるかどうかが表示されます。プルリクエストや issue のために作った worktree は、エージェントがもっと短い名前を付けるまで、その項目のタイトルで表示されます。行にカーソルを合わせるとブランチが表示されます。クリックすると、そこで最後に作業したセッションが開きます。一覧を展開するには、左側のブランチアイコンにカーソルを合わせ、代わりに現れる矢印をクリックします。メニューからは、タスク名の変更、worktree をプロジェクトのフォルダーに入れること、アーカイブ、削除ができます。スマートフォンでは、行の矢印をタップすると一覧が展開され、行を横にスワイプすると、完了にする、タスク名の変更、worktree のアーカイブ、削除ができます。作業が作業中ブロックに入ったり出たりする仕組みは作業中のセッションを参照してください。

リポジトリ内のフォルダーで開いたプロジェクト

repo/ai のようにリポジトリ内のフォルダーでプロジェクトを開いている場合、新しい worktree もそのフォルダーで開きます。新しい worktree のセッションはチェックアウト内の同じフォルダーで始まるため、OpenCode はそこにある設定を見つけられます。リポジトリのルートで開いたプロジェクトは、これまでどおり worktree のルートで始まります。ブランチにそのフォルダーがない場合、セッションは worktree のルートで始まり、OpenChamber がお知らせします。

作業を戻す

作業が良い状態になったら、Git ビューの Integrate を使って、worktree のコミットを別ブランチ(main など)へ取り込みます。変更がコンフリクトした場合は、エージェントに解決を任せることもできます。

片付ける

タスクが終わったら、行のメニューで ワークツリーをアーカイブ を選ぶか、Shift キーを押しながら、行で新規セッションボタンの代わりに表示されるアーカイブボタンをクリックします。OpenChamber が worktree をアーカイブします。フォルダーはなくなり、セッション、コミットしていない変更、ブランチはアーカイブページに残ります。そこでまだ実行中のセッションがあれば、worktree は残ります。

行を完了にしても、作業中から外れるだけです。完了にするたびに、または PR がマージされたときに worktree をアーカイブするには、設定 → セッション → 完了したワークツリー でオンにします。

アーカイブページでは、アーカイブした worktree がそれぞれのプロジェクトの下に並びます。復元 を押すと、worktree がブランチと一緒に戻り、プロジェクトのセットアップコマンドが実行され、変更とセッションも元に戻ります。その worktree のセッションを 1 つ復元しても同じです。node_modules や .env のように git が無視するファイルは残らないため、セットアップコマンドでもう一度用意します。プロジェクトのワークツリーページにも、アーカイブした worktree が表示されます。

worktree を完全に消すには、メニューから削除するか、アーカイブページでアーカイブ済みの worktree を削除します。メニューから削除するときは、ブランチも削除するかどうかを選びます。ローカルと、存在する場合はリモートも対象です。

何かおかしい場合

worktree は、フォルダがなくなった、ブランチが detached 状態になった、merge または rebase が途中で止まった、などの場合に注意が必要になります。OpenChamber はこれらにフラグを付け、修正できるようにします。Worktrees と Git を参照してください。

関連