Engineering claude-code 29 min read

非エンジニア向け Claude Code 展開設計 — CLAUDE.md と permission の落とし穴

非エンジニアが安全に Claude Code を使える環境を tech-lead が設計する実践ガイド。CLAUDE.md の責務境界設計・skill の入出力スコーピング・permission model の落とし穴 3 パターンを整理する。

公開 2026-05-25 森本 拓見

本記事に登場する HUMAN_INPUT マーカーとは、AI 執筆 skill が記事本文に残す「ここは人間が後で確定値を埋めるべき」を示すプレースホルダー(形式例: <!-- HUMAN_INPUT: 数値を記入 -->)。

本記事はテックリード / シニアエンジニア / アーキテクト向けに、Claude Code を非エンジニアに安全に展開するための設計パターンを整理する。経営判断(何を委ねるか・投資の意思決定・ROI の測り方)は sister pillar 「非エンジニアが Claude Code を使う組織設計」 に委ねる。ここでは tech-lead が設計・実装できるレベルの技術的担保 を扱う。

非エンジニアへの Claude Code 展開は、3 軸で技術的に担保できる:

  1. CLAUDE.md の 3 層スコーピング — global / project / directory で責務境界を分離する
  2. skill の I/O 制約 — 入力・出力・禁止操作を宣言して scope creep を機械的に防ぐ
  3. permission model の 3 レイヤー — read-only zone / write guard / bash 禁則でファイル操作の安全網を張る

この 3 軸が揃っていない状態で非エンジニアに Claude Code を渡すと、何が起きるかを先に示しておく。

Key takeaway 3 点:

  1. CLAUDE.md は「書けばよい」ではなく「どの層に何を書くか」の責務設計が本質だ。global / project / directory の 3 層を混同すると、制約が衝突して非エンジニアが混乱する
  2. skill の I/O contract(入力・出力・禁止操作の宣言)は、scope creep の機械的な遮断装置だ。宣言がなければ LLM は文脈から「良かれと思って」範囲外を実行する
  3. permission model のミスはサイレントに発生する。read-only zone を設定せずに「触らないよう指示した」だけでは、非エンジニアが Claude Code の操作範囲を理解しないまま使い続ける

なぜ非エンジニアへの Claude Code 展開を設計するのか — 八雲の dogfooding 文脈

非エンジニアが Claude Code を使う業務場面の実例

八雲では、Claude Code を使う主な担当者が「エンジニアではない代表(PM 兼事業責任者)」だ。具体的には以下の業務で Claude Code が稼働している。

  • コーポレートサイト運用: Astro + React + Tailwind で構築したサイトの記事更新・デザイン調整。HTML/CSS の読み書きはできるが、アーキテクチャ設計は外部エンジニアのレビューが必要なレベルの担当者が日常的に操作している
  • Synapse(業務横断エージェント組織)の skill 運用: Claude Code の .claude/skills/ に定義した提案書作成・議事録生成・週次レポートの各スキルを PM が直接呼び出す
  • 記事パイプライン(mcluhan エンジン)の操作: brief YAML を渡してエージェントが記事を生成する一連のフローを、コードを書かずに Claude Code 経由で操作する

具体的には、代表(PM 兼事業責任者)が 2025 年 7 月から daily で Claude Code を触り続けている。コーポレートサイトの記事更新、synapse の skill 呼び出し、mcluhan の記事パイプライン操作——いずれもコードを直接書かず、Claude Code を「業務インタフェース」として運用している。

これらは「Claude Code を使わせている」のではなく「Claude Code に渡せる環境を tech-lead が設計した」結果として成立している。設計がなければ、非エンジニアが Claude Code を操作した瞬間に scope 逸脱が起きる。

tech-lead が設計しないと何が起きるか

設計なしで非エンジニアに Claude Code を渡した場合、以下の 3 種類の問題が順番に発生する。

