Claude Code に同じ注意を三度くり返したことはありませんか。
「コミットはまだしないで」「そのコマンドは PowerShell では動かない」「テストを直すんじゃなくて実装を直して」。
個人開発の日本株検証システムを Claude Code と一緒に作ってきた中で、最初の数週間はまさにこの状態でした。いまは同じ注意をくり返すことがほとんどありません。モデルが賢くなったからではなく、注意を「どこに書くか」を決めて、置き直したからです。
要約
- Claude Code の設定は「誰に・どの範囲で効かせたいか」で6つのスコープに置き分けると、くり返しの注意が消えていく
- いちばん効いたのは、ユーザースコープの CLAUDE.md に「確認なしで進めてよい作業」と「確認が要る操作」を操作名で書き分けたこと
- ルールは「お願い(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
|
破られたら困るルールの強制 | 置き場所による |
左が全プロジェクト共通、右がこのリポジトリだけ。具体的な方が優先される
置き分けのルールは 同じことを2か所に書かない の1つだけです。
「どのリポジトリでも変わらないこと」はユーザースコープへ、「このリポジトリだけの事情」はプロジェクトスコープへ。
スキルにルール本文をコピーすると、正本を直したときにスキル側が古いまま残り、AI が古い方に従います。スキルには手順と再発防止だけを書き、ルールは正本の文書を参照させるのが安全です。
いちばん効いた1項目:自律性の線引き
「気をつけて」ではなく、操作名で線を引きます。実際に使っている記述を、個人的な部分を除いて抜粋します。
## 自律動作の方針
- **元に戻せるリポジトリ内の作業は、確認を取らずに進めてよい**:
コード編集、テストの作成と実行、リンタ・型チェック、ローカルでの検証、調査。
- **次の操作は、確認するか明示の指示を待つ**:
コミット / push / PR 作成 / ブランチのマージ、外部サービスへの送信・公開、
元に戻せない操作(削除・上書き)、認証情報の入力、設定や権限の恒常的な変更。
- 承認された範囲を勝手に広げない。ある場面での承認を、別の操作に流用しない。
元に戻せる作業は AI に任せ、戻せない操作は人間が決める
最後の1行がないと「さっきコミットしていいと言われたので push もしました」が起こりえます。
お願い → 手順 → 仕組み の順に格上げする
- まず CLAUDE.md に1行書く(日付と理由を添える)
- それでも2回破られたら、スキルの「厳守」欄に入れる
- それでも破られたら、フックで止める
最初からフックで固めると、正当な例外まで止めてしまいます。
例:--no-verify を止めるフック
PreToolUse のフックが 終了コード 2 で終わると、ツールの実行は止まり、標準エラーの文面が Claude に届きます。
// 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);
});
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [{ "type": "command", "command": "node \"<ホームの絶対パス>/.claude/hooks/block-no-verify.js\"" }]
}
]
}
}
終了コード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ファイル、置き場所の一覧つき)
「うちではこう置いている」という工夫があれば、ぜひコメントで教えてください。


