Skip to content

原文(日本語に翻訳)

WorktreeCreateWorktreeRemove プラグインフックが黙って無視されていた問題を修正

原文(英語)

Fixed WorktreeCreate and WorktreeRemove plugin hooks being silently ignored

概要

WorktreeCreateWorktreeRemove のプラグインフックを定義しても、それらが呼び出されずに無視されていました。エラーも表示されないため問題の発見が困難でした。この修正により、worktreeの作成・削除時にプラグインフックが正しくトリガーされるようになります。

基本的な使い方

javascript
// プラグインでworktreeフックを定義
module.exports = {
  hooks: {
    WorktreeCreate: async (event) => {
      // worktree作成時の処理
      console.log(`Worktree作成: ${event.path}`);
    },
    WorktreeRemove: async (event) => {
      // worktree削除時の処理
      console.log(`Worktree削除: ${event.path}`);
    }
  }
};

実践例

Worktree作成時の自動セットアップ

javascript
// プラグイン: worktree作成時に環境をセットアップ
module.exports = {
  hooks: {
    WorktreeCreate: async (event) => {
      const { path, branch } = event;

      // 環境変数ファイルのコピー
      await fs.copyFile('.env.example', `${path}/.env`);

      // ログに記録
      await appendLog(`Worktree "${branch}" を作成: ${path}`);

      console.log(`Worktree "${branch}" のセットアップ完了`);
    }
  }
};

Worktree削除時のクリーンアップ

javascript
// プラグイン: worktree削除時にリソースを解放
module.exports = {
  hooks: {
    WorktreeRemove: async (event) => {
      const { path, branch } = event;

      // 一時ファイルの削除
      await fs.rm(`${path}/tmp`, { recursive: true, force: true });

      // ログに記録
      await appendLog(`Worktree "${branch}" を ${new Date().toISOString()} に削除`);
    }
  }
};

Worktreeライフサイクルの追跡

javascript
// 作成・削除のイベントを記録して分析
module.exports = {
  hooks: {
    WorktreeCreate: async (event) => {
      await metrics.record('worktree.created', { branch: event.branch });
    },
    WorktreeRemove: async (event) => {
      await metrics.record('worktree.removed', { branch: event.branch });
    }
  }
};

注意点

  • 修正前は、フックが定義されていてもエラーなく無視されていたため、デバッグが困難でした
  • v2.1.69以降では、フックが正しく呼び出されることを確認できます
  • フック内でエラーが発生した場合、worktreeの作成・削除処理自体は継続します(デフォルト動作)

関連情報