AIハーネス入門 — AIに安全に良い仕事をさせる環境づくり
AI(Claude Code など)と開発するとき、成果の質を決めるのは「AIへの頼み方」よりも、AIが働く環境をどれだけ整えたかです。この環境一式をハーネス(harness)と呼びます。
このシリーズは、実際に運用されているプロジェクト(MulmoClaude など)の設定を題材に、ハーネスの主要な部品を具体的な設定サンプルつきで解説します。
- 第1章 CLAUDE.md の書き方 — AIへの「就業規則」を網羅的に
- 第2章 AI向けガチガチ lint — Vue/React + Express の ESLint 設定
- 第3章 subagent と cross review — AIの仕事を別のAIがチェックする
- 第4章 フックと権限 — 破りようがない強制力
ハーネスってなに?
ハーネス(harness)は、もともと馬具 — 馬に着ける手綱や引き具のことです。馬の力を殺さずに、進む方向と速度を人が制御するための道具です。
AI開発の文脈では、AIが安全に・良い仕事をできるように、人間が整えておく「ルールと道具の一式」を指します。AIの能力はそのままに、暴走や脱線だけを防ぐ、という発想です。
なぜ必要? — 「口頭の注意」は毎回忘れられる
AIとの会話で「テスト書いてね」「any 使わないでね」と注意しても、その効果はその会話の中だけです。次のセッションの AI は何も覚えていません。人間の新人なら一度言えば覚えますが、AI は毎朝記憶を失った状態で出社してくる新人のようなものです。
だから、注意を環境に埋め込みます。
| 口頭の注意(毎回忘れられる) | ハーネス(毎回自動で効く) |
|---|---|
| 「any 使わないでね」 | ESLint が any をエラーにする |
| 「コミット前にテスト回してね」 | commit しようとすると自動でテストが走る |
| 「このプロジェクトでは yarn を使ってね」 | CLAUDE.md に書いておく(毎セッション自動で読まれる) |
| 「勝手にファイル消さないでね」 | 権限設定で削除コマンドを許可しない |
| 「レビューしてからマージしてね」 | CI が PR ごとに別のAIレビューを自動で走らせる |
「気をつけてね」と言う代わりに、気をつけなくても事故が起きない環境を作る — これがハーネスの中心思想です。
AI時代にハーネスの価値が跳ね上がった理由
ハーネスの部品(lint、テスト、CI)自体は昔からあります。AI時代に重要度が跳ね上がったのには理由があります。
- AIは書く量が桁違いに多い — 人間のレビューが追いつかない。機械のチェックで先に止めるしかない
- AIは指摘されれば文句を言わず直す — lint エラーは人間には小言だが、AIには「自動修正ループの燃料」。厳しくすればするほど品質が上がる
- AIは記憶を持たない — 環境に埋め込まれたルールだけが、セッションをまたいで一貫性を保つ
つまり、人間チームでは「厳しすぎて運用できない」ルールが、AIチームでは低コストで運用できる。だから遠慮なくガチガチにしてよい(第2章で実例を見ます)。
ハーネスが立脚する「AIという道具の性質」
姉妹編のリファクタリングの心得が「事実 → だから」で整理している通り、ハーネスの各部品は AI の性質から素直に導かれます。この表がシリーズ全体の地図にもなっています。
| AIの性質(事実) | だから(対策) | 詳しくは |
|---|---|---|
| 確率で生成するので、自信満々に間違える(幻覚) | 機械で検証する: 型・lint・テスト・CI | 第2章 |
| 渡されたコンテキスト(範囲)しか見えない | コードは小さく・良い名前・型付きに。決まりと文脈は CLAUDE.md で明示的に渡す | 第1章・第2章 |
| 学習データに多い「枯れた」技術ほど正確 | 定番の技術を選ぶ(AIがよく知っている = 幻覚と手戻りが減る) | リファクタリングの心得 |
| 生成は速いが、人間が読める量が律速 | 小さく刻む(コミット/PR)+ レビューの網を増やす | 第3章・Gitのルール |
| What は書くが Why は残さない | 意図を CLAUDE.md・PR説明・決定記録に残す。AIに渡す md も全部 git 管理 | 第1章 |
| 「動く」を優先し、危険な書き方や過剰な抽象を出しがち | セキュリティ lint + 最終判断は人間 | 第2章・第3章 |
ハーネスの部品一覧
| 部品 | 何をするか | どこで設定するか | 詳しくは |
|---|---|---|---|
| ルール(CLAUDE.md) | プロジェクトの約束事を毎セッション AI に読ませる | CLAUDE.md / ~/.claude/CLAUDE.md |
第1章 |
| 整形(formatter) | 書き方の揺れを機械的に統一 | Prettier | 第2章 |
| lint | まずい書き方・バグの芽を自動で指摘 | ESLint | 第2章 |
| 型チェック | データの形の食い違いをコンパイル時に検出 | TypeScript (tsc --noEmit) |
第2章 |
| テスト | 「壊していないか」を毎回自動で確認 | node:test / vitest / Playwright |
Vibe Coding |
| CI | push のたびに上の全部を走らせる番人 | GitHub Actions | CI/CD入門 |
| フック(hooks) | AIの特定の行動に自動チェックを割り込ませる | .claude/settings.json |
第4章 |
| 権限(permissions) | AIができる操作の範囲を制限する | .claude/settings.json |
第4章 |
| レビュー体制 | 別のAI・別の人の目でチェックする | subagent / CI cross review | 第3章 |
このシリーズの読み方
- ハーネスをこれから整える人 → 第1章から順に。まず約束を書き(第1章)、機械の強制に格上げし(第2章)、別の目のレビューを足し(第3章)、最後に破りようのない強制力で固める(第4章)
- すでに Claude Code を使っている人 → 自分のプロジェクトに欠けている部品を上の一覧表で探して、該当章へ
各章
- CLAUDE.md の書き方 — AIへの「就業規則」を網羅的に — 置き場所の使い分け、書き方の7原則、フル装備テンプレート、実例の構成解剖
- AI向けガチガチ lint — Vue/React + Express の ESLint 設定 — lint とは何かから、インストール、コピーして使える設定、ルールごとの「なぜ」まで
- subagent と cross review — AIの仕事を別のAIがチェックする — 三重の網、CI で回す別AIレビュー、指摘のトリアージ
- フックと権限 — 破りようがない強制力 — commit 前の全チェック強制、最小権限、約束/チェック/強制の使い分け
付録:
- 付録A GitHub の既製セキュリティチェック — Dependabot・CodeQL・CodeRabbit・secret scanning を「入れるだけ」で網に追加
- 付録B 実物解剖: MulmoClaude の CI codex レビュー — 稼働中 workflow の全設定と、コメントに残された運用の教訓
- 付録C cross review を手元で回すスキル —
/codex-cross-reviewと/gh-review-loop、レビュー系スキルの設計原則
合わせて読む
- Vibe Coding について — AIとの開発の全体的な心得。ハーネスはその土台
- Vibe Coding 入門(非エンジニア向け)
- リファクタリング & プロダクト化 — 「テストしやすい小さな関数」の作り方
- GitHub ActionsではじめるCI/CD — ハーネスをCIに載せる方法
- Git/GitHub 入門(非エンジニア向け) — PR・マージの基本(第3章の前提)