1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeのフォルダ設計を手で組む ― ルートのCLAUDE.mdに「地図」、部署フォルダにルール、settings.jsonで読み取り禁止

1
Posted at

会社の仕事をClaude Codeに任せるとき、私(株式会社AI Orchestraのみやっち🧑‍💻)は、会社の情報を「AIカンパニー」という1つのフォルダにまとめ、その中を組織図どおりに部署で分けています。Claude Codeを使うときは、毎回このフォルダを起点に選びます。

この記事は、その形を自分のフォルダで組むための手順です。やることは3つです。

  1. ルートのCLAUDE.mdに「地図」を書く
  2. 部署フォルダのCLAUDE.mdに、部署のルールを置く
  3. .claude/settings.json で、混ぜてはいけない情報の読み取りを禁止する

YouTubeの「知らない人が多すぎる…Claude Codeの性能を10倍引き出す最適なフォルダ設計はこれだ」で話した「みやっち🧑‍💻式フォルダ設計7つの法則」のうち、ファイルに書く部分を手順に起こしたものです。動画で話していない前提や注意点は、Claude Codeの公式ドキュメントで確かめた内容を書いています。

実物のフォルダとCLAUDE.mdを画面で見たい方はこちら: 知らない人が多すぎる…Claude Codeの性能を10倍引き出す最適なフォルダ設計はこれだ(YouTube・約11分)
settings.jsonの話は 02:34、ルートの地図は 04:11、部署のルールは 05:28 からです。

完成形

この記事で作るのは、次の形です。フォルダ名は見本です。

AIカンパニー/                ← ルート。Claude Code はここを起点に起動する
├── CLAUDE.md                ← 手順1: 地図と、全部署に共通するルール
├── .claude/
│   └── settings.json        ← 手順3: 読み取りの禁止
├── 01_CompanyInfo/
├── 05_Marketing/
│   └── CLAUDE.md            ← 手順2: マーケティング部のルール
├── 06_Sales/
│   ├── CLAUDE.md            ← 手順2: 営業部のルール
│   └── projectA/
│       └── customers/       ← 手順3: ここを読み取り禁止にする
└── 07_Finance/

3つのファイルは、効き方が違います。

ファイル いつ効くか(公式ドキュメント) 書くもの
ルートの CLAUDE.md セッションの開始時に読み込まれる 地図と、全部署に共通する必要最低限のルール
部署フォルダの CLAUDE.md Claudeがそのフォルダの中のファイルを読む・書く・編集したときに読み込まれる その部署のルール
.claude/settings.json Claude Codeが、ツールを使うたびにルールとして適用する 読み取りの許可・禁止

前提

  • Claude Codeを使っていること。デスクトップアプリでもターミナルでも同じです(公式ドキュメントでは、デスクトップアプリはCLIと同じ設定ファイルを読むとされています)
  • 会社の情報を入れるフォルダを1つ決め、Claude Codeをそのフォルダを起点に起動すること。デスクトップアプリなら、セッションを始めるときに、プロジェクトフォルダとしてこのフォルダを選びます
  • フォルダは、プロジェクト単位ではなく、組織図どおりに部署単位で分けておくこと。仕事はどこかの部署に必ず属するので、議事録やノウハウの置き場所を、毎回人が考えずに決められます。私のAIカンパニーでは、トップフォルダの下に1から12までナンバリングして、組織図に重ねています

手順1: ルートのCLAUDE.mdに「地図」を書く

ルート(起点にしたフォルダの直下)に置いたCLAUDE.mdは、Claude Codeを起動するたびに読み込まれます。だから、ここには全部署に共通する必要最低限のルールだけを書き、そのうえで、フォルダ構成の一覧と、各フォルダに何が入っているかの「地図」を書きます。

地図があると、「A社向けの営業資料を作っておいて」と頼んだときに、AIが地図を見て、06_Salesを見に行けばいいと判断しやすくなります。

書き方の見本

この記事のために作った見本です(私のCLAUDE.mdの写しではありません)。

CLAUDE.md
# 株式会社〇〇 AIカンパニー

## フォルダの地図

| フォルダ | 入っているもの |
| --- | --- |
| 01_CompanyInfo/ | 会社概要、代表者のプロフィール、取引先ごとの情報 |
| 05_Marketing/ | SNS・ブログ・広告の方針と、過去の投稿 |
| 06_Sales/ | 提案資料の型、お問い合わせへの返信の型、商談の記録 |
| 07_Finance/ | 請求・経費・予算のルール |

各部署のルールは、そのフォルダのCLAUDE.mdに書いてある。

## 全部署に共通するルール

- 社名は「株式会社〇〇」と書く
- 同じ情報を2か所に書かない。原本は1つにして、ほかからは場所を示して参照する
- 調べたことや固まった判断基準は、聞かれなくても原典に書く

最後の一文は、私がルートのCLAUDE.mdに実際に書いているものです。部署が増えたり事業の内容が変わったりしたときに、Claude Codeに伝えれば、必要な判断基準やルールをAIが必要なファイルに書き足してくれます(法則7「AIに設計を育てさせる」)。ルートは毎回読まれるので、どの部署の仕事をしていても、この一文が効きます。

書くときに気をつけること

  • 長くしない。 公式ドキュメントでは、CLAUDE.mdは1ファイルあたり200行以下が目安とされています。長いほどコンテキストを使い、守られにくくなります。営業だけ、マーケティングだけで要るルールはここに書かず、手順2の部署のCLAUDE.mdへ
  • 地図は「何が入っているか」まで書く。 フォルダ名を並べただけなら、AIがフォルダを開けば分かります
  • 自分で一から書かなくてよい。 Claude Codeに「このフォルダの構成と、各フォルダに何が入っているかを、ルートのCLAUDE.mdに地図として書いて」と頼み、書かれた中身を読んで直します

確かめる

公式ドキュメントでは、/context を実行すると、Memory files の下に、起動時に読み込まれたCLAUDE.mdが並ぶとされています。ルートのCLAUDE.mdがそこにあれば、毎回読まれています。

手順2: 部署フォルダのCLAUDE.mdに、部署のルールを置く

ルートより下のフォルダに置いたCLAUDE.mdは、起動時には読み込まれません。Claudeがそのフォルダの中のファイルを読む・書く・編集したときに、初めて読み込まれます(公式ドキュメントより。1つのファイルに対する cat や head での表示も「読む」に含まれます)。

先ほどの例なら、AIが地図を見て06_Salesのファイルを読みに行った時点で、06_SalesのCLAUDE.mdが読み込まれます。だから、ここには営業部の仕事でだけ守ってほしいルールを書きます。営業以外の仕事のときには読まれないので、ルートのCLAUDE.mdを太らせずに済みます。

書き方の見本

これも見本です。私の06_SalesのCLAUDE.mdには、お問い合わせがあったときの返信の仕方などを書いています。

06_Sales/CLAUDE.md
# 営業部のルール

## お問い合わせへの返信
- 返信を書く前に、その会社とのこれまでのやり取りを確かめる
- (返信の型、言葉づかい、必ず入れる項目など、営業部で決めていること)

## 提案資料
- (提案資料の型を置いたファイルの場所と、使い方)

## ここに書かないもの
- 料金は書かない。`01_CompanyInfo/料金表.md` を参照する

原本は1つにして、ほかからは参照させる

部署単位でフォルダを分けると、同じ情報が営業のフォルダにも、マーケティングのフォルダにも書かれがちです。情報が更新されたときに片方を直し忘れると、AIはどちらが今の正本かが分からず、矛盾した情報を参照して、出力が不安定になります(法則5「SSOTの原則を守る」)。

見本の最後のように、原本は1か所にして、ほかのCLAUDE.mdからは場所を示して参照させます。動画では、私のYouTubeのフォルダのCLAUDE.mdが、ターゲットユーザーの定義をそこには書かず、原典を参照させている例を見せました。

参照の書き方には、読み込まれ方の違いがあります(公式ドキュメントより)。

