第12章 ハーネス設計と運用
ついに最終章です。
ここまでで、Code を使って Web アプリを作って公開するまでの一連の流れが、すべて手元にあるはずです。
第12章では、その先の世界を見ます。「ハーネス」という、Code をさらに高度に使いこなすための考え方。
僕自身、訪看アプリを作り上げた後、「もっと複雑な作業も、Code で安全に進めるには?」と考え始めた時に出会ったコンセプトです。
この章で扱うこと:
- ハーネスとは何か、なぜ必要か
- Planner / Generator / Evaluator パターン
- ハーネスを構築する具体ステップ
- 評価基準の設計
- 公開前セキュリティ自己点検
「もう Code は使えるようになった、その次は?」という人のための章です。
12-1. ハーネスとは:Claude Code の上位制御層という考え方
【学習目標】
- ハーネスという概念を理解する
- 「Code を直接使う」と「ハーネスを介して Code を使う」の違いを知る
【前提知識】
- ここまでの全章を読んでいること
【概念解説】
「ハーネス」という言葉、聞き慣れないかもしれません。
馬具の「ハーネス」を思い浮かべると分かりやすい。馬を制御するための「装具」のこと。馬自体は強いし速いけど、ハーネスがあると人間が望む方向に走らせやすくなる。
AI 開発でいう「ハーネス」も同じ。Code 自体は強力だけど、**それを安全に・予測可能に動かすための「装具」**がハーネスです。
ハーネスを使わないとどうなるか
ここまでの章でやってきたのは、基本的に「Code を直接使う」スタイル。
- 自分が依頼を打つ
- Code が作業する
- 結果を見て、次の依頼を打つ
- 繰り返し
このやり方は、シンプルで強力。でも、規模が大きくなると課題が出てきます。
- 自分が毎回判断しないといけない
- 大量の作業を Code に任せたい時に、いちいち承認を求められる
- 同じパターンの作業を何度もやる時、効率が悪い
- 失敗を防ぐためのチェックが手動
ハーネスを使うとどうなるか
ハーネスを噛ませると、Code の使い方が変わります。
[自分]
↓ ハーネスに指示
[ハーネス]
↓ Code に依頼を組み立てる
[Code]
↓ 作業を実行
[ハーネス]
↓ 結果を評価
[自分] ← 必要な時だけ介入
つまり、自分と Code の間に「自動化層」を挟む。
これによって:
- 同じパターンの作業を一気に進められる
- 失敗のチェックが自動化される
- 自分が監視する負担が減る
- 大規模なタスクが現実的になる
ハーネスの典型例
- テスト自動化:Code が書いたコードを自動でテストする仕組み
- 品質チェック:コードの規約違反を自動で検出
- 複数 Code の連携:複数の Code セッションを連携させて並列処理
- Plan の自動評価:Plan の質を自動で評価して、不十分なら修正依頼
「いつ必要になる?」
僕の感覚として、ハーネスが必要になるのは、
- 訪看アプリのような中規模アプリを「実運用」しはじめた時
- 同じパターンの作業(新機能追加など)を何度も繰り返す時
- 「もっと自動化できるはず」と感じた時
最初の数プロジェクトはハーネスなしで進める方が、感覚が掴みやすい。3〜5プロジェクト経験してから、ハーネスを意識するくらいのタイミングが適切です。
【ハンズオン手順】
▼ ブラウザ側でやること(ハーネスの概念を整理)
- ブラウザに次のように打つ
AI 開発で言う「ハーネス」とは何ですか?
個人開発者にとって、いつから必要になるものですか?
具体的な例を挙げて、初心者にも分かるように説明してください。
- ブラウザが概念を整理してくれる
- 自分の感覚と照らし合わせる
【つまずきポイント】
- 「ハーネスを使わないとプロじゃない」は誤解。直接 Code 使うだけでも、十分に強力
- 最初からハーネスを目指さない。基礎ができてから
【確認問題】
- ハーネスを馬具のハーネスに例えた時、Code は何に相当しますか?
- ハーネスを使う典型的なメリットを2つ挙げてください
【次のレッスンへの橋渡し】
次は、ハーネスを設計する時の代表的なパターン「Planner / Generator / Evaluator」を見ていきます。
12-2. Planner / Generator / Evaluator パターン
【学習目標】
- 3つの役割を分けて Code を使うパターンを理解する
- それぞれの役割が何をするかを言葉で説明できる
【前提知識】
- 12-1 でハーネスの概念を理解していること
【概念解説】
ハーネスを設計する時の代表的なパターンに、「Planner / Generator / Evaluator」というのがあります。
3つの役割:
1. Planner(計画者)
- やるべきことを設計する
- 全体の手順を立てる
- どんな成果物を期待するかを定義
- 例:「ログイン機能を追加する。フォーム作成、認証連携、状態管理、テストの4ステップ」
2. Generator(生成者)
- Planner が立てた計画に従って、実際にコードを書く
- 1ステップずつ実装
- 例:「フォーム作成のステップ:HTML/CSS を書く」
3. Evaluator(評価者)
- Generator が書いたコードを評価
- 計画通りに動くか、品質が満たされているかを判定
- 例:「フォームは見た目OK。ただし、バリデーションが足りない」
これら3つの役割を別々のセッション(または別々のサブエージェント)で動かすのが、このパターンの肝。
3つを分ける意味
「全部1つの Code でやればいいじゃん」と思うかもしれません。でも、分けるメリットがあります。
1. 役割が明確になる
- 「計画担当」「実装担当」「評価担当」とハッキリ
- 役割ごとに違う「視点」で見られる
2. コンテキストを分離できる
- Planner は計画のために大局を見る
- Generator は実装の細部を見る
- それぞれ別のコンテキストウィンドウを使える
3. チェックが入る
- Generator が好き勝手しないように、Evaluator がチェック
- 失敗を早期発見できる
実践イメージ
たとえば「アプリ全体のリファクタリング」を頼みたい時、
Step 1:Planner Code に「リファクタリング計画を立てて」と依頼
Step 2:Planner Code が計画を出す
Step 3:Generator Code に計画を渡して「これに従って実装して」と依頼
Step 4:Generator Code が実装
Step 5:Evaluator Code に成果物を渡して「計画通りか評価して」と依頼
Step 6:Evaluator Code が評価
Step 7:問題があれば Generator に戻る、なければ完了
このフローを自分でガイドしながら進める。これがミニ・ハーネス。
僕からのコツ
僕は「最初は、人間が Planner と Evaluator を兼ねる」のがいいと言っています。
- 自分が「これをやりたい」と Planner として伝える
- Code が Generator として実装
- 自分が Evaluator として「これでいいか」をチェック
完全自動化を目指さず、要所要所で自分が役割を担う。これくらいから始めると、感覚が掴みやすい。
【ハンズオン手順】
▼ ブラウザ側でやること(パターンの応用例)
- ブラウザに次のように打つ
Planner / Generator / Evaluator パターンを、私の Web アプリ
開発に適用する場合、どんな進め方ができますか?
具体例を3つ挙げてください。
- ブラウザが具体例を提案
- 自分のプロジェクトに応用できそうな例を選ぶ
▼ Code 側でやること(3役割を意識した依頼)
- Code に次のように依頼
私が考えている新機能:[内容]
これを実装するために、3段階で進めたいです:
1. まず計画を提示してください(Planner)
2. 計画を確認したら、実装します(Generator)
3. 実装が終わったら、評価をお願いします(Evaluator)
まず Step 1 として計画を提示してください。
- Code が計画を提示
- 確認して OK
- 実装を依頼
- 完了したら評価を依頼
【つまずきポイント】
- 3役割を厳密に分けすぎない。最初は人間が補完するのが現実的
- Evaluator のフィードバックを必ず読む。読まないと意味がない
- 同じセッション内で3役割を回しても十分効果がある。最初から別セッションを使わなくてOK
【確認問題】
- 3つの役割の名前と、それぞれの仕事は何ですか?
- 役割を分けるメリットを3つ挙げてください
【次のレッスンへの橋渡し】
パターンが見えました。次は、実際にハーネスを構築するステップを見ていきます。
12-3. ハーネスを構築する具体ステップ
【学習目標】
- 自分のプロジェクトでハーネスを構築するステップを知る
- 「シンプルから始める」流儀を身につける
【前提知識】
- 12-2 で3役割を理解していること
【概念解説】
ハーネスは、いきなり大規模なものを作る必要はないです。シンプルなハーネスから始めるのがコツ。
ハーネス構築の段階
[段階1] CLAUDE.md にチェックリストを書く
↓
[段階2] テスト自動化のスクリプトを書く
↓
[段階3] 複数 Code の連携を試す
↓
[段階4] フル自動化に挑戦
最初は段階1で充分。段階1だけでも、ハーネスの効果は十分体感できます。
段階1:CLAUDE.md にチェックリスト
これが最も簡単なハーネスです。CLAUDE.md に次のようなチェックリストを書く:
# 重要な作業のチェックリスト
重要な変更(新機能追加、認証関連、決済関連)を行う時は、
以下のチェックリストを通してください。
## Planning フェーズ
- [ ] 変更の目的を明確に
- [ ] 影響範囲をリストアップ
- [ ] リスクを評価
- [ ] テスト方法を決定
## Implementation フェーズ
- [ ] 1ステップずつ実装
- [ ] 各ステップでスクショ伴走
- [ ] 既存テストが通ることを確認
- [ ] 新規コードに対するテストを追加
## Evaluation フェーズ
- [ ] 完了条件を満たしているか
- [ ] パフォーマンスへの影響
- [ ] セキュリティへの影響
- [ ] CHANGELOG.md と TODO.md の更新
これだけで、Code が大きな作業を始める時に「自動的にチェックリストを通そう」とする動きが出ます。**「Code に対する自動ガイド」**として機能します。
段階2:テスト自動化のスクリプト
次の段階は、テストの自動化。Code が書いたコードに対して、自動的にテストを実行する仕組み。
1. テストフレームワーク(Vitest や Jest など)を導入
2. Code に「このコードのテストを書いて」と依頼
3. テストを実行
4. 失敗があれば Code に戻して修正依頼
これも Code が手伝ってくれます。
段階3:複数 Code の連携
更に進むと、複数の Code セッションを連携させる段階。
- セッション A:実装担当
- セッション B:レビュー担当
- セッション C:テスト担当
それぞれが別のコンテキストで動いて、結果を統合する。これは僕もまだ模索中の領域。
段階4:フル自動化
最終的には「人間が介入しなくても、Code が連続して大きな仕事を進める」状態。これはまだ未来形の話。僕も「いずれそうなる」と感じていますが、現在は段階1〜2のあたりで実用化しています。
個人開発者は段階1で充分
実用上、ほとんどの個人開発者は**段階1(CLAUDE.md のチェックリスト)**で必要十分です。これがあるだけで、Code の作業品質が安定します。
僕も訪看アプリで使っているハーネスは、段階1のチェックリストレベル。それで十分に効果を発揮しています。
【ハンズオン手順】
▼ Code 側でやること(段階1のチェックリスト導入)
- Code に次のように依頼
CLAUDE.md にハーネス的なチェックリストを追加したいです。
Planning / Implementation / Evaluation の3段階で、
それぞれにチェックリストを書いてください。
私のプロジェクトに合った内容にしてください。
- Code がチェックリストを追加
- 内容を確認・調整
▼ Code 側でやること(チェックリストの効果確認)
- 何か中規模の作業を依頼
- Code がチェックリストを参照しながら進めているか観察
- 必要に応じてチェックリストを改善
【つまずきポイント】
- チェックリストを長くしすぎない。すべての作業に全項目を通すと、Code が窮屈に
- 「重要な作業」の定義を明確に。何が重要か Code に分かるように
- 段階2以降は無理に進めない。必要性を感じてから
【確認問題】
- 最も簡単なハーネスの実装は何ですか?
- 個人開発者はどの段階まで必要ですか?
【次のレッスンへの橋渡し】
具体的な構築ステップが見えました。次は、ハーネスの中核となる「評価基準」の設計について。
12-4. 評価基準の設計
【学習目標】
- 「いい仕事」を評価する基準を自分で設計できる
- Code に評価を頼む時の指針を持つ
【前提知識】
- 12-3 までを読んでいること
【概念解説】
ハーネスの中で「Evaluator」が機能するためには、評価基準が明確である必要があります。
「いい実装」「悪い実装」を Code が判断するための、明確な物差し。
評価基準の典型例
実装の品質を評価する時の基準:
1. 機能的正しさ
- 仕様通りに動くか
- エラーケースをハンドリングしているか
- 期待通りの結果を返すか
2. コード品質
- 読みやすいか
- 命名が適切か
- 重複がないか
- コメントが適度か
3. パフォーマンス
- 動作が速いか
- メモリを過剰に使わないか
- 不要な処理がないか
4. セキュリティ
- 認証が必要なところに認証があるか
- データ漏洩のリスクがないか
- 入力検証があるか
5. テスタビリティ
- テストを書ける構造か
- 副作用が分離されているか
これらを CLAUDE.md に書いておくと、Code が評価する時に参照してくれます。
評価基準を CLAUDE.md に書く例
# コード評価基準
## 機能的正しさ
- 仕様書に記載の機能をすべて満たすか
- エラーケース(無効入力、ネットワーク障害、認証失敗)を適切に処理するか
## コード品質
- 関数名・変数名は意図が明確か
- 1関数の長さは50行以内が目安(超える場合は分割を検討)
- マジックナンバー(直接書かれた数値)は定数化する
- コメントは「なぜ」を説明する(「何」はコードを読めば分かる)
## パフォーマンス
- ユーザー操作への反応は100ms以内
- API リクエストはバッチ化、または並列化
- 不要な再レンダリングを避ける
## セキュリティ
- ユーザー入力は必ずバリデーション
- SQL は parameterized query
- API キーや個人情報をクライアント側に露出しない
## ドキュメント
- 新規関数には JSDoc または日本語コメント
- 重要な設計判断は CHANGELOG.md に記録
これを CLAUDE.md に書いておくと、Code に「このコードを評価して」と頼んだ時に、この基準で評価してくれます。
評価結果の使い方
評価結果が出てきたら:
1. 「機能的正しさ:OK」→ 次へ
2. 「コード品質:要改善」→ 改善点を Code に伝えて修正依頼
3. 「パフォーマンス:未確認」→ パフォーマンステストを追加
4. 「セキュリティ:要確認」→ セキュリティ専門の評価をもう一度
評価を「やりっぱなし」にしない。改善点があれば、必ず修正依頼に戻す。
僕の実例
僕は訪看アプリのリリース前に、Code に次のように依頼しました:
このアプリを公開前に評価してください。次の観点で:
- 機能的正しさ
- セキュリティ
- パフォーマンス
- ユーザビリティ
問題があれば、優先度付きで指摘してください。
Code が10数項目の指摘を出して、優先度の高いものから順に対応していった、というプロセスを経ました。
【ハンズオン手順】
▼ Code 側でやること(評価基準の作成)
- Code に次のように依頼
このプロジェクトに合った「コード評価基準」を、CLAUDE.md に
追加してください。
機能・品質・パフォーマンス・セキュリティの観点を含めて、
日本語で書いてください。
- Code が CLAUDE.md に追記
- 内容を確認
▼ Code 側でやること(評価を実行)
- プロジェクトの主要なファイルを Code に評価させる
このプロジェクトのコードを、CLAUDE.md に書いた評価基準に
照らして評価してください。改善点を優先度付きでリストアップ。
- Code が評価結果を出す
- 優先度の高いものから対応
【つまずきポイント】
- 評価基準を完璧にしようとしない。最初は粗くてOK、運用しながら磨く
- すべての評価項目をクリアしないと公開できない、と思わない。重要度に応じて
- 評価結果を読まないと意味がない。必ず目を通す
【確認問題】
- 評価基準の典型的な観点を5つ挙げてください
- 評価結果を「やりっぱなし」にしないために、どうしますか?
【次のレッスンへの橋渡し】
評価基準が設計できました。本書最後のレッスンは、特に重要な「公開前のセキュリティ自己点検」です。
12-5. 公開前セキュリティ自己点検と、よくあるエラーへの対処
【学習目標】
- アプリを公開する前のセキュリティチェックリストを持つ
- よくある運用エラーへの対処を知る
【前提知識】
- ここまでの全章を読んでいること
【概念解説】
本書の締めくくりとして、公開前に絶対やっておくべきセキュリティチェックを整理します。
ブラウザでセキュリティチェックを依頼する
僕がやっているのは、ブラウザに次のような相談をすること:
私が作った Web アプリを公開する前に、セキュリティ的に
チェックすべき項目をすべてリストアップしてください。
技術構成:
- フロントエンド:HTML/CSS/JS
- バックエンド:Supabase
- ホスティング:Cloudflare Pages
- 認証:Supabase Auth
- 決済:Stripe(テストモード)
個人開発者が見落としがちな点を含めて教えてください。
ブラウザが綿密なチェックリストを返してくれます。
典型的なセキュリティチェック項目
1. 環境変数の確認
.envが GitHub に上がっていないか.gitignoreに.envが含まれているか- API キーが Public リポジトリに含まれていないか
2. RLS Policy の確認
- すべてのテーブルに RLS が有効か
- Policy がちゃんと意図通りに動くか
SELECT *が public で許可されていないか
3. 認証フローの確認
- パスワード強度の設定
- メール認証の必要性
- セッションタイムアウト
4. CORS 設定
- Site URL が正しく設定されているか
- Redirect URLs が許可リストに入っているか
- 不要なドメインが許可されていないか
5. 入力バリデーション
- フォーム入力に対するバリデーション
- SQL インジェクション対策
- XSS(クロスサイトスクリプティング)対策
6. データ漏洩リスク
- ログにパスワードや API キーを書いていないか
- ブラウザの localStorage に機密情報を保存していないか
7. 決済関連
- Webhook の署名検証
- Secret key の保護
- テストデータと本番データの分離
よくあるエラーと対処
実運用が始まると、いろんなエラーに出会います。代表的なものと対処:
1. CORS エラー
「CORS policy: No 'Access-Control-Allow-Origin' header...」
- 原因:Supabase の Site URL や Redirect URLs が正しく設定されていない
- 対処:Supabase ダッシュボードで本番ドメインを許可
2. 認証エラー
「Invalid login credentials」
- 原因:メールアドレスやパスワードの誤り、または認証状態の不整合
- 対処:Code に「認証フローを確認して」と依頼
3. RLS Policy エラー
「new row violates row-level security policy」
- 原因:RLS Policy が厳しすぎて、本来許可されるべきアクセスが拒否されている
- 対処:Code に「この Policy を見直して」と依頼、
auth.uid()の判定を確認
4. API キーが見えない
ブラウザの開発者ツールで API キーが見える
- 原因:
anon keyは公開でOKだが、service_role keyは絶対にダメ - 対処:
service_role keyをクライアント側で使っていないか確認、漏洩していたら即時無効化
5. デプロイ失敗
「Build failed」
- 原因:依存ライブラリの問題、ビルド設定の誤り
- 対処:ビルドログをスクショして Code に貼って解析
最後のメッセージ
ここまでお疲れさまでした。
本書は、僕が3週間で訪看アプリを作り上げた経験を、できるだけ忠実に「学習可能な型」に落とし込んだものです。
12章74レッスンを通じて伝えたかったことは、シンプルです:
「専門職に頼まないと無理」と思っていたことが、自分の手で出来る時代になった
14年前、僕が Web デザイナーを雇って WEB 制作を始めた頃、コードを書ける人とそうでない人の間には深い壁がありました。
今、その壁は消えつつあります。Code がいれば、誰でも作りたいものを作れる。
ただし、それは「Code に丸投げ」ではない。自分が脳の主役で、Code が手と並走相談者、というスタンスを持ち続けることが大事。スクショ伴走モデル、作業開始の儀式、CHANGELOG / TODO の習慣、評価基準の設計……。これらは全部、「自分が主役で、Code を活用する」ための型でした。
これからアプリを作る皆さんへ。最初は失敗しても、Code とブラウザがそばにいます。1工程ずつ、スクショを撮って、確認しながら、進んでください。
作りたいものを、自分の手で作れる時代へ、ようこそ。
【ハンズオン手順】
▼ ブラウザ側でやること(自分のアプリの最終チェック)
- ブラウザに次のように依頼
私が作った Web アプリの公開前最終チェックをお願いします。
技術構成:[自分のアプリの構成]
セキュリティ、機能、パフォーマンス、ユーザビリティの
4観点から、優先度付きで点検項目をリストアップしてください。
- ブラウザが点検項目を提示
- Code と一緒に1項目ずつ対応
▼ Code 側でやること(実装の最終評価)
- Code に次のように依頼
CLAUDE.md の評価基準に基づいて、このアプリ全体を最終評価してください。
優先度の高い改善点があれば、リストアップしてください。
- Code が評価結果を出す
- 対応
▼ CHANGELOG.md と TODO.md の最終整理
- Code に「現時点のすべての作業を CHANGELOG.md に整理してください」と依頼
- TODO.md は「公開後にやりたいこと」を整理
【つまずきポイント】
- 「セキュリティを完璧に」と思わない。最低限の項目を押さえてから、運用しながら改善
- ブラウザのチェックリストを盲信しない。自分のアプリの特性も踏まえて判断
- 最終チェックで100点を目指さない。70点で公開して、運用しながら90点に持っていく
【確認問題】
- 公開前のセキュリティチェックで、最も優先度が高い項目は何だと思いますか?
- 運用中のエラーに出会った時の基本動作は何ですか?
【最終メッセージ】
僕が訪看アプリを作って、現場からの「こんなアプリがあったらいいのに」を実装で応えていったように、あなたも自分の現場の課題を、自分の手で解決できる。
あなたはその力を手に入れました。
おめでとうございます。
お疲れさまでした。