> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# ワークツリー

> 並列のCascadeタスク向けにgit worktreeを自動で設定します

Devin Desktopは、メインのワークスペースに干渉することなくCascadeタスクを並列で実行できるよう、git worktreeの使用をサポートしています。

ワークツリーを使用すると、各Cascade conversationに専用のセッションが割り当てられるため、Cascadeはメインのワークスペースに干渉することなく、編集やコードのbuild、テストを行えます。

<div id="basic-worktree-usage">
  ## ワークツリーの基本的な使い方
</div>

ワークツリーを使い始める最も簡単な方法は、Cascade の入力欄の右下にある「Worktree」モードに切り替えることです。

<Frame>
  <img style={{ maxHeight: "500px" }} src="https://mintcdn.com/cognitionai/WE51TvKjsiyk1ZHl/desktop/assets/windsurf/worktree-toggle.png?fit=max&auto=format&n=WE51TvKjsiyk1ZHl&q=85&s=c360271ef16d55e236aa5a0c3f4844f6" width="873" height="224" data-path="desktop/assets/windsurf/worktree-toggle.png" />
</Frame>

<Note>
  現在、ワークツリーに切り替えられるのは Cascade セッションの開始時のみです。開始した会話を別のワークツリーに移すことはできません。
</Note>

Cascade がワークツリー内のファイルに変更を加えたら、「merge」をクリックして、その変更をメインのワークスペースに取り込めます。

<Frame>
  <img style={{ maxHeight: "500px" }} src="https://mintcdn.com/cognitionai/WE51TvKjsiyk1ZHl/desktop/assets/windsurf/worktree-merge.png?fit=max&auto=format&n=WE51TvKjsiyk1ZHl&q=85&s=574816f7a9d6a1b49b6d931c2ede8051" width="724" height="98" data-path="desktop/assets/windsurf/worktree-merge.png" />
</Frame>

<div id="location">
  ## 場所
</div>

ワークツリーは、`~/.windsurf/worktrees/<repo_name>` 配下でリポジトリ名ごとに整理されます。

各ワークツリーには、ランダムな一意の名前が付けられます。

アクティブなワークツリーの一覧を確認するには、リポジトリのディレクトリ内で `git worktree list` を実行できます。

<Warning>
  ワークツリーは元のプロジェクトとは別のディレクトリに配置されるため、**相対パスに依存するビルドシステムやツール** (たとえば `../shared-lib` への参照、シンボリックリンクされた依存関係、またはパスで解決されるモノレポのソース依存関係) は、ワークツリー内では正常に動作しない場合があります。プロジェクトでリポジトリルートの外側を指す相対パスを利用している場合は、必要なシンボリックリンクを作成するか、必要なファイルを想定された場所にコピーするように [`post_setup_worktree` フック](./worktrees#setup-hook) を設定してください。
</Warning>

<div id="setup-hook">
  ## セットアップフック
</div>

各ワークツリーにはリポジトリのファイル一式が含まれますが、`.env` ファイルや、バージョン管理されていないその他のパッケージは含まれません。

各ワークツリーに追加のファイルやパッケージを含めたい場合は、`post_setup_worktree` [フック](./hooks#post_setup_worktree) を利用して、それらをワークツリーのディレクトリにコピーできます。

`post_setup_worktree` フックは、各ワークツリーの作成と設定が完了した後に実行されます。実行場所は、新しい **ワークツリー** ディレクトリ内です。

`$ROOT_WORKSPACE_PATH` 環境変数は元のワークスペースのパスを指しており、元のリポジトリを基準にファイルへアクセスしたり、コマンドを実行したりする際に利用できます。

<div id="example">
  ### 例
</div>

新しいワークツリーが作成されたときに、環境ファイルをコピーして依存関係をインストールします。

**設定** (`.windsurf/hooks.json` 内) :

```json theme={null}
{
  "hooks": {
    "post_setup_worktree": [
      {
        "command": "bash $ROOT_WORKSPACE_PATH/hooks/setup_worktree.sh",
        "show_output": true
      }
    ]
  }
}
```

**スクリプト** (`hooks/setup_worktree.sh`):

```bash theme={null}
#!/bin/bash

# 元のworkspaceからenvironmentファイルをコピーする
if [ -f "$ROOT_WORKSPACE_PATH/.env" ]; then
    cp "$ROOT_WORKSPACE_PATH/.env" .env
    echo "Copied .env file"
fi

if [ -f "$ROOT_WORKSPACE_PATH/.env.local" ]; then
    cp "$ROOT_WORKSPACE_PATH/.env.local" .env.local
    echo "Copied .env.local file"
fi

# dependenciesをインストールする
if [ -f "package.json" ]; then
    npm install
    echo "Installed npm dependencies"
fi

exit 0
```

このフックにより、各ワークツリーで必要な環境設定が行われ、依存関係が自動的にインストールされます。

<div id="cleanup">
  ## クリーンアップ
</div>

Devin Desktop は、ディスク使用量が過剰になるのを防ぐため、新しい ワークツリー を作成する際に古い ワークツリー を自動的にクリーンアップします。各ワークスペースでは、最大 **20** 個の ワークツリー を保持できます。

ワークツリー は最後にアクセスされた日時に基づいてクリーンアップされ、最も古いものから順に削除されます。このクリーンアップはワークスペースごとに行われるため、異なるリポジトリの ワークツリー は互いに独立した状態に保たれます。

また、Cascade の会話を手動で削除すると、Devin Desktop は関連する ワークツリー も自動的に削除します。

<div id="source-control-panel">
  ## ソース管理パネル
</div>

デフォルトでは、Devin Desktop は Cascade によって作成されたワークツリーを SCM パネルに表示しません。
この動作を変更して SCM パネルにワークツリーを表示するには、設定で `git.showWindsurfWorktrees` を `true` に設定します。
