原文(日本語に翻訳)
WorktreeCreate と WorktreeRemove プラグインフックが黙って無視されていた問題を修正
原文(英語)
Fixed WorktreeCreate and WorktreeRemove plugin hooks being silently ignored
概要
WorktreeCreate と WorktreeRemove のプラグインフックを定義しても、それらが呼び出されずに無視されていました。エラーも表示されないため問題の発見が困難でした。この修正により、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の作成・削除処理自体は継続します(デフォルト動作)