課題: AI のコンテキスト切れが生産性を蝕む
Claude Code を新しいプロジェクトに投入するとき、最初に何を置くかで後の生産性がほぼ決まる。
何も置かずに作業を始めると、AI は毎回プロジェクトの文脈を推測しながら動く。「Git のコミットメッセージは英語か日本語か」「フォーマットに決まりはあるか」「どのブランチで作業するか」「複数アカウントをどう使い分けるか」——こうした前提条件を毎度指示するのは徹底できない。指示漏れが起きると、修正に余計なコストがかかる。
さらに問題なのは、ルールの曖昧性が AI の判断を散らすことだ。ある日は正しく従い、ある日は「プロジェクトの意図」を忖度して別のやり方をする。人間がレビューするたびに「あ、これは直してほしかった」という齟齬が起きるパターンだ。
この記事の背景は、八雲で内製の業務基盤 Synapse と動画制作基盤 Montage を Claude Code で日常的に開発・運用する中で、「プロジェクトの文脈を AI に正確に渡すための最小構成」が整理されてきたということにある。
パターン定義: CLAUDE.md + specs/ + .claude/ の3層構成
解決策は、プロジェクトルートに以下の3つを最初に置くことだ。
project/
├── CLAUDE.md # プロジェクト設定(Claude Code が最初に読む)
├── specs/ # 仕様書ディレクトリ
│ ├── skills.md
│ ├── workflow-rules.md
│ └── (その他仕様)
└── .claude/
├── agents/ # エージェント定義
├── skills/ # スキル(スラッシュコマンド)定義
└── settings.json # フック設定
それぞれの層が異なる責務を持つ。
CLAUDE.md は、すべての AI 実行に自動で適用されるプロジェクト設定ファイルだ。Claude Code が新しいセッションを開始するたびに、ここで定義されたルールを前提として動く。一度書けば、二度と同じ指示を繰り返す必要がない。
specs/ は、プロジェクトチーム全体(人間と AI)が参照する仕様書群だ。CLAUDE.md が「何をするか」の大枠を示すのに対し、specs/ はその「なぜ・どのように」を補完する。ドキュメント管理の単一の出処(SSOT)としても機能する。
.claude/ は、AI の振る舞いを定義するコード資産だ。エージェント(ロール定義)とスキル(再利用可能な作業手順)を配置し、settings.json で自動化フックを設定する。
設計の核: 各層に何を置くか
CLAUDE.md に書くべき4つの必須項目
1. コミュニケーション設定
## コミュニケーション
- 日本語で回答すること
これだけで AI の応答言語が統一される。シンプルだが、マルチ言語対応を必要とするプロジェクトでは重要だ。
2. Git ルール・アカウント管理
ブランチ戦略、コミット規約、マルチアカウント環境での認証確認を明示する。
## Git
- コミットメッセージ言語: 英語
- 作業ブランチ: develop(main への直接コミット禁止)
- GitHub アカウント確認:
実行前に `gh auth status` でアクティブアカウントを確認する
対象リポジトリのディレクトリとアカウントが一致しない場合は
`gh auth switch --user <account>` で切り替える
複数アカウントを使う環境では、このルールを CLAUDE.md に書いておくと、認証ミス(間違ったアカウントで push するなど)を未然に防げる。
3. エージェント委任とタスク分類
どのタイプの作業をどのエージェント・スキルで実行するかを明示する。
## 実装委譲ルール
- コード実装・バグ修正: system-developer エージェント へ委任
- ウェブ制作(Astro・React): web-developer エージェント へ委任
- 業務タスク(営業・提案): 領域責任者エージェント経由で実行
業務として記事を扱う場合は、必ず責任者エージェント経由で実行。
メインスレッドから直接スキルを呼ぶのは禁止。
このルールを置かないと、AI が全タスクを同じ優先順位で判断し、判断ロジックが散在する。責任者エージェント経由という制約を入れることで、複数の AI 実行の判断履歴が自動で集約される。詳細は[「領域責任者エージェントパターン」](「HUMAN_INPUT[CROSS_LINK]: /blog/2026-05-area-director-agent-pattern へのリンクが存在するか確認」)を参照。
4. ドキュメント自動更新ルール
CLAUDE.md の中でもとりわけ重要な項目だ。
## ドキュメント自動更新ルール
| 変更内容 | 更新対象 | SSOT |
|---|---|---|
| .claude/agents/ にエージェント追加 | specs/skills.md を更新 | specs/skills.md |
| scripts/ にスクリプト追加 | specs/scripts.md を更新 | specs/scripts.md |
| config/sites/corporate.json 変更 | 更新不要 | config/sites/corporate.json |
AI がコードを変更するたびにこの表を参照し、必要なドキュメント更新を自動で行う設計だ。設計の背景は[「ドキュメント自動更新ルールの設計」](「HUMAN_INPUT[CROSS_LINK]: /blog/2026-05-doc-update-policy へのリンク」)を参照。
重要な原則: SSOT の所在を明示する。たとえば「プロジェクト固有のルールは CLAUDE.md が SSOT」「全員が守るべき業務フローは specs/workflow-rules.md が SSOT」というように、各情報の唯一の出処を宣言しておく。これにより「どれが本当か」という迷いが消える。
specs/ — 仕様書ディレクトリの構成
Synapse で定着した構成は以下のとおりだ。
| ファイル | 責務 |
|---|---|
skills.md | エージェント・スキル・フックの一覧と呼び出し方 |
workflow-rules.md | 業務で守るべき必須ルール(SSOT の所在・禁止事項・判断基準) |
scripts.md | scripts/ 配下の全スクリプトの仕様・引数・戻り値 |
audience-tracks.md | 対象読者層の定義と判定ルール(ブログプロジェクト例) |
naming-conventions.md | ファイル名・識別子・フォルダ構造の命名規則 |
architecture.md | システム全体の構成・依存関係・データフロー |
重要なのは、各ファイルが「この情報を知りたいときはここを見る」という明確な役割を持つことだ。
.claude/ — agents / skills / settings.json の最小構成
agents/: エージェント定義は「判断が必要なロール」に絞る
Synapse の場合、事業責任者・営業責任者・開発責任者の3人に限定している。
.claude/agents/
├── director.md # 事業責任者(戦略判断)
├── sales-director.md # 営業責任者(営業案件判定)
└── dev-director.md # 開発責任者(実装ロードマップ)
各ファイルには、役割・使用可能なスキル・判断の基準を記述する。エージェントを増やす誘惑に負けないことが重要だ。「定型作業はスキルで十分」という原則を貫く。
トレードオフ: エージェント数を少なく保つことで、判断ロジックが集約されて追跡可能になる一方で、複雑な判断を1人のエージェントに集中させるリスクが生じる。Synapse では「判断が不可逆的な決定」(営業案件の着否、開発ロードマップの優先順位変更)だけをエージェント判断に委ねる方針でバランスを取っている。#### skills/: 再利用可能な作業手順を 1 スキル 1 ディレクトリで管理
.claude/skills/
├── scrape/ # 案件スクレイピング
├── propose/ # 提案書自動生成
├── submit/ # 案件提出フロー
└── pipeline/ # パイプライン可視化
1 スキル 1 ディレクトリの構造にすると、個別に編集・テスト・バージョン管理できる。スキルの概要と呼び出し方は specs/skills.md に書くが、実装詳細は .claude/skills/ に置く。二重管理を避けるため、specs/ には「何か」「どう使うか」だけ、.claude/ には「どう実装するか」を分離する。
settings.json: フックで「うっかり忘れ」を自動化する
{
"hooks": {
"SessionStart": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "gh auth status"
}
]
}
],
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "確認スクリプト: ドキュメント更新の必要性"
}
]
}
]
}
}
SessionStart フックで GWS 認証確認を、PostToolUse フックでファイル変更時のドキュメント更新リマインダーを設定している。フックはルールの「逃げ場」を塞ぐ仕組みだ。CLAUDE.md にルールを書いても、人間の指示で「急いでいるから今回はドキュメント更新スキップ」と言われることがある。フックをコード化しておくと、そうした例外を自動で検出できる。
設計の核: トレードオフと判断基準
この3層構成の背景にある判断基準を明示しておく。
CLAUDE.md は「起動時の前提」、specs/ は「参照時の詳細」
CLAUDE.md の目的は「セッション開始時に AI が即座に理解できる最小限のルール」を提供することだ。長くなると、AI が全体を把握しにくくなり、かえって指示を見落とすようになる。
トレードオフ: 短く保つことで読み込み率が上がる一方で、詳細な説明がないため「なぜそのルールがあるのか」という背景理解が浅くなる。対策は、CLAUDE.md には「何をするか」だけ書き、「なぜ」は specs/ のリンク先に委ねることだ。
## Git ルール
コミットメッセージは英語。理由は spec/workflow-rules.md の「多言語チームでの SSOT 統一」を参照。
こうすることで、CLAUDE.md は簡潔に保ちながら、詳細を知りたい人は specs/ で背景を学べる。
SSOT を宣言しない状態の損失
SSOT が不明確だと、以下のような問題が起きる:
- AI がコード内の値とドキュメント内の値の矛盾に気付いて「どちらを信じるべきか」と判断停止する
- 人間がコードを変更したのに、ドキュメントが更新されず、次の AI 実行が古い情報で動く
- ドキュメント自動更新ルールが「何を根拠に更新するか」を決められない
Synapse での事例:
対策: specs/workflow-rules.md に SSOT を宣言する表を置き、コード変更時は「この情報の SSOT は〇〇」と意識させる。
## 情報の SSOT(Single Source of Truth)
| 情報 | SSOT | 変更ルール |
|---|---|---|
| 顧客コード | config/clients.json | SSOT を変更したら specs/workflow-rules.md も更新 |
| ユーザー権限レベル | なし(SSOT はなし。その都度判断) | 権限変更は人間が社内運用ルールに従う |
| スキル一覧 | specs/skills.md | .claude/skills/ に追加したら自動更新フック実行 |
Yakumo の適用例: Synapse での実装パターン
実際に Synapse でこの構成をどう運用しているかを示す。
CLAUDE.md の実装例
Synapse の CLAUDE.md は約 300 行。以下は主要セクション:
# Synapse — Claude Code プロジェクト設定
## コミュニケーション
- 日本語で回答すること
## GitHub アカウント管理
2 つの GitHub アカウントをディレクトリで使い分ける。
実行前に `gh auth status` でアクティブアカウントを確認。
対象リポジトリとアカウントが一致しない場合は切り替える。
## エージェント委任(厳守)
- 営業案件判定: @sales-director へ委任
- 開発ロードマップ: @dev-director へ委任
- 定型作業(スクレイピング、提案書作成): 直接スキル呼び出しで OK
メインから直接エージェントを呼ぶ際のチェックリスト:
1. その判断は「複数の案から選ぶ」か(YES なら委任)
2. その判断は「取り返しがつきにくい」か(YES なら委任)
3. その判断は「ドメイン知識が必要」か(YES なら委任)
すべて NO なら定型タスク。スキル化を検討。
## ドキュメント自動更新ルール
...(前述の表)
CLAUDE.md は GitHub で version control され、変更時は必ず レビューを通す。AI が誤って CLAUDE.md を編集することはできない(settings.json で禁止フックを設定)。
specs/workflow-rules.md での SSOT 宣言
# Synapse 業務ルール集
## SSOT(Single Source of Truth)
| 情報カテゴリ | SSOT | 更新者 | 更新頻度 |
|---|---|---|---|
| 営業案件の定義 | Google Sheets(営業責任者が管理) | 営業責任者 | リアルタイム |
| 案件ステップの仕様 | specs/workflows/ | @dev-director | 月次レビュー時 |
| スキル一覧 | specs/skills.md | 自動更新フック | コード変更時 |
| 顧客コード体系 | config/clients.json | 人間(CI で validate) | 案件追加時 |
### SSOT の使い方
- 「◯◯について AI に判断させたい」→ SSOT を参照してから指示を出す
- 「◯◯が SSOT に載っていない」→ SSOT に追加してから改めて実行
- 「SSOT の値が古い」→ SSOT を更新してから AI セッションを新規起動
.claude/agents/sales-director.md での判断基準の明記
# Sales Director Agent
営業案件の着否判定、提案スケジュール調整、顧客ニーズの初期分析を担当。
## 判断基準
1. 案件着否: sales/pipeline.json と過去 6 ヶ月の提案成功率を参照し、
合致度 70% 以上なら着手。以下なら見送り推奨。
2. 優先順位: 案件規模(年額予算)× 成功確度 × 納期で rank。
3. リスク判定: 前回類似案件の失敗事例を参照。
## 使用可能なスキル
- /scrape: Web からの競合調査
- /propose: 提案書自動生成
- /check-pipeline: 営業パイプライン確認
settings.json での自動化フック
{
"hooks": {
"SessionStart": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "gh auth status"
},
{
"type": "command",
"command": "echo 'CLAUDE.md を読み込みました。実行前に gh auth status の結果を確認してください'"
}
]
}
],
"PostToolUse": [
{
"matcher": "Write.*specs/",
"hooks": [
{
"type": "command",
"command": "echo '[Warning] specs/ 直下のファイルを変更しました。必ずレビューを通してから merge してください'"
}
]
}
],
"SubagentStop": [
{
"matcher": "@sales-director",
"hooks": [
{
"type": "command",
"command": "echo '営業判定が完了しました。結果は specs/sales-director-decisions.md に記録されます'"
}
]
}
]
}
}
落とし穴: 運用で陥りやすい失敗パターン
落とし穴 1: CLAUDE.md に詳細ルールを詰め込む
最初は「あれも書かなければ」とすべてのルールを CLAUDE.md に詰め込む傾向がある。しかし、CLAUDE.md が長くなるほど AI が全体を把握しにくくなり、重要なルールが埋もれる。
運用の知見: CLAUDE.md は 300 行前後が限界。それ以上なら specs/ へ詳細を移動させ、CLAUDE.md には「〇〇は specs/workflow-rules.md を参照」とだけ書く。セッション開始時に AI が「全体を読める長さ」を基準に、分割を判断する。
落とし穴 2: 二重管理が生まれる
「CLAUDE.md にも書いた、Notion にも書いた、specs/skills.md にも書いた」という状態になると、どれが最新かわからなくなる。
対策: 各情報の SSOT を 1 箇所に決め、それ以外の場所には「〇〇を参照」とだけ書く。SSOT の所在自体を specs/workflow-rules.md に記録しておくと、後から新しいメンバーや AI も迷いにくい。
Synapse では、CLAUDE.md の「ドキュメント自動更新ルール」テーブルが SSOT 宣言を兼ねている。
落とし穴 3: フックが多すぎてノイズになる
settings.json のフックは強力だが、すべてのファイル変更に細かく反応させると警告が頻発し、やがて無視されるようになる。
運用の知見: 「本当に見落とすとまずいもの」だけをフック対象にする。Synapse では:
- ✅ フック対象:specs/ への変更(ドメイン知識が必須、AI が自動更新しても OK)
- ✅ フック対象:CLAUDE.md への変更試行(禁止。設定として機能させるため)
- ❌ フック非対象:config/ への変更(マシンリーダブルなので CI で validate 可能)
- ❌ フック非対象:ブログ記事本文の編集(AI が見出しを忘れることはないので警告不要)
判断基準は「AI のうっかりミスで致命的になるか」「人間のレビューで必ず引っかかるか」。両方 YES なら、フック化して自動化する。
まとめ
新規プロジェクトへの Claude Code onboarding は、CLAUDE.md・specs/・.claude/ の3層を最初に置くことから始まる。
- CLAUDE.md: コミュニケーション・Git・委任ルール・ドキュメント更新ルール(300 行以内)
- specs/: 仕様書群と SSOT 宣言(参照時に詳細を補完)
- .claude/: エージェント定義・スキル・フック(自動化の実装)
重要な設計判断は:
- 「何をするか」と「なぜするか」を分離する。CLAUDE.md は「何」、specs/ は「なぜ」。
- SSOT を明示する。各情報の唯一の出処を宣言しておくと、AI も人間も判断に迷わない。
- 多機能より保守性。エージェントやフックを増やすより、薄く始めて必要なものだけ足す方が長期的に安定する。
最初の設定に 2〜3 日かかるが、その後の毎日の指示コスト削減とレビュー効率化を考えると、この投資は数週間で回収できる。
関連記事: