Skip to content

原文(日本語に翻訳)

設定の耐障害性を改善しました:settings.json内の認識されないフックイベント名が、ファイル全体を無視する原因にならなくなりました。

原文(英語)

Improved settings resilience: an unrecognized hook event name in settings.json no longer causes the entire file to be ignored

概要

以前は、settings.jsonに認識されないフックイベント名が含まれていると、ファイル全体が無視されるという問題がありました。このアップデートにより、未知のフックイベント名があっても他の設定が正しく読み込まれるようになりました。これにより、新旧バージョン間での設定ファイルの互換性が向上し、誤ったフック名が他の重要な設定に影響を与えないようになります。

基本的な使い方

json
// settings.json
{
  "theme": "dark",
  "hooks": {
    // 認識されないイベント名があっても...
    "UnknownFutureEvent": [
      {
        "command": "echo 'unknown hook'"
      }
    ],
    // ...他の有効な設定は正常に機能する
    "PostToolUse": [
      {
        "matcher": "Bash",
        "command": "echo 'bash executed'"
      }
    ]
  }
}

実践例

複数バージョン対応の設定ファイル

json
// .claude/settings.json
// 新旧バージョンのClaude Codeで共有できる設定ファイル
{
  "theme": "dark",
  "model": "claude-sonnet-4-5",
  "hooks": {
    // v2.1.101以降でサポートされる新しいイベント
    "OnSessionStart": [
      {
        "command": "echo 'Session started at $(date)' >> session.log"
      }
    ],
    // 従来のバージョンでも動作するイベント
    "PostToolUse": [
      {
        "matcher": "Write",
        "command": "echo 'File written: $CLAUDE_TOOL_INPUT_FILE_PATH'"
      }
    ],
    // 実験的なイベント(認識されない場合もある)
    "ExperimentalHook": [
      {
        "command": "echo 'experimental'"
      }
    ]
  }
}

チーム共有の設定ファイル管理

bash
# チームで設定ファイルを共有する場合のベストプラクティス

# 設定ファイルの検証スクリプト
#!/bin/bash
validate_settings() {
  local settings_file="${1:-.claude/settings.json}"
  
  # JSONの構文チェック
  if ! python3 -c "import json; json.load(open('$settings_file'))" 2>/dev/null; then
    echo "エラー: 設定ファイルのJSON形式が無効です"
    return 1
  fi
  
  echo "設定ファイルのJSON形式は有効です"
  echo "注意: 認識されないフックイベント名は無視されますが、"
  echo "      他の設定は正常に機能します"
  return 0
}

validate_settings

設定ファイルのグレースフルデグラデーション

json
// マネージド設定環境での設定例
// 管理者が追加した設定が古いクライアントでも壊れない
{
  "permissions": {
    "allow": ["Bash(git *)", "Read", "Write"]
  },
  "hooks": {
    // 新しいバージョンのみ対応のフック
    "BeforePermissionCheck": [
      {
        "command": "/usr/local/bin/audit-tool --log"
      }
    ],
    // 旧バージョンでも動作するフック
    "Stop": [
      {
        "command": "echo 'Session ended' >> /var/log/claude.log"
      }
    ]
  },
  "env": {
    "TEAM_ID": "engineering-team-1"
  }
}

設定デバッグの方法

bash
# 設定ファイルが正しく読み込まれているか確認
claude /config

# 特定のフックが機能しているか確認
# 認識されないフック名の場合、警告が表示される(ファイル全体は無視されない)

# ログを確認してフックの実行状況を把握
cat ~/.claude/logs/*.log | grep "hook"

注意点

  • 認識されないフックイベント名は無視されますが、警告が表示される場合があります
  • 設定ファイル全体が無視される代わりに、有効な設定は適用されます
  • 将来のバージョンで追加されるフックイベントを先行して記述しておくことが可能になりました
  • チーム環境では、メンバーが異なるバージョンを使用していても設定ファイルを安全に共有できます
  • JSONの構文エラーは依然として設定ファイルの読み込み失敗を引き起こします

関連情報