原文(日本語に翻訳)
リアクティブな環境管理のための CwdChanged および FileChanged フックイベントを追加(direnv との連携など)
原文(英語)
Added CwdChanged and FileChanged hook events for reactive environment management (e.g., direnv)
概要
CwdChanged はカレントディレクトリが変更されたとき、FileChanged はファイルが変更されたときに発火する新しいフックイベントです。これらを使うことで、ディレクトリ移動時に環境変数を自動的に再読み込みしたり(direnv との連携)、ファイル変更に応じて外部ツールを起動したりといったリアクティブな環境管理が可能になります。
基本的な使い方
~/.claude/settings.json の hooks セクションに設定します:
json
{
"hooks": {
"CwdChanged": [
{
"hooks": [
{
"type": "command",
"command": "direnv export json"
}
]
}
],
"FileChanged": [
{
"hooks": [
{
"type": "command",
"command": "echo 'ファイルが変更されました'"
}
]
}
]
}
}実践例
direnv との連携(CwdChanged)
ディレクトリ移動時に .envrc を自動的に読み込む:
json
{
"hooks": {
"CwdChanged": [
{
"hooks": [
{
"type": "command",
"command": "direnv allow . && direnv export bash"
}
]
}
]
}
}これにより、Claude Code がディレクトリを移動するたびに、そのディレクトリの .envrc が自動的に適用されます。
プロジェクト固有のツールチェーン切り替え(CwdChanged)
Node.js バージョン管理ツール(nvm/volta)との連携:
json
{
"hooks": {
"CwdChanged": [
{
"hooks": [
{
"type": "command",
"command": "if [ -f .nvmrc ]; then nvm use; fi"
}
]
}
]
}
}ファイル変更時のキャッシュクリア(FileChanged)
設定ファイルが変更されたときにキャッシュを無効化する:
json
{
"hooks": {
"FileChanged": [
{
"matcher": "*.config.js",
"hooks": [
{
"type": "command",
"command": "npm run cache:clear"
}
]
}
]
}
}ログ記録(CwdChanged)
作業ディレクトリの変更を記録する:
json
{
"hooks": {
"CwdChanged": [
{
"hooks": [
{
"type": "command",
"command": "echo \"$(date): CWD changed to $(pwd)\" >> ~/.claude/cwd-log.txt"
}
]
}
]
}
}注意点
CwdChangedは Claude Code がcd相当の操作を行うたびに発火しますFileChangedはツール(Write、Edit など)でファイルが書き込まれた後に発火します- フックコマンドが失敗しても Claude Code の動作は継続されます(ブロッキングではない)
- 頻繁に発火するイベントには軽量なコマンドを設定することを推奨します