Skip to content

Latest commit

 

History

History
133 lines (86 loc) · 4.05 KB

File metadata and controls

133 lines (86 loc) · 4.05 KB

merge-claude-code-settings

English | 日本語

Claude Codeの複数プロジェクトの設定を統合するTypeScriptツールです。 グローバル設定ファイルに統合します。

背景

Claude Codeでは、特定のコマンド実行を今後ユーザーへの確認なしに許可する機能があります。 この許可設定は各プロジェクトのローカル設定ファイル(.claude/settings.local.json)に保存されます。

問題点: プロジェクトごとに個別に許可設定を行う必要があります。 同じコマンドを複数プロジェクトで毎回許可するのは非効率です。

解決策: 各プロジェクトの設定を統合します。 グローバル設定ファイル(~/.claude/settings.json)にマージされます。 これにより、全プロジェクトで共通の許可設定を利用できます。

機能

  • 複数プロジェクトの .claude/settings.local.json を自動検出
  • グローバル設定 (~/.claude/settings.json) にマージ
  • 書き込み前に自動バックアップを作成 (~/.claude/settings.json.bak)
  • permissions フィールドは配列を結合して重複を自動削除
  • 実行時に許可されたコマンドをデバッグ出力

使い方

npxで直接実行できます(インストール不要)。

npx merge-claude-code-settings

# デバッグモード(各プロジェクトで許可されているコマンドを標準出力)
npx merge-claude-code-settings --show-allow-commands

実行すると次の処理を行います。

  1. ~/.claude.json から登録済みのプロジェクト一覧を取得
  2. 各プロジェクトの .claude/settings.local.json を読み込み
  3. グローバル設定にマージ
  4. 現在の設定のバックアップを作成 (~/.claude/settings.json.bak)
  5. マージ済み設定を ~/.claude/settings.json に書き込み

--show-allow-commands オプション使用時の出力例。

/path/to/project/.claude/settings.local.json	Bash(git status)
/path/to/project/.claude/settings.local.json	Bash(npm run build)

マージロジック

通常のフィールド

後から読み込まれた設定で上書きされます(最後のプロジェクトの設定が優先)。

permissions フィールド

特別な処理を行います。

  • 全プロジェクトの配列を結合
  • 重複を削除
  • アルファベット順にソート

例:

  • グローバル設定: {"permissions": {"allow": ["cmd1", "cmd2"]}}
  • プロジェクトA: {"permissions": {"allow": ["cmd2", "cmd3"]}}
  • プロジェクトB: {"permissions": {"allow": ["cmd4"]}}
  • 結果: {"permissions": {"allow": ["cmd1", "cmd2", "cmd3", "cmd4"]}}

技術スタック

  • 言語: TypeScript
  • ランタイム: Bun
  • 主な依存関係: Node.js標準ライブラリ(fs, path, os)

開発

開発者向け

ソースからビルドして実行。

# TypeScript を JavaScript にビルド
bun run build

# Bun で直接実行(開発モード)
bun run dev

# コンパイル済み JavaScript を実行
node dist/index.js

# デバッグモード
node dist/index.js --show-allow-commands

設定

https://pre-commit.com/ の手順に従って pre-commit をインストールします。 これにより、コミット時にクレデンシャルが含まれていないかの検査が行われるようになります。

テスト

ライブラリ関数の機能を検証するために、テストスイートを実行します。

bun test

39の包括的なテストが実行されます。

  • isStringArray: 型ガード検証(21テスト)
  • mergeSettings: 設定マージロジック(18テスト)

コード整形

bun run fix

Prettierでコードをフォーマットします。