コンテンツにスキップ

フック

フックを使用すると、Worktreeのライフサイクル中にコマンドを自動的に実行できます。

フック 実行タイミング 作業ディレクトリ
pre_start Worktree作成後 元リポジトリ
post_start Worktree作成後 新しいWorktree
pre_clean Worktree削除前 現在のWorktree
post_clean Worktree削除後 メインリポジトリ
[hooks]
pre_start = ["echo 'Worktreeを準備中...'"]
post_start = [
"pnpm install",
"pnpm db:migrate"
]
pre_clean = ["git stash"]
post_clean = ["echo 'クリーンアップ完了'"]

すべてのフックコマンドで以下の環境変数が利用可能です:

変数 説明
VIBE_WORKTREE_PATH 作成されたWorktreeの絶対パス
VIBE_ORIGIN_PATH 元リポジトリの絶対パス
[hooks]
post_start = [
"echo 'Worktree作成先: $VIBE_WORKTREE_PATH'",
"echo '元リポジトリ: $VIBE_ORIGIN_PATH'"
]

vibeはフック実行中にリアルタイム進捗ツリーを表示します:

✶ Setting up worktree feature/new-ui…
┗ ☒ Pre-start hooks
┗ ☒ npm install
☒ cargo build --release
⠋ Copying files
┗ ⠋ .env.local
☐ node_modules/
状況 標準出力 標準エラー出力
進捗表示が有効 抑制される 常に表示
進捗表示が無効 標準エラーに出力 常に表示
失敗したフック N/A 常に表示

vibe startの場合:

  1. Worktreeが作成される
  2. [submodules] configs = [...]の場合、指定されたサブモジュールが初期化される
  3. 各サブモジュールの信頼済みpre_start、copyルール、post_startがサブモジュールルート基準で実行される
  4. 親のpre_startフックが元リポジトリで実行
  5. 親のファイル/ディレクトリがコピーされる
  6. 親のpost_startフックが新しいWorktreeで実行

vibe cleanの場合:

  1. pre_cleanフックが現在のWorktreeで実行
  2. Worktreeが削除される
  3. post_cleanフックがメインリポジトリで実行
[hooks]
post_start = [
"pnpm install",
"pnpm build"
]
pre_clean = ["git stash --include-untracked"]
[hooks]
post_start = [
"bun install",
"bun run build"
]
pre_clean = ["git stash --include-untracked"]

データベースマイグレーション

Section titled “データベースマイグレーション”
[hooks]
post_start = [
"pnpm install",
"pnpm db:migrate",
"pnpm db:seed"
]
[hooks]
post_start = [
"docker-compose up -d",
"sleep 5",
"pnpm db:migrate"
]
pre_clean = ["docker-compose down"]

直接サブモジュールに独自のsetupファイルやフックがある場合は、ファーストクラスのサブモジュール設定を使用してください:

[submodules]
configs = ["libs/foo"]

これは新しいWorktree内でgit submodule update --init -- libs/fooを実行し、その後libs/foo/.vibe.tomlを通常のtrust store経由で読み込みます。サブモジュールのcopyルールとフックはlibs/foo基準で解決され、親リポジトリのpre_startフックより前に実行されます。

--no-hooksオプションでフックをスキップできます:

Terminal window
vibe start feat/quick-fix --no-hooks

vibeはClaude CodeWorktreeCreateおよびWorktreeRemoveフックと連携できます。これにより、Claude Codeのデフォルトのgit worktree add動作をvibeのフルワークフロー(フック、CoWファイルコピー、設定を含む)に置き換えます。

Claude Codeのsettings.jsonに以下を追加してください:

{
"hooks": {
"WorktreeCreate": [
{
"hooks": [
{
"type": "command",
"command": "vibe start --claude-code-worktree-hook --quiet 2>/dev/null"
}
]
}
],
"WorktreeRemove": [
{
"hooks": [
{
"type": "command",
"command": "vibe clean --claude-code-worktree-hook --force 2>/dev/null"
}
]
}
]
}
}

Claude CodeがWorktreeを作成する場合(自然言語、isolation: "worktree"、または/worktreeコマンド経由)、vibeがフルライフサイクルを管理します:

WorktreeCreate:

  1. stdinからWorktree名を読み取り(Claude Codeフックプロトコル)
  2. git Worktreeを作成
  3. [submodules] configs = [...]の場合、指定されたサブモジュールを初期化し、信頼済みsetupを実行
  4. 元リポジトリで親のpre_startフックを実行
  5. CoWを使用して親のファイル/ディレクトリをコピー
  6. 新しいWorktreeで親のpost_startフックを実行(例:pnpm install
  7. Claude Code向けにWorktreeパスをstdoutに出力

WorktreeRemove:

  1. stdinからWorktreeパスを読み取り(Claude Codeフックプロトコル)
  2. Worktreeでpre_cleanフックを実行
  3. git Worktreeを削除
  4. メインリポジトリでpost_cleanフックを実行

この連携がない場合、Claude CodeのWorktree作成はgit worktree addのみを実行します。vibeのフックを使用することで、以下が自動的に行われます:

  • 依存関係の自動インストールpnpm installbun installなど)
  • CoWファイルコピー.envnode_modulesなど)
  • カスタムセットアップスクリプト(データベースマイグレーション、Dockerコンテナなど)
  • Worktree削除時のクリーンアップフック