原文(日本語に翻訳)
PostToolUse および PostToolUseFailure フックの入力に duration_ms(権限プロンプトとPreToolUseフックを除くツール実行時間)が含まれるようになった
原文(英語)
Hooks: PostToolUse and PostToolUseFailure hook inputs now include duration_ms (tool execution time, excluding permission prompts and PreToolUse hooks)
概要
PostToolUse と PostToolUseFailure フックの入力データに duration_ms フィールドが追加され、ツールの実行時間をミリ秒単位で取得できるようになった。この値は権限確認プロンプトや PreToolUse フックの処理時間を除いた純粋なツール実行時間を表す。パフォーマンスモニタリングや遅いツールの検出に活用できる。
基本的な使い方
PostToolUse フックで duration_ms を受け取る例:
python
#!/usr/bin/env python3
import json
import sys
data = json.load(sys.stdin)
tool_name = data["tool_name"]
duration_ms = data["duration_ms"]
print(f"ツール: {tool_name}, 実行時間: {duration_ms}ms", file=sys.stderr)実践例
ツール実行時間のログを記録する
python
#!/usr/bin/env python3
# .claude/hooks/log-tool-duration.py
import json
import sys
import datetime
data = json.load(sys.stdin)
log_entry = {
"timestamp": datetime.datetime.now().isoformat(),
"tool": data["tool_name"],
"duration_ms": data["duration_ms"],
"success": data["hook_event_name"] == "PostToolUse"
}
with open("/tmp/claude-tool-timing.log", "a") as f:
f.write(json.dumps(log_entry) + "\n")設定ファイルへの登録:
json
// .claude/settings.json
{
"hooks": {
"PostToolUse": [
{
"matcher": ".*",
"hooks": [
{
"type": "command",
"command": "python3 .claude/hooks/log-tool-duration.py"
}
]
}
]
}
}遅いツール実行を警告する
python
#!/usr/bin/env python3
# .claude/hooks/warn-slow-tools.py
import json
import sys
SLOW_THRESHOLD_MS = 5000 # 5秒以上を「遅い」とみなす
data = json.load(sys.stdin)
duration_ms = data["duration_ms"]
tool_name = data["tool_name"]
if duration_ms > SLOW_THRESHOLD_MS:
print(json.dumps({
"decision": "block",
"reason": f"{tool_name}の実行に{duration_ms}msかかりました。パフォーマンスを確認してください。"
}))失敗したツールの実行時間を追跡する
python
#!/usr/bin/env python3
# .claude/hooks/track-failures.py
import json
import sys
data = json.load(sys.stdin)
# PostToolUseFailure イベントでは失敗情報も含まれる
if data["hook_event_name"] == "PostToolUseFailure":
print(f"[失敗] {data['tool_name']}: {data['duration_ms']}ms後に失敗",
file=sys.stderr)PostToolUseFailure フックの入力例:
json
{
"hook_event_name": "PostToolUseFailure",
"tool_name": "Bash",
"duration_ms": 1234,
"tool_input": {
"command": "some-failing-command"
}
}注意点
duration_msは純粋なツール実行時間のみを計測する(権限確認プロンプトやPreToolUseフックの時間は含まれない)- 同じツールでも入力内容や環境によって実行時間は大きく変わる
PostToolUseFailureフックでも同様にduration_msが利用可能- ログファイルへの書き込みはパフォーマンスに影響する可能性があるため、重要なツールのみに適用することを検討する