claude コマンドを毎日使っていると、「モデルを指定し忘れた」「毎回同じ許可を求められる」といった細かな摩擦が積み重なります。この記事では、その摩擦を設定ファイルで解消する方法を中心に紹介します。

CLAUDE.md でプロジェクト固有の指示を固定する

プロジェクトルートに CLAUDE.md を置くと、claude コマンド起動時に自動で読み込まれます。毎回プロンプトで伝えていた前提知識や制約をここに書いておけば、会話を始めるたびに伝え直す必要がなくなります。

# CLAUDE.md

- テストは必ず `cargo test` で確認してから変更を提案すること
- コミットは明示的に依頼されるまで行わない
- コードコメントは原則不要

~/.claude/CLAUDE.md にグローバル版を置くと、すべてのプロジェクトに共通の指示を差し込めます。プロジェクト版とグローバル版は両方が読まれるので、共通ルールはグローバルに、プロジェクト固有のものはローカルに分けると管理しやすくなります。

settings.json でオプションと権限を固定する

--model--allowedTools を毎回コマンドライン引数で渡すのは手間です。.claude/settings.json(プロジェクト)または ~/.claude/settings.json(グローバル)に書いておくと、引数なしで同じ設定が適用されます。

{
  "model": "claude-opus-4-8",
  "permissions": {
    "allow": [
      "Bash(cargo:*)",
      "Bash(git log:*)",
      "Bash(git diff:*)"
    ]
  }
}

許可ルール"Bash(<コマンド>:*)" の形式で書きます。毎回「許可しますか?」と聞かれるコマンドをここに列挙しておくと、確認ダイアログが出なくなります。読み取り専用の git 操作や、ビルドコマンドを事前に許可しておくのが典型的な使い方です。

hooks で定型処理を自動化する

settings.json の hooks フィールドを使うと、Claude の特定のイベントに合わせてシェルコマンドを実行できます。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          { "type": "command", "command": "echo '[bash 実行完了]'" }
        ]
      }
    ]
  }
}

実用例として、ファイル書き込み後に自動フォーマットを走らせる、テスト結果を Slack 通知するといった使い方ができます。hooks はハーネス(Claude Code 本体)が実行するため、メモリや好みの設定では代替できない点に注意が必要です。

--print / -p フラグでスクリプトに組み込む

インタラクティブな対話が不要な場合は --print(-p) フラグで非インタラクティブモードで動かせます。

# ファイルの要約を標準出力に出す
claude -p "次のコードの責務を1行で説明してください" < src/main.rs

CI や Makefile から呼ぶ場合に便利です。--output-format json を組み合わせると、結果を構造化データとして受け取れます。

まとめ

  • CLAUDE.md — 毎回伝える前提・制約を書いておく場所。プロジェクト版とグローバル版を使い分ける。
  • settings.json — モデル・権限・hooks の固定。引数を毎回渡す手間をなくす。
  • -p フラグ — 非インタラクティブ実行でスクリプトや CI に組み込む。

設定ファイルは .claude/ ディレクトリにまとまるので、git で管理するとチームで設定を共有できます。

出典