Claude Code の個人的おすすめ設定 (settings.json) – 虎の穴ラボ技術ブログ


こんにちは。虎の穴ラボ エンジニアの S.A です。

みなさん Vibe Coding してますか?
虎の穴ラボでは Devin や Roo Code そして Claude Code など様々なAIツールを活用しています。
今回は Claude Code の設定ファイルである settings.json について、個人的におすすめな設定をご紹介したいと思います。

Claude Code の設定と言われると CLAUDE.md ファイルがまず浮かぶかもしれません。
CLAUDE.mdでは、例えば「会話は常に日本語で」などといったルールを記載しておけば、セッション中常に読み込まれるため
わざわざ毎度指示しなくても済むという使い方ができます。

一方で、CLAUDE.md とは別に settings.json という設定ファイルも存在します。
settings.json では、CLAUDE.md と違って自然言語によるプロンプトではなく
json ファイルでコマンドの許可/禁止や環境変数などの設定を指定していきます。
今回はこの settings.json についてご紹介します。

まずは、settings.json の配置場所について確認します。
settings.json の配置場所については公式ドキュメントの記載のとおり、以下の3つの配置方法があります。

ファイルパス 内容
~/.claude/settings.json ユーザのホームに置く。どのプロジェクトでも使えるような個人の設定を定義しておくことができる。
.claude/settings.json プロジェクトのディレクトリに置く。Git 管理しておけばチームで共通の設定を定義しておくことができる。
.claude/settings.local.json プロジェクトのディレクトリに置く。gitignore しておけばプロジェクト内で個人の設定をローカルに定義しておくことができる。

このように settings.json は配置する階層によってプロジェクト共有の設定と個人の設定を使い分けることができます。
まずは、表の3番目の settings.local.json などで試しに個人で動きを確認してみるのがオススメです。

①禁止したいコマンドを指定する

Claude Code がコマンドを実行する際、ユーザにコマンドを実行していいか許可を求めてきます。
いちいち聞かなくても自由に実行してしまって問題ないコマンドはあらかじめ settings.jsonpermissionsallow に指定しておくと許可する手間が省けるため便利です。

許可を求められた際に “Yes, and don’t ask again this session” (はい、このセッションの間は常に許可)と回答すれば
同じセッションの間は許可され続けますが、Claude Code を再度実行して別セッションになるとこの情報は残りません。
settings.json に書いておけば別セッションでもデフォルトで許可される形になります。

同様に、実行してもらいたくないコマンドは deny にあらかじめ設定しておくのが無難です。
個人的には Git 操作は Claude Code にしてほしくないため以下のように deny に記載しています。

{
 "permissions": {
   "allow": [
     "Bash(find:*)",
     "Bash(rg:*)",
     "Bash(grep:*)",
     "Bash(ls:*)"
   ],
   "deny": [
     "Bash(git add:*)",
     "Bash(git commit:*)",
     "Bash(git push:*)",
     "Bash(git reset:*)",
     "Bash(git rebase:*)"
   ]
 },
 // 省略
}

Git 操作は Bash(git:*) のように指定すれば全般的に禁止できるのですが、
たまにコンフリクト箇所のコミット履歴の調査や過去のコミットを参考にしたいときに
参照系の git コマンドを操作して欲しいことがあるので commit や push などだけ禁止するようにしています。

コマンド実行 Bash 以外にも、特定のファイルの参照 Read や編集 Edit も禁止できます。
公式ドキュメントでは、機密ファイルへのアクセスを以下のように禁止する設定が紹介されています。

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Read(./config/credentials.json)",
      "Read(./build)"
    ]
  }
}

②処理が終わったら通知音を出す

Claude Code の返答は数十秒〜数分かかるので、その間に別の作業をすることが多いです。
そうして別作業をしていると Claude Code のタスクが完了していたり、途中でコマンドの承認待ちで止まっていたりしても気が付かないことが多々ありました。
そこで処理が終わった時や承認待ちになった時に通知音がでるように hooks を使って設定したところ、忘れて放置していた〜ということが無くなってかなり便利になりました。

実際の設定内容はこんな感じです。

{
 // 省略
"hooks": {
   "Notification": [
     {
       "hooks": [
         {
           "type": "command",
           "command": "afplay /System/Library/Sounds/Glass.aiff"
         }
       ]
     }
   ],
   "Stop": [
     {
       "hooks": [
         {
           "type": "command",
           "command": "afplay /System/Library/Sounds/Funk.aiff"
         }
       ]
     }
   ]
 }
}

Notification フックはにコマンドの実行承認待ちの時と、プロンプト入力待ちが60秒間続いた時に呼ばれるフックです。
Stop フックは Claude Code のタスクが完了した時に呼ばれるフックです。
この二つのフックに対して通知音を鳴らすコマンドを設定しています。
Mac を使っているので afplay でシステムにある通知音を流すコマンドを command に指定しています。

フックについても公式ドキュメントに詳しく情報が載っているので、こちらもぜひ見てみてください。

ちなみに通知音を鳴らす別の方法として claude config set --global preferredNotifChannel terminal_bell というコマンドによる設定もあるのですが、
これだと VSCode 上で実行する場合は VSCode 上の設定も変更する必要があることと、タスク完了時の通知ができないというデメリットがあるので
hooks で通知音を鳴らすようにしています。

③ファイルを編集したら lint や format を実行する

フックには、Claude Code がファイルを編集した時に呼ばれるものも存在します。
Claude Code がファイルを編集した後はかならず lint や format が実行されるように hooks に設定しておけば、
プロンプトで指定しなくても実行してくれるので便利です。

この手のルールは、 CLAUDE.md やセッションの冒頭で指示していてもなぜか指示通り動いてくれないことがあります。
hooks であれば確実に実行してくれるので、コマンドで指定できる作業であれば settings.json に書いておくのがオススメです。

{
 // 省略
 "hooks": {
    // 省略
   "PostToolUse": [
     {
       "matcher": "Edit|Write|MultiEdit",
       "hooks": [
         {
           "type": "command",
           "command": "npm run format" // フォーマットなどのコマンド
         }
       ]
     }
   ]
}

上記のように PostToolUse というフックを使っています。
PostToolUse フックはコマンド実行やファイル編集の後に呼ばれるフックですが、
さらに matcher という項目で Edit|Write|MultiEdit を指定しておけばファイル編集時のみの指定に絞り込むことができます。

ちなみに、hooks で実行されるコマンドには json でイベント内容が渡ってくるので、
この json の中身を読めば、例えば一部の拡張子のファイルが編集された時だけ実行する〜といった指定もできそうです。

▼渡ってくる json の例

{
  "session_id": "abc...",
  "transcript_path": "/Users/...",
  "hook_event_name": "PostToolUse",
  "tool_name": "Edit",
  "tool_input": {
    "file_path": "/path/to/file.txt",
    "new_string": "aaa",
    "old_string": "bbb",
    "replace_all": false
  },
  "tool_response": {
    "filePath": "/path/to/file.txt",
    ...
  }
}

ここまで読んでいただきありがとうございました!
今回は Claude Code のおすすめ設定についてご紹介しました。
何か一つでも紹介した設定がお役に立てば嬉しい限りです!
今後とも Claude Code にはお世話になりそうなので、また良い知見が溜まり次第ブログで発信していこうと思います。

虎の穴ラボでは一緒に働く仲間を募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧ください。
toranoana-lab.co.jp




Source link

関連記事

コメント

この記事へのコメントはありません。