原文(日本語に翻訳)
hooksに once: true 設定のサポートを追加しました
原文(英語)
Added support for once: true config for hooks
概要
Claude Code v2.1.0で導入された、フックの実行回数を制御する設定オプションです。once: true を設定したフックは、セッション中に最初の1回のみ実行され、2回目以降は自動的にスキップされます。セッション開始時の初期化処理、ワンタイムの環境チェック、初回のみ必要な通知など、重複実行を避けたい処理に最適です。これにより、パフォーマンスへの影響を最小限に抑えつつ、必要な初期化を確実に実行できます。
基本的な使い方
hooks設定で once: true を指定します。
json
// ~/.claude/settings.json または .claude/settings.json
{
"hooks": {
"PreToolUse": [
{
"once": true,
"command": "echo 'Session initialized' >> /tmp/claude-session.log"
}
]
}
}実践例
セッション開始時の環境チェック
最初のツール使用時のみ、環境の健全性をチェックします。
json
{
"hooks": {
"PreToolUse": [
{
"once": true,
"command": "bash -c 'git --version && node --version && echo Environment check passed'"
}
]
}
}bash
claude
> ファイルを読んで
# 初回実行時:
# git version 2.39.0
# v18.16.0
# Environment check passed
# (ファイル読み取り実行)
> 別のファイルも読んで
# 2回目以降: 環境チェックはスキップ
# (ファイル読み取りのみ実行)セッション開始通知
セッション開始時に1回だけ通知を送信します。
json
{
"hooks": {
"PreToolUse": [
{
"once": true,
"command": "osascript -e 'display notification \"Claude Code session started\" with title \"Claude Code\"'"
}
]
}
}プロジェクト情報の初回表示
セッション開始時に、プロジェクトのブランチ情報を1回だけ表示します。
json
{
"hooks": {
"PreToolUse": [
{
"once": true,
"command": "bash -c 'echo \"Current branch: $(git branch --show-current)\" && echo \"Last commit: $(git log -1 --oneline)\"'"
}
]
}
}# セッション開始時(初回ツール使用時):
Current branch: feature/new-api
Last commit: abc1234 Add new endpoint
# 2回目以降のツール使用: 表示なし初回のみGit状態をキャプチャ
セッション開始時のGit状態を記録します。
json
{
"hooks": {
"PreToolUse": [
{
"once": true,
"command": "git status > /tmp/claude-session-git-status.txt && echo 'Initial git status captured'"
}
],
"Stop": [
{
"command": "rm -f /tmp/claude-session-git-status.txt"
}
]
}
}依存関係の初回チェック
セッション開始時に、必要な依存関係がインストールされているか確認します。
json
{
"hooks": {
"PreToolUse": [
{
"once": true,
"command": "bash -c 'if [ ! -d node_modules ]; then echo \"⚠️ Warning: node_modules not found. Run npm install.\"; fi'"
}
]
}
}初回限定の設定読み込み
プロジェクト固有の設定を初回のみ読み込みます。
json
{
"hooks": {
"PreToolUse": [
{
"once": true,
"command": "bash -c 'if [ -f .claude/project-config.sh ]; then source .claude/project-config.sh; echo \"Project config loaded\"; fi'"
}
]
}
}注意点
- この機能は Claude Code v2.1.0(2026年1月7日リリース)で導入されました
once: trueの動作:- セッション(Claude Code起動から終了まで)中に1回のみ実行
- 2回目以降のトリガーでは完全にスキップされる(実行時間ゼロ)
- Claude Codeを再起動すると、カウンターがリセットされる
- 適用可能なフックタイプ:
PreToolUsePostToolUseStop(ただしStopは元々1回のみ実行されるので、once: trueは不要)
- フック設定の形式:json
{ "hooks": { "PreToolUse": [ { "once": true, "command": "your-command-here" }, { "command": "this-runs-every-time" } ] } } - 複数のフックがある場合:
once: trueのフックと通常のフックを混在させることが可能- 実行順序は定義順
once: trueフックがスキップされても、他のフックは実行される
- 初回実行のタイミング:
- PreToolUse: 最初のツール使用時
- PostToolUse: 最初のツール完了時
- パフォーマンスへの影響:
- 重い初期化処理を
once: trueにすることで、2回目以降のオーバーヘッドを削減 - 環境チェックや依存関係チェックに最適
- 重い初期化処理を
- 状態の保持:
onceフラグの状態はメモリ内に保持(ファイルには保存されない)- セッションをまたいで状態を保持したい場合、フック内でファイルマーカーを使用:bash
if [ ! -f /tmp/initialized ]; then # 初期化処理 touch /tmp/initialized fi
- デバッグ:
- フックが実行されたかどうかは、ログファイルへの書き込みで確認可能
--debugフラグでフックの実行状況を確認