Skip to content

原文(日本語に翻訳)

settings.json の env 値が文字列ではなく数値の場合にクラッシュする問題を修正しました。

原文(英語)

Fixed crash when settings.json env values are numbers instead of strings

概要

settings.jsonenv セクションで、環境変数の値として数値(例: 8080)を設定した場合に、Claude Codeがクラッシュするバグがありました。環境変数は本来文字列として扱われるべきですが、JSONで数値型として記述された場合の処理が不適切でした。このアップデートにより、数値が自動的に文字列に変換されてクラッシュしなくなりました。

基本的な使い方

json
// settings.json(修正前は数値でクラッシュ)
{
  "env": {
    "PORT": 8080,        // 数値型 → 修正前はクラッシュ
    "DEBUG_LEVEL": 3,    // 数値型 → 修正前はクラッシュ
    "API_URL": "https://api.example.com"  // 文字列 → 問題なし
  }
}
json
// 修正後: 数値も文字列に変換されて正常動作
// 以下は全て正常に動作する
{
  "env": {
    "PORT": 8080,         // 数値型でもOK("8080"として扱われる)
    "PORT_STR": "8080",   // 文字列でもOK
    "DEBUG": true,        // boolean型も適切に処理される
    "API_URL": "https://api.example.com"
  }
}

実践例

開発環境の設定

json
// .claude/settings.json(開発環境用)
{
  "env": {
    "NODE_ENV": "development",
    "PORT": 3000,              // 修正後: 数値でも動作する
    "DATABASE_PORT": 5432,     // 修正後: 数値でも動作する
    "MAX_CONNECTIONS": 10,     // 修正後: 数値でも動作する
    "API_TIMEOUT_MS": 5000,    // 修正後: 数値でも動作する
    "DEBUG": "true",
    "API_BASE_URL": "http://localhost:3000/api"
  }
}

プロジェクトごとの環境設定

json
// プロジェクトA用 .claude/settings.json
{
  "env": {
    "APP_ENV": "staging",
    "HTTP_PORT": 8080,          // 修正後: 数値でOK
    "HTTPS_PORT": 8443,         // 修正後: 数値でOK
    "WORKER_THREADS": 4,        // 修正後: 数値でOK
    "CACHE_TTL_SECONDS": 3600,  // 修正後: 数値でOK
    "DATABASE_URL": "postgresql://localhost:5432/myapp"
  }
}

設定ファイルのバリデーション

bash
#!/bin/bash
# settings.json の env セクションをバリデートするスクリプト

validate_env_settings() {
  local settings_file="${1:-.claude/settings.json}"
  
  if ! python3 -c "
import json, sys

with open('$settings_file') as f:
    settings = json.load(f)

env = settings.get('env', {})
for key, value in env.items():
    type_name = type(value).__name__
    print(f'{key}: {value} (type: {type_name})')
    
    # 修正後: 数値型も許容される
    if not isinstance(value, (str, int, float, bool)):
        print(f'WARNING: {key} has unexpected type {type_name}')
" 2>&1; then
    echo "env 設定の確認が完了しました"
  else
    echo "settings.json の解析に失敗しました"
  fi
}

validate_env_settings

Docker連携での数値設定

json
// Docker環境との連携用 settings.json
{
  "env": {
    "DOCKER_HOST_PORT": 8080,    // 修正後: 数値でOK
    "CONTAINER_MEMORY_MB": 512,  // 修正後: 数値でOK
    "REPLICA_COUNT": 3,          // 修正後: 数値でOK
    "DOCKER_HOST": "unix:///var/run/docker.sock"
  }
}
bash
# この設定でClaude Codeを使用
claude "Dockerコンテナを分析して"
# 修正後: 数値型の env 設定でもクラッシュしない

注意点

  • 修正後は数値型の値が自動的に文字列に変換されます(例: 8080"8080"
  • ベストプラクティスとしては、引き続き文字列型(クォートで囲む)で記述することを推奨します
  • boolean 型(true/false)の値も同様に安全に処理されるようになりました
  • 実際の環境変数は常に文字列として扱われるため、型変換は透過的に行われます
  • JSONの型チェックは厳密ではなくなりましたが、明確なドキュメントのために文字列を推奨します

関連情報