第 1 段階: scope 逸脱(最初の数日以内) Claude Code は「意図を伝えると実装まで完結させるエージェント」だ。非エンジニアが「このページのレイアウトを直して」と指示すると、Claude Code は関連すると判断した CSS ファイル、コンポーネント、時には設定ファイルまで書き換える。「直接触ってほしくなかったファイルが変わっていた」が第 1 段階の症状だ。

第 2 段階: 事故の無音進行(数週間以内) scope 逸脱が繰り返されても、非エンジニアにはどのファイルが変わったか判断できない。Git の diff を見ても意味が理解できないため、「動いているように見える」状態で積み上がっていく。

第 3 段階: 影響範囲の爆発(数週間〜数ヶ月後) 積み上がった変更の影響が本番で顕在化する。原因の特定が難しく、修正に通常の数倍の工数がかかる。

八雲では、このサイクルを最初の synapse 構築期に経験した。「制約は後で追加すればいい」という考えで始めて、権限を与えすぎた結果、エージェントが設定ファイルを書き換えて別業務に影響が出た。具体的には、Chrome の設定(タブグループ・固定タブ)をエージェントが勝手に削除し、日常業務の作業環境が一度リセットされる事態になった。並行して system-developer エージェントを ClaudeCode 上に構築済みだったため、原因特定 → 設定復元 → CLAUDE.md への scope 制約追加までを 約 3 日で完了させたが、もし system-developer が無ければもっと長引いた事故だ。

この体験が 3 軸設計の出発点だ。


CLAUDE.md の責務分離 — global / project / directory の 3 層スコーピング

global CLAUDE.md: 全プロジェクト横断で守らせるルール

~/.claude/CLAUDE.md(macOS では ~/.claude/CLAUDE.md)は、ユーザーが操作する全プロジェクトに適用される。ここに書いた制約は、プロジェクトを問わず常に有効だ。

global に書くべき内容:

# ユーザー共通設定

## ハードコード禁止(全プロジェクト共通)
- マジックナンバー禁止: 色・フォントサイズ・スペーシングは設定ファイルから参照する
- フォント直接指定禁止: loadFont を個別コンポーネントで呼ばない

## コミット規約
- コミットメッセージは英語
- 1 コミット = 1 論理単位

global に書いてはいけない内容:

  • プロジェクト固有のディレクトリ名・ファイル名
  • 特定プロジェクトの禁止操作(例: src/content/magazine を直接編集禁止)
  • 業務ドメイン固有のルール(「提案書は Google Drive に保存」など)

プロジェクト固有のルールを global に書くと、他プロジェクトでの操作を意図せず制限する。非エンジニアが「別のプロジェクトで動いていたのにここでは動かない」という混乱を起こす。

project CLAUDE.md: プロジェクト固有の制約

プロジェクトルートに置く CLAUDE.md は、そのプロジェクト内での全操作に適用される。非エンジニアが操作する前に tech-lead が整備すべき、最も重要な層だ。

project に書くべき内容:

# Corporate Site

## 参照先ドキュメント(判断前に読む)
| 参照先 | 内容 |
|---|---|
| `src/_docs/ARCHITECTURE.md` | SSOT マップ・ハードコード禁止一覧 |
| `src/_docs/DESIGN.md` | 視覚言語(色・タイポグラフィ・余白) |

## 不変規約
- Git: コミットメッセージは英語。作業は `develop` ブランチ(main 直 push 禁止)
- ハードコード禁止: 値は SSOT に置いてから参照する
- `src/` 配下を編集する前に該当ディレクトリの `_README.md` を読む

## 実装の委譲
- コード・config・YAML/JSON の構造化編集は原則として `web-developer` / `system-developer` に委譲

project で必ず定義する 3 要素:

  1. 参照先の明示 — どのドキュメントを読んでから作業するか
  2. 不変規約 — 違反が即座に問題になる制約(Git ブランチ・ハードコード禁止)
  3. 委譲ルール — 何を誰に委ねるか(非エンジニアが直接実行すべきでない操作の明示)

directory _README.md: ディレクトリ単位のスコープ制限

CLAUDE.md の指示だけでは「プロジェクト全体の制約」しか表現できない。ディレクトリ単位でスコープを絞るために、各ディレクトリに _README.md を置く。

八雲の corporate-site では、src/content/magazine/_README.md に以下を定義している:

# Magazine Content

記事は `{cluster}/{category}/{slug}.md` のパスに置く。
ファイル名規約: `{YYYY-MM}-{kebab-case-slug}.md`

## 操作可否
- slug frontmatter フィールドは変更禁止(URL に直結する)
- cluster・category は物理パスと frontmatter が一致していること
- draft: true の記事は直接編集可。draft: false は blog-gate を通す

Claude Code は src/content/magazine/ 配下のファイルを操作する前に、この _README.md を読む。非エンジニアが「記事を追加して」と指示すると、エージェントは _README.md の規約に従ったパスに適切なフォーマットで記事を配置する。

3 層の優先順位と衝突解決ルール

3 層の優先順位は directory _README.md > project CLAUDE.md > global CLAUDE.md だ。より具体的な制約が優先される。

衝突の典型例:

衝突パターン解決
global「コミットメッセージは英語」vs project「コミット前に CHANGELOG を更新する」衝突ではなく補完関係。両方を守る
global「ハードコード禁止」vs directory「このファイルの数値は固定値でよい」directory の制約が global より具体的なので directory 優先
project「develop ブランチで作業」vs directory「このディレクトリは直接 main へ」矛盾するため、どちらかを削除するか directory を更新する

設計の原則: 下位層(directory)が上位層(global/project)を override できるが、矛盾はエラーとして認識できないまま動作する。tech-lead は 3 層間に矛盾がないか定期的にレビューする必要がある。

八雲での事例は 2026-05-18 の Opus 過剰実行だ。global CLAUDE.md の例外節とプロジェクト CLAUDE.md の委譲ルールが矛盾し、YAML 構造化 retrofit を main thread Opus が直接実行した(blog-ops/retros/2026-05-18-opus-mechanical-edit-overreach.md に記録)。


skill の入出力スコーピング — scope creep を機械的に防ぐ設計

I/O contract の書き方 — 入力・出力・禁止操作を SKILL.md に宣言する

skill(.claude/skills/{skill-name}/SKILL.md)は「作業手順の定義ファイル」だが、I/O contract がなければ LLM の自由裁量実行が始まる。I/O contract は以下の 3 要素で構成する。

# SKILL.md の I/O contract セクション

## 入力
- `slug`: 記事の識別子(string)
- `brief`: `blog-ops/articles/{slug}.yaml` のパス

## 出力
- `draft_md`: `blog-ops/output/rewrite/{slug}/draft_v{n}.md`
- `_state.json``current_version` フィールドのみ更新

## スコープ制限(禁止操作)
- `src/content/magazine/` 配下への直接書き込み禁止(出力は `blog-ops/output/` のみ)
- Git コミット・push 禁止
- 対象 slug 以外のファイルへの書き込み禁止

この I/O contract が SKILL.md に存在することで、Claude Code は skill の実行範囲を事前に宣言された境界で制限する。非エンジニアが skill を呼んだとき、LLM は「I/O contract に書かれていないファイルは触れない」と解釈して動く。

運用上の手応えとして、I/O contract を SKILL.md で明示している skill(blog-tech-write / blog-case-write / blog-review 等)は、運用開始以降「contract に書かれていない場所への書き込み」が観測されていない。ただし違反試行を機械的にカウントするロギング基盤は未整備で、「遵守率 X%」のような定量データはまだ持っていない。次フェーズで gate のログから違反試行を自動集計する仕組みを組み込み、「I/O contract が機能している」ことを観測可能な指標に昇格させる予定だ。

I/O contract 設計の 3 原則:

  1. 出力先は具体的なパスで宣言するoutput/ のような抽象パスではなく blog-ops/output/rewrite/{slug}/draft_v{n}.md のように具体化する
  2. 禁止操作は「何をしてはいけないか」ではなく「どこには書いてはいけないか」で書く — 範囲を正確に伝える
  3. Git 操作は明示的に禁止する — 指示しなければ「コミットしておこう」と判断することがある

scope creep パターン 3 つとその遮断方法

tech-lead が把握すべき scope creep の頻出パターンを整理する。

パターン A: 関連ファイルへの連鎖書き込み

症状: 「A ファイルを直して」という指示で、関連する B・C ファイルも「改善」される

原因: I/O contract に出力先が宣言されておらず、LLM がコンテキストから判断して「関連しそうなもの」も更新する

遮断方法: ## スコープ制限 に「対象ファイル以外への書き込み禁止」を明記する

パターン B: Git 操作の自動実行

症状: skill の実行後、自動的にコミット・push が行われる

原因: I/O contract に Git 操作の禁止が書かれておらず、「変更を保存するのは当然」という LLM の判断で実行される

遮断方法: ## スコープ制限 に「コミット・push 禁止」を明記する。加えて project CLAUDE.md に「コミットは明示的に指示されたときのみ」を書く

パターン C: 依存ファイルの自動更新

症状: config を変更する skill が、config を参照しているコンポーネントも「整合させるために」書き換える

原因: 変更の波及を「補完行動」として LLM が実行する

遮断方法: ## スコープ制限 に「参照先コンポーネントの書き換え禁止」を明記する。依存する変更が必要なら、別 skill として切り出して独立した I/O contract で管理する

skill の呼び出しスコープを CLAUDE.md に宣言する設計

skill の I/O contract だけでは不十分な場合がある。CLAUDE.md 側から「この skill はこのスコープで使う」を宣言する設計を追加する。

# project CLAUDE.md の skill スコープ宣言セクション

## skill の使用スコープ
- `blog-tech-write``blog-ops/articles/` に valid な brief が存在する場合のみ呼ぶ
- `web-developer``src/` 配下の実装のみ担当(Git 操作・config 変更は不可)
- `system-developer``scripts/``blog-ops/config/` の編集のみ担当

この宣言により、非エンジニアが「blog-tech-write を呼んで」と指示したとき、CLAUDE.md 側の制約が先に適用される。brief が存在しない状態で skill が起動しようとしても、CLAUDE.md の制約が止める。


permission model の設計 — read-only zone / write guard / bash 禁則

read-only zone の設計 — 参照は許可・書き込みは禁止するファイル群

Claude Code の permission 設定(.claude/settings.json)の denyList を使い、特定ファイル・ディレクトリへの書き込みを禁止する。

// .claude/settings.json
{
  "permissions": {
    "allow": [
      "Read(**)",
      "Write(src/content/magazine/**)",
      "Write(blog-ops/output/**)"
    ],
    "deny": [
      "Write(src/_docs/**)",
      "Write(.claude/**)",
      "Write(src/config/**)",
      "Write(package.json)",
      "Write(tsconfig.json)"
    ]
  }
}

read-only zone として設定すべきファイル群:

ファイル / ディレクトリ理由
src/_docs/SSOT ドキュメント。変更すると全エージェントの挙動が変わる
.claude/エージェント定義・skill 定義。変更は必ず tech-lead が行う
src/config/brand.ts・seo.ts など。設計変更なしに書き換えるべきではない
package.json / tsconfig.json依存関係・コンパイル設定

非エンジニアが「DESIGN.md の色定義を変えて」と指示したとき、read-only zone が設定されていれば Claude Code は「このファイルへの書き込みは許可されていません」と応答する。設定なしでは、意図せず視覚言語定義が書き換わる。

write guard の設計 — 書き込み可能範囲を最小化する方針

read-only zone の反対概念が write guard だ。「書き込んでよいのはここだけ」という allowList 方式で、書き込み範囲を最小化する。

write guard の設計方針は以下の 2 段階で考える。

段階 1: ロール別の書き込み可能範囲を定義する

非エンジニアが操作するロール(web-developersystem-developer)ごとに、書き込み可能範囲を分ける。

# CLAUDE.md の委譲ルールと write guard の対応

| ロール | 書き込み可能範囲 |
|---|---|
| `web-developer` | `src/components/``src/pages/``src/content/` |
| `system-developer` | `scripts/``blog-ops/config/``blog-ops/output/` |
| 非エンジニア直接操作 | `src/content/magazine/**/*.md`(記事本文のみ) |

段階 2: 書き込み可能範囲はプロジェクトの進行とともに変更する

初期は最小 write 権限から始め、実績に応じて徐々に広げる。「全部書き込み可能にしておいて後で絞る」は機能しない。人間は「設定を変えるのが面倒」という理由で放置するからだ。最初から最小権限で始めることを原則とする。

八雲では .claude/settings.local.json の permission allow エントリを段階的に追加してきた。corporate-site / synapse 両リポジトリの settings.local.json の git history(git log --follow .claude/settings.local.json)で具体的な追加タイミングと判断の流れが確認できる。

bash 禁則の設計 — 非エンジニアに bash 実行を渡さないための設定

bash コマンドの実行は、非エンジニアに渡すにはリスクが高い。rm -rfgit push --force・データベースへの直接操作——これらを「意図せず実行させてしまう」設計上の欠陥は、permission model で防ぐべきだ。

// .claude/settings.json の bash 禁則設定
{
  "permissions": {
    "deny": [
      "Bash(git push*)",
      "Bash(git commit --amend*)",
      "Bash(rm -rf*)",
      "Bash(git reset --hard*)",
      "Bash(git checkout --*)"
    ]
  }
}

bash 禁則の 3 カテゴリ:

カテゴリ禁則例理由
破壊的 Git 操作git push --forcegit reset --hard履歴を消去・リモートを破壊する
ファイル削除rm -rffind ... -delete取り消しできない削除
インフラ操作gcloudaws 系コマンド課金・本番環境への影響

代替パターン: bash を直接渡す代わりに、許可された操作を skill として定義する。「Git add・commit・push を一連でやって」という操作を skill に封じ込め、I/O contract で「push は禁止」を宣言する。bash ではなく skill 経由にすることで、禁止操作のゲートが通る。


事故防止パターン 3 つ — 八雲での実例から

パターン 1: CLAUDE.md 未整備によるスコープ逸脱

状況: synapse の初期構築時、CLAUDE.md に write guard も scope 制限も書いていない状態で非エンジニアが作業を依頼した。

何が起きたか: 「提案書スキルを改善して」という指示を受けたエージェントが、スキルファイルだけでなく、関連する config ファイル・他スキルとの依存部分を「整合させる」という判断で複数ファイルを書き換えた。直接依頼した変更は正しかったが、波及した変更が別業務に影響した。

原因の構造: CLAUDE.md に「対象ファイル以外は変更しない」という制約がなかった。LLM は「整合性を保つ」ことを合理的な判断として実行した。

設計的な解決: project CLAUDE.md に以下を追加した。

## 実装の委譲スコープ
- 依頼されたファイル以外は変更しない
- 「関連するから」という理由での追加変更は禁止
- 複数ファイルに影響が及ぶ変更は、事前に影響範囲を列挙してからユーザー確認を取る

当時は影響ファイル数・復旧時間を systematic に記録していなかったが、CLAUDE.md に「依頼されたファイル以外は変更しない」というスコープ制約を加えた以降、同パターン(関連ファイル自動編集による波及)は観測されていない。「設計で潰せた」ことが可視化された最初のケースだ。

パターン 2: permission 過剰付与によるファイル破壊

状況: 開発中に「全ファイルへの Read/Write 権限を付与しておけば作業がしやすい」という理由で、settings.json の denyList を空にした。

何が起きたか: 非エンジニアが「サイトの設定を整理して」という曖昧な指示を出した。エージェントは src/config/brand.ts(ブランド設定の SSOT)の禁則語配列を「古そうなものを削除」という判断で書き換えた。すぐには気づかず、後続の blog-gate で禁則語チェックが正常に通過するようになり(本来 NG であるべき表現が通過していた)、複数記事が公開された後に発覚した。

原因の構造: write guard がなく、「整理」という曖昧な指示に対して LLM がファイルの目的を誤解した。SSOT ファイルへの write 権限があったことで、設計者が意図しなかった変更が行われた。

設計的な解決: src/config/ を read-only zone に設定した。設定ファイルの変更は tech-lead が直接行うルールを CLAUDE.md に明記し、非エンジニアによる操作対象から除外した。

2026-05-18 朝の blog-audit で発覚した。magazine-reset-timeline の一斉公開(48 本)で HUMAN_INPUT 漏出 4 本・内部リンク 76 本死滅が確認され、同日中に記事を撤退させた(commit 086bb9b7)。

パターン 3: skill 未定義による LLM 自由裁量実行

状況: 「週次レポートを作って」という業務を、skill として定義せずに直接 Claude Code に指示していた。

何が起きたか: 最初の数回は意図した形式のレポートが出力された。しかし LLM は毎回「どのファイルから情報を取得するか」「どの形式で出力するか」を自律的に判断するため、出力が一定しなかった。あるときは Google Drive へ直接保存しようとし(外部 API の操作が発生)、あるときは参照してはいけない顧客データのファイルを開いて情報を取得した(意図しないファイルアクセス)。

原因の構造: I/O contract がなかったため、「週次レポートを作る」という目的に向かって LLM が自律的に入力・出力・操作手段を選んだ。目的は正しかったが、手段が毎回異なり制御できなかった。

設計的な解決: weekly-report skill を定義し、I/O contract に以下を書いた。

## 入力
- 参照ファイル: `data/weekly-metrics.json`(このファイルのみ)

## 出力
- `reports/weekly/{YYYY-MM-DD}.md`(このパスのみ)

## スコープ制限
- 外部 API 呼び出し禁止(Google Drive・Sheets への直接操作禁止)
- `data/` 配下の `weekly-metrics.json` 以外のファイルへのアクセス禁止

.claude/skills/ 配下に skill 定義が集約されている。主要なものは .claude/skills/blog-tech-write/SKILL.md.claude/skills/blog-review/SKILL.md.claude/skills/blog-plan/SKILL.md.claude/skills/blog-fact-check/SKILL.md.claude/skills/blog-fill-ssot/SKILL.md などだ(find .claude/skills -name 'SKILL.md' で一覧確認できる)。

3 パターンの共通構造と事前設計でどう防ぐか

3 つのパターンに共通する構造がある。

パターン欠けていた設計要素設計的な対応
スコープ逸脱project CLAUDE.md のスコープ制限「対象以外は変更禁止」を CLAUDE.md に宣言
ファイル破壊read-only zone の設定settings.json の denyList で SSOT を保護
自由裁量実行skill の I/O contract入力・出力・禁止操作を SKILL.md に宣言

共通するのは「LLM は指示の空白を自律的に埋める」という性質だ。設計の空白は LLM の自由裁量実行を招く。tech-lead の仕事は「制約の設計」ではなく「空白の撲滅」として理解するとよい。

事前設計のチェックリスト:

  • CLAUDE.md の 3 層(global / project / directory)に矛盾がないか
  • 各 skill に I/O contract(入力・出力・禁止操作)が宣言されているか
  • settings.json の denyList に SSOT ファイル・インフラ設定が含まれているか
  • bash 禁則に破壊的操作(force push・rm -rf)が含まれているか

八雲での dogfooding — Synapse で実際に動いている設計

八雲では Synapse(Claude Code 上に組んだ業務横断エージェント組織。.claude/agents/ の責任者エージェント群 + .claude/skills/ のスキル群)を、この 3 軸設計の上で運用している。

具体的な構成例:

global CLAUDE.md: ハードコード禁止・一人称ルール・GitHub アカウント切り替え規約

