0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code の CLAUDE.md が肥大化したら ― 設定を6つのスコープに置き分ける早見表とフック実例

0
Posted at

Claude Code に同じ注意を三度くり返したことはありませんか。
「コミットはまだしないで」「そのコマンドは PowerShell では動かない」「テストを直すんじゃなくて実装を直して」。

個人開発の日本株検証システムを Claude Code と一緒に作ってきた中で、最初の数週間はまさにこの状態でした。いまは同じ注意をくり返すことがほとんどありません。モデルが賢くなったからではなく、注意を「どこに書くか」を決めて、置き直したからです。

要約

  1. Claude Code の設定は「誰に・どの範囲で効かせたいか」で6つのスコープに置き分けると、くり返しの注意が消えていく
  2. いちばん効いたのは、ユーザースコープの CLAUDE.md に「確認なしで進めてよい作業」と「確認が要る操作」を操作名で書き分けたこと
  3. ルールは「お願い(CLAUDE.md)→ 手順(スキル)→ 仕組み(フック)」の順に、破られた回数に応じて格上げする

※本記事は、note の有料記事「Claude Code を『相棒』にするハーネス設計図」の考え方の部分を、エンジニア向けにまとめ直したものです。各スコープの詳しい書き方と配布テンプレートは note 版で扱っています。

6つのスコープ早見表

スコープ 置き場所 書くこと git 管理
ユーザー ~/.claude/CLAUDE.md 言語、自律性の線引き、Git の流儀 しない
分野別ルール ~/.claude/rules/common/*.md など コーディング・テスト・セキュリティ・Git の作法 しない
プロジェクト <repo>/CLAUDE.md(+ AGENTS.md) アーキテクチャ、ドメインの決まりごと、起動と検証の手順 する
スキル・サブエージェント .claude/skills/ .claude/agents/ くり返す作業の手順書、独立したレビュー役 する
ローカル・メモリ CLAUDE.local.md、オートメモリ 自分の環境だけの事情、指摘の記憶 しない
フック・プラグイン settings.json の hooks 破られたら困るルールの強制 置き場所による

01_scopes.png

左が全プロジェクト共通、右がこのリポジトリだけ。具体的な方が優先される

置き分けのルールは 同じことを2か所に書かない の1つだけです。
「どのリポジトリでも変わらないこと」はユーザースコープへ、「このリポジトリだけの事情」はプロジェクトスコープへ。

スキルにルール本文をコピーすると、正本を直したときにスキル側が古いまま残り、AI が古い方に従います。スキルには手順と再発防止だけを書き、ルールは正本の文書を参照させるのが安全です。

いちばん効いた1項目:自律性の線引き

「気をつけて」ではなく、操作名で線を引きます。実際に使っている記述を、個人的な部分を除いて抜粋します。

~/.claude/CLAUDE.md(抜粋)
## 自律動作の方針

- **元に戻せるリポジトリ内の作業は、確認を取らずに進めてよい**:
  コード編集、テストの作成と実行、リンタ・型チェック、ローカルでの検証、調査。
- **次の操作は、確認するか明示の指示を待つ**:
  コミット / push / PR 作成 / ブランチのマージ、外部サービスへの送信・公開、
  元に戻せない操作(削除・上書き)、認証情報の入力、設定や権限の恒常的な変更。
- 承認された範囲を勝手に広げない。ある場面での承認を、別の操作に流用しない。

02_autonomy.png

元に戻せる作業は AI に任せ、戻せない操作は人間が決める

最後の1行がないと「さっきコミットしていいと言われたので push もしました」が起こりえます。

お願い → 手順 → 仕組み の順に格上げする

  1. まず CLAUDE.md に1行書く(日付と理由を添える)
  2. それでも2回破られたら、スキルの「厳守」欄に入れる
  3. それでも破られたら、フックで止める

最初からフックで固めると、正当な例外まで止めてしまいます。

例:--no-verify を止めるフック

PreToolUse のフックが 終了コード 2 で終わると、ツールの実行は止まり、標準エラーの文面が Claude に届きます。

~/.claude/hooks/block-no-verify.js
// git の --no-verify を止める。フックが落ちたら飛ばさずに原因を直させるため。
let raw = '';
process.stdin.on('data', (c) => (raw += c));
process.stdin.on('end', () => {
  let cmd = '';
  try {
    cmd = JSON.parse(raw)?.tool_input?.command ?? '';
  } catch {
    process.exit(0); // 読めない入力は止めない(フック自体の故障で作業を止めないため)
  }
  if (/\bgit\b[^\n]*\s--no-verify\b/.test(cmd)) {
    console.error('--no-verify は禁止です。フックが失敗した原因を調べて直してください。');
    process.exit(2);
  }
  process.exit(0);
});
~/.claude/settings.json(hooks 部分)
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [{ "type": "command", "command": "node \"<ホームの絶対パス>/.claude/hooks/block-no-verify.js\"" }]
      }
    ]
  }
}

04_hook_flow.png

終了コード0なら素通し、2なら止めて理由を Claude に返す

フックは Claude Code の権限で任意のコマンドを実行します。配布されているフック集も、中身を読んでから入れてください。Windows では command の ~ が展開されないことがあるので、絶対パスで書くのが安全です。

動作確認は、Claude Code に「git commit --no-verify -m test を実行して」と頼み、止められることを確かめれば十分です。

note 版で扱っていること

  • 6つのスコープそれぞれの「書くこと/書かないこと」と、実物に近い書き方の例
  • CLAUDE.md を育てる運用ルール(事故1件につき1行、日付つき)
  • スキルを「単一情報源の表+厳守+手順+失敗の記録」で書く型
  • 書いた本人とは別の目でレビューさせるサブエージェントの設定
  • メモリに「理由」を書かせて、古くなった記憶を正しく捨てさせる方法
  • すぐ使えるフック3本(--no-verify の禁止、.env の保護、編集時の自動整形)
  • ゼロから1週間で取り込む順番と動作確認
  • 配布テンプレート一式(日本語の Markdown 13ファイル、置き場所の一覧つき)

「うちではこう置いている」という工夫があれば、ぜひコメントで教えてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?