書き方 読み込まれ方
@01_CompanyInfo/料金表.md のように @ を付ける インポートされ、書いたCLAUDE.mdと一緒に読み込まれる
`01_CompanyInfo/料金表.md` のようにバッククォートで囲む インポートされない

毎回読ませる必要がない原典は、@ を付けずに場所だけを書きます。インポートしたファイルも一緒に読み込まれるので、ファイルを分けても、読み込む量は減りません。

確かめる

部署のCLAUDE.mdは起動時には読み込まれないので、/context の Memory files には出ません。公式ドキュメントでは、読み込まれると、そのパスを含む Loaded の行がターミナルに表示されるとされています。

新しく置いたCLAUDE.mdを試すときは、Claudeに書かせるのではなく自分でファイルを作り、そのフォルダの中のファイルを読むようにClaudeに頼む、という確かめ方が公式ドキュメントで紹介されています。たとえば、06_Salesにあるお問い合わせの文面を読ませて返信の下書きを頼み、営業部のルールに沿っているかを見ます。

手順3: settings.jsonで読み取りを禁止する

会社の情報を1つのフォルダにまとめると、プロジェクトAで作った営業資料のスライドの型を、プロジェクトBでも容易に再利用できます。一方で、プロジェクトA・B・Cの間で混ぜてはいけない機密情報が混ざってしまう懸念があります(法則1「会社の情報を1つにまとめる」)。

これは、CLAUDE.mdに「読まないで」と書くのではなく、仕組みで制御します。公式ドキュメントでは、CLAUDE.mdはコンテキストとして扱われ強制的な設定ではないこと、権限のルールはモデルではなくClaude Codeが実装しており、CLAUDE.mdの指示ではClaude Codeが許可する内容は変わらないことが書かれています。どのフォルダの情報を読み取ってよいか、読み取りを禁止するかは、.claude フォルダ配下の settings.json に書きます。

Claude Codeに書かせる

動画で見せたとおり、書き方が分からなくても、Claude Codeにこう伝えるだけです。

settings.jsonに、「プロジェクトAの顧客情報の読み取りは禁止する」と書いてください

書かれた中身を読む

公式ドキュメントの書式では、読み取りの禁止は次のように書きます。見本のフォルダ構成なら、こうなります。

.claude/settings.json
{
  "permissions": {
    "deny": [
      "Read(./06_Sales/projectA/customers/**)"
    ]
  }
}

Claude Codeが書いたファイルを開いて、次の点を確かめます。

部分 意味(公式ドキュメント)
permissions の deny 拒否するツールの使い方の一覧。ほかに allow(確認なしで許可)と ask(毎回確認)がある
Read(...) ファイルの読み取り。拒否すると、同じパスへの編集・書き込みも止まる
./06_Sales/... 現在のフォルダ(起点にしたフォルダ)からの相対パス
** その下のすべての階層

パスの頭の書き方で、指す場所が変わります。