project CLAUDE.md(corporate-site): 参照先ドキュメント一覧・develop ブランチ規約・委譲ルール・ハードコード禁止のプロジェクト固有版

directory _README.md(src/content/magazine/): 記事の物理構造・frontmatter 必須フィールド・slug 変更禁止

settings.json denyList: src/_docs/src/config/.claude/package.json

skill I/O contract(blog-tech-write): 入力は brief YAML のみ、出力は blog-ops/output/ のみ、コミット禁止・src/content への直接書き込み禁止

この設計により、非エンジニアの代表が日常的に Claude Code を使って記事管理・サイト更新を行っても、設計者(tech-lead)が意図した範囲を逸脱しない状態が維持されている。

非エンジニアの代表が daily で Claude Code を操作している直近 3 ヶ月、scope 逸脱由来の事故は 0 件で運用できている。「設計で防げている」ことの傍証として捉えているが、件数を機械的に集計する仕組みはまだない。今後は gate のログから「防御が発火した回数」を自動カウントする計装を入れて、0 件で運用できているN 件の試行を gate が止めた のように観測可能にする予定だ。


sister 記事への接続 — 経営判断の narrative

本記事は「tech-lead が設計・実装する側の技術論」だ。CLAUDE.md の構造設計・skill の I/O contract・permission model の設定——これらは全て「設計として書ける」具体的なパターンを扱った。

この設計を「誰に渡すか」「何の業務から始めるか」「どの段階で権限を広げるか」という意思決定の軸は、経営者・PM 側の判断だ。

sister pillar 「非エンジニアが Claude Code を使う組織設計」 では、同じ設計環境を「使う側(非エンジニア)」の narrative で書いている。skill 委譲の段階的な進め方・Stage 1〜3 の移行条件・KPI の設定——tech-lead が整えた環境をどう使うかの意思決定軸を扱う。

役割分担の整理:

役割担当記事
環境を設計・整備する本記事(tech-lead 向け)
環境を使う意思決定をするsister pillar(非エンジニア / PM / 経営者向け)

tech-lead が本記事の 3 軸設計を実装し、非エンジニアが sister pillar の stage 移行判断に従って使い始める——この役割分担が、Claude Code の組織展開を技術的・組織的に担保する。

汎用設計論(ハーネスのアーキテクチャ原則)は 「AI エージェントハーネスの設計原則」 で扱っている。本記事は Claude Code 固有の「非エンジニアに渡す」文脈に特化したパターンであり、ハーネス設計の一実装として位置付けられる。


まとめ — tech-lead が持ち帰る 3 軸設計の原則

非エンジニアへの Claude Code 展開は「渡すだけ」では機能しない。以下の 3 軸を設計した上で渡すことが、技術的担保の最小要件だ。

CLAUDE.md の 3 層スコーピング:

  • global: 全プロジェクト横断の制約(ハードコード禁止・コミット規約)
  • project: プロジェクト固有の参照先・委譲ルール・不変規約
  • directory _README.md: ファイル・ディレクトリ単位のスコープ制限

skill の I/O contract:

  • 入力: 受け取るパラメータ・参照可能ファイルを明示
  • 出力: 書き込み可能なパスを具体的に宣言
  • 禁止操作: Git 操作・範囲外ファイルへの書き込みを明示

permission model の 3 レイヤー:

  • read-only zone: SSOT ファイル・インフラ設定を denyList で保護
  • write guard: 書き込み可能範囲を最小化した allowList
  • bash 禁則: 破壊的操作(force push・rm -rf・インフラ操作)を明示的に禁止

3 つ全てが揃ったとき、初めて非エンジニアへの委譲が「設計として安全」になる。どれか一つが欠けていると、LLM が指示の空白を自律的に埋め始め、設計者が意図しない副作用が静かに積み上がる。

設計の完成は「最初に全部書く」ことではない。最小の制約から始め、事故から学んで追記し続ける——この改善サイクルを回す仕組みそのものが、非エンジニアへの安全な Claude Code 展開の本質だ。

SHARE X でシェア B! はてブ