Claude Codeのハーネスエンジニアリングに関する備忘録(2026年4月)
今回は、最近よく話題に上がるハーネスエンジニアリング(Harness Engineering)の考え方と、Claude Codeの設定を見直す際の観点を整理して 備忘録として残したものです。
あくまで筆者の環境での運用に基づく内容なので、お使いの環境やバージョンによって異なる場合があります。また、2026年4月時点の情報である点にご留意ください。
Claude Codeの設定にはCLAUDE.md、settings.json、Skills、Auto Memory、Hooksがあります。
上記の記事で設定ファイルの使い分けについて書きましたが、時間が経つと設定の一部が古くなっていることがあります。新機能で以前の回避策が不要になったり、モデルの改善で明示的な指示が要らなくなるなど、機能の発達も早くすぐにユーザーによる最適化やプラクティスはすぐに陳腐化していきます。
ハーネスエンジニアリングは、こうした設定の全体像と見直しの考え方を体系化した概念です。
この記事のターゲット
CLAUDE.mdやsettings.jsonの設定が増えてきて整理したい方
ハーネスエンジニアリングの概要を知りたい方
Claude Codeの設定を見直すタイミングを考えたい方
ハーネスエンジニアリングとは
コーディングエージェントは「モデル+ハーネス」で構成されま す。モデルはOpus 4.6やSonnet 4.6のことです。ハーネスはモデル以外のすべてです。CLAUDE.md、settings.json、Hooks、Skills、Auto Memory、MCPサーバーといった設定・制約・自動化の仕組みの総称です。
ハーネスエンジニアリングは、このハーネス部分を設計・最適化する考え方です。プロンプトエンジニアリングが1回の入出力を最適化する技術だったのに対し、ハーネスエンジニアリングはエージェントの運用環境全体を対象にします。
Claude Codeのハーネスの構成要素
CLAUDE.md はClaudeへの指示書です。ビルド手順、コーディング規約、プロジェクト固有のルールを記述します。毎回の会話開始時に読み込まれます。
Auto Memory
Claudeが作業中に自動で蓄積するメモです
プロジェクト知識が自然に溜まっていきます
Hooks
ライフサイクルの特定タイミングで自動実行される処理です
詳細はClaude CodeのHooksの使い方メモ(2026年4月)も参考にしてください
Skills
必要なときだけ読み込まれる参照情報です
コードレビュー手順や文体ガイドなど、常時は必要ないがいざというとき確実に効かせたい知識を置きます
settings.json
権限、モデル選択、MCPサーバーの設定です
allow/denyリストでツールの使用範囲を制御します
以下の記事で以前説明した内容と合わせると、ハーネスの観点で見ると各要素の役割が理解しやすいと思います。
確率的な制御と決定的な制御
ハーネスの設計で意識しておくべき区分があります。
前提として、CLAUDE.mdの指示は絶対ではありません。「mainにpushしない」と書いても、100%守られるとは限りません。
Hooksとsettings.jsonのdenyルールは決定的です。スクリプトとして毎回実行される、またはパーミッションとして毎回チェックされるため、確実に実行されます。
100%の遵守が必要なルール(フォーマッターの実行、危険操作のブロック)はHooksやdenyに書きます。判断の指針や優先順位のように、確率的でも問題ない指示はCLAUDE.mdに書きます。
設定の陳腐化
ハーネスの各設定は「モデルが単独ではできないこと」に対する対処です。モデルが改善されたり新機能が追加されたりすると、以前の設定が不要になります。
新機能が回避策を置き換えた例
Auto Memoryの登場
以前は「このプロジェクトではpnpmを使う」「ビルドにRedisが必要」のようなプロジェクト知識をCLAUDE.mdに手動で追記される形式が一般的でした。Auto Memoryが自動蓄積するようになり、こうした事実情報はCLAUDE.mdから削除できます。
HooksによるCLAUDE.md指示の置き換え
「コード変更後にPrettierを実行してください」のような指示は、PostToolUseフックに移すと毎回確実に実行されます。
Skillsの自動起動
以前のcommands/ディレクトリでは/command-nameでユーザーが明示的に呼び出す必要がありました。Skills(.claude/skills/)はClaudeが文脈から判断して自動で読み込みます。
settings.jsonのdenyルール
「.envファイルを読まないでください」のような禁止指示は、permissions.denyに"Read: .env"と書くと決定的にブロックできます。
モデル改善で不要になった指示
初期のモデルでは「ファイルを読んでから編集してください」のような基本動作の指示が必要でした。現在のOpus 4.6やSonnet 4.6ではこうした指示がなくても適切に動作します。
CLAUDE.mdの各行について「この行を削除したらClaudeが間違えるか」と問いかけてみて、答えが「いいえ」なら削除候補です。
このブログでの例
このブログのCLAUDE.mdにはBash実行ポリシーのセクションがあります。「1回のBash呼び出しにつき1コマンドのみ」「パイプやコマンド連結は禁止」というルールで、settings.jsonのallowlistバイパスを防ぐ目的です。
一方、settings.jsonのpermissions.denyにもrm -rf、git push --force、curl | bashなど危険なコマンドを個別にブロックする設定があります。Bash実行ポリシーとdenyルールは一部で機能が重複しています。denyルールで十分カバーできている部分があれば、CLAUDE.mdの記述を簡素化できるかもしれません。
設定を見直すタイミング
明確なルールがあるわけではありませんが、きっかけはいくつか考えられます。
Claude Codeのメジャーアップデート後
CLAUDE.mdが200行を超えたとき(公式推奨の上限目安)
同じ問題が繰り返し起きているとき
CLAUDE.mdに書いたルールが守られていないとき
CLAUDE.mdの行数が増えてきたら、Hooks、Skills、denyルールに移行できるものがないか確認することをお勧めします。




