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

# ワークツリー

> 並列 Cascade タスク用に git worktree を自動設定する

Windsurf は git worktree を使用して、メインのワークスペースに影響を与えることなく Cascade タスクを並列で実行できます。

ワークツリーを使用すると、各 Cascade での会話ごとに独立したセッションが割り当てられ、Cascade がメインのワークスペースに干渉することなく、コードの編集やビルド、テストを行えるようになります。

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

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

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

<Note>
  現在のところ、Cascade セッションの開始時にのみ worktree を切り替えることができます。会話は開始後に別の worktree に移動することはできません。
</Note>

Cascade が worktree 内のファイルに変更を加えた後、「merge」をクリックして、その変更をメインのワークスペースに取り込むことができます。

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

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

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

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

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

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

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

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

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

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

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

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

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

**設定**（`.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

# 元のワークスペースから環境ファイルをコピー
if [ -f "$ROOT_WORKSPACE_PATH/.env" ]; then
    cp "$ROOT_WORKSPACE_PATH/.env" .env
    echo ".envファイルをコピーしました"
fi

if [ -f "$ROOT_WORKSPACE_PATH/.env.local" ]; then
    cp "$ROOT_WORKSPACE_PATH/.env.local" .env.local
    echo ".env.localファイルをコピーしました"
fi

# 依存関係をインストール
if [ -f "package.json" ]; then
    npm install
    echo "npm依存関係をインストールしました"
fi

exit 0
```

このフックにより、各ワークツリーで必要な環境構成と依存関係が自動的にセットアップされます。

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

Windsurf は、新しい worktree を作成する際に、古い worktree を自動的にクリーンアップして、ディスク使用量が増えすぎないようにします。各ワークスペースには最大 **20** 個まで worktree を作成できます。

worktree は最後にアクセスされた時刻に基づいてクリーンアップされ、最も古いものから順に削除されます。このクリーンアップはワークスペース単位で行われるため、異なるリポジトリの worktree が互いに影響しないようになっています。

さらに、Cascade の会話を手動で削除した場合、Windsurf は関連付けられた worktree を自動的に削除します。

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

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