書き方 指す場所 例
./path または path 現在のフォルダからの相対パス Read(./06_Sales/projectA/customers/**)
/path 設定ファイルの置き場所に応じた場所(プロジェクトの設定なら起点のフォルダ) Read(/06_Sales/projectA/customers/**)
~/path ホームフォルダから Read(~/Documents/*.pdf)
//path ファイルシステムの一番上からの絶対パス Read(//Users/〇〇/secrets/**)

ルールは、deny(拒否)、ask(確認)、allow(許可)の順に評価され、最初に当てはまったものが使われます。どの設定ファイルに書かれた拒否も、別のファイルの許可より先に効きます。

どのファイルに書くか

ファイル 誰に効くか(公式ドキュメント)
.claude/settings.json このフォルダで作業するすべての人。Gitで管理しているなら、コミットしてチームと共有する
.claude/settings.local.json 自分だけ、このフォルダだけ。Gitの管理から外す
~/.claude/settings.json 自分だけ、このパソコンのすべてのフォルダ

会社のフォルダの線引きなら、ルートの .claude/settings.json に書きます。

確かめる

  1. .claude/settings.json を開き、deny に書かれたパスが、禁止したいフォルダを指しているかを見る
  2. Claude Codeに、そのフォルダの中のファイルを読むように頼み、読めないことを確かめる
  3. ターミナルのClaude Codeなら、/permissions で、すべての権限ルールと、それぞれがどの設定ファイルから来ているかを一覧できる(公式ドキュメントより)

設定ファイルの編集は、ほとんどの場合、再起動しなくても実行中のセッションに反映されます(公式ドキュメントより)。

禁止が届く範囲

公式ドキュメントでは、Read の拒否ルールが効く範囲は次のとおりとされています。

効く 効かない
Claude Codeの組み込みのファイルツール フォルダ全体への grep -r のように、ファイル名を指定せずに読むコマンド
cat・head・tail・sed・tee など、Claude Codeが認識するBashのファイルコマンド PythonやNodeのスクリプトが、自分でファイルを開く場合
< file のようなリダイレクトの対象

OSのレベルですべてのプロセスからの読み取りを止めたいときは、サンドボックスを有効にします(公式ドキュメントより)。

ハマりどころ

ルート以外から起動すると、ルートのsettings.jsonが効かない

公式ドキュメントでは、プロジェクトの .claude/settings.json は、CLAUDE.mdのように親のフォルダから引き継がれない、とされています。06_Salesを起点に起動すると、上の階層にあるルートのCLAUDE.mdは読み込まれますが、ルートの .claude/settings.json は読み込まれません。手順3の禁止を効かせるには、ルート(AIカンパニー)を起点に起動します。

settings.jsonは厳密なJSON

公式ドキュメントのとおり、// のコメントや、最後の要素の後ろのコンマは構文エラーになります。Claude Codeは次の起動時に設定のエラーとして知らせます。

/ で始まるパスは、書いたファイルで意味が変わる

Read(/secrets/**) を、プロジェクトの設定に書くと起点のフォルダの下の secrets を、ホームの ~/.claude/settings.json に書くと ~/.claude/secrets/ を指します(公式ドキュメントより)。迷ったら、プロジェクトの設定に ./ で書きます。

部署のCLAUDE.mdが /context に出ない

起動時ではなく、そのフォルダのファイルに触れたときに読み込まれるためです。手順2の「確かめる」の方法で見ます。

2つのCLAUDE.mdに、食い違うことが書いてある

読み込まれたCLAUDE.mdは、上書きされずにつなげて読まれます。2つの指示が矛盾していると、Claudeはどちらかを任意に選ぶことがあります(公式ドキュメントより)。手順2のとおり、原本を1か所にして、ほかからは参照させます。

文中に何気なく書いた @ で、ファイルが読み込まれる

CLAUDE.mdの中で、バッククォートの外に @ファイル名 と書くと、そのファイルがインポートされます(公式ドキュメントより)。インポートせずにファイルを示したいときは、バッククォートで囲みます。

まとめ

  • Claude Codeは、会社の情報をまとめたフォルダ(ルート)を起点に起動する
  • ルートのCLAUDE.mdは起動するたびに読まれる。全部署に共通する最低限のルールと、フォルダごとに何が入っているかの地図を書く
  • 部署のCLAUDE.mdは、その部署のファイルに触れたときに読まれる。部署のルールはそこに置き、原本は1か所にしてほかからは参照させる
  • 混ぜてはいけない情報の読み取りは、CLAUDE.mdではなく .claude/settings.json の permissions.deny で禁止する。書き方が分からなければ、Claude Codeに書かせて、中身を確かめる

動画では、この記事で手順にした部分のほかに、組織図どおりに部署で分ける理由、すべての情報をフォルダの中に入れない理由、AIに設計を育てさせる方法も、実物の画面を見せながら話しています。

画面の操作も含めて動画で見たい方はこちら: 知らない人が多すぎる…Claude Codeの性能を10倍引き出す最適なフォルダ設計はこれだ(YouTube)

参考(公式ドキュメント):

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?