はじめに
CLAUDE.mdの有無の違いによって生成結果がどう変化するのか検証してみました。この記事を読むと、CLAUDE.mdが何をするファイルなのか、そしてどんなときに効いて、どんなときに効かないのかが分かります。
この記事でわかること
- CLAUDE.mdの役割と置き場所
- なぜ「置いただけ」では効かないことがあるのか
- 確実に効かせるための具体的な手順
先に結論だけ: CLAUDE.mdはセッション開始時にだけ自動で読み込まれます。そのため、すでに始まっているセッションの途中でファイルを置いても効きません(パターン②で実証)。確実に効かせるなら、ファイルを置いてからセッションを開き直すのが正解です(パターン③で実証)。急ぐ方は記事末尾の「検証結果まとめ」の表だけでも全体像がつかめます。
CLAUDE.mdとは
CLAUDE.mdとは、「Claude Codeに対する指示書」のことです。
Claude Codeに対して「このプロジェクトではどのようなコーディング規約を守るべきか」「どの技術スタックを使っているか」など前提となる情報を共有することできます。
なぜ使うのか?
毎回「このプロジェクトのルールは…」と説明する必要がなくなり、Claude Codeを利用するメンバーが同じ前提条件で作業しやすくなります。
CLAUDE.mdはどこに置くのか
基本はプロジェクトのルートディレクトリ(一番上の階層)にCLAUDE.mdという名前で保存します。Claude Codeはセッション開始時にこのファイルを読み込み、その内容を以降の作業に反映します。置き場所は主に2か所あります。
# プロジェクトごとのルール(リポジトリに含める)
./CLAUDE.md
# 自分専用の全プロジェクト共通ルール(個人設定)
~/.claude/CLAUDE.md
チームで共有したいルールはプロジェクト直下の ./CLAUDE.md に置き、Git管理に含めます。「コメントは日本語で書きたい」のような個人的な好みは ~/.claude/CLAUDE.md に置きます。
CLAUDE.mdあり・なしで動作を比較してみた
今回用意したCLAUDE.mdの中身はたった2行です。
htmlとjsとcssはそれぞれ別で記述すること
CSSのセレクタはスネークケースで記述すること
この2つのルールが守られるかどうかをCLAUDE.mdなし・ありの場合で確かめました。
指示文は架空企業名以外は同じ内容としています。
| パターン | CLAUDE.md | セッション |
|---|---|---|
| ① なし | 置かない | - |
| ② あり(同一セッション) | 置く | ①と同じセッションで続けて指示 |
| ③ あり(別セッション) | 置く | セッションを開き直して指示 |
パターン①:CLAUDE.md なし
まず CLAUDE.md を置かない状態で、次のように指示しました。
without-claude-md配下に、かっこいいIT企業のトップページを作成してください。
名前は架空の名称であるN_U_X_1としてください。
出てきたのは、1枚の index.html に HTML・CSS・JS がすべて同居したコードでした。<style> も <script> も同じファイルの中にあります。
<!-- index.html(1ファイルにすべて同居) -->
<head>
<style>
/* CSSがここに数百行 */
.hero { min-height: 100vh; /* ... */ }
.nav-links a { color: var(--muted); /* ... */ }
</style>
</head>
<body>
<!-- HTML本体 -->
<script>
// JavaScriptもここに同居
const header = document.getElementById('header');
</script>
</body>
デザインはかっこよく仕上がっていますが、CLAUDE.md がない状態なので、ファイル分割や命名規則は当然ありません。

without-claude-md/ には index.html が1枚だけ。応答にも「単一HTMLファイル」と書かれています。パターン②:CLAUDE.md あり(同じセッション)
次に、CLAUDE.md を置いてから、パターン①と同じセッションのまま続けて指示しました。
続いて
with-claude-md配下に、かっこいいIT企業のトップページを作成してください。
名前は架空の名称であるN_U_X_2としてください。
ところが、出てきた index.html は……またしても1ファイルに全部同居したままでした。CLAUDE.md に書いたはずの「ファイルを分ける」「スネークケース」が、まったく反映されていません。
<!-- N_U_X_2 でも、やはり1ファイルのまま -->
<head>
<style>
.nav-links a { color: var(--ink-soft); /* ケバブケースのまま */ }
</style>
</head>

with-claude-md/ に CLAUDE.md はあるのに、生成物は index.html 1枚のままです。なぜCLAUDE.mdを置いたのに反映されなかったのか
公式によると「Claude は各セッションの開始時にそれらを読みます。」とのこと。
パターン①の作業時点では、まだCLAUDE.mdは存在していませんでした。
パターン①完了後にCLAUDE.mdを置きましたが すでに始まっているセッションは、CLAUDE.mdを自動では読み直してくれない というわけです。
同じセッションの途中で CLAUDE.md を効かせたい場合は、ファイルを置いた後に「CLAUDE.md を読み直してから作業して」 など明示的に読み込ませるか、別セッションを開始することで CLAUDE.md を読ませるかが必要となるようです。
パターン③:CLAUDE.md あり(新しいセッション)
CLAUDE.md は置いたまま、セッションを一度終了して開き直し、改めて指示を出しました。
with-claude-md-v2配下に、かっこいいIT企業のトップページを作成してください。
名前は架空の名称であるN_U_X_3としてください。
結果、ファイルがきれいに3つに分かれました。
<!-- index.html(構造だけ。CSSとJSは外部ファイル) -->
<head>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<header class="site_header" id="site_header">
<a href="#hero" class="site_logo">
<span class="logo_mark">N_U_X_3</span>
</a>
<!-- ... -->
</header>
<script src="script.js"></script>
</body>

CLAUDE.md を Read し、「①別ファイル ②スネークケース」の2ルールを認識したうえで、index.html / style.css / script.js を別々に書き出しています。そして CSS は別ファイルになり、セレクタもルールどおりスネークケースで書かれています。
/* style.css(別ファイル。セレクタ・変数がスネークケース) */
:root {
--color_bg: #05060a;
--color_accent: #4af0c4;
}
.site_header {
position: fixed;
/* ... */
}
.nav_link {
color: var(--color_muted);
}
JavaScript も script.js として独立しました。CLAUDE.md に書いた2つのルールが、両方とも生成コードに反映されています。
補足:CSSのセレクタは本来ケバブケース(
.site-header)が一般的で、スネークケース(.site_header)はあまり使いません。ここでは「CLAUDE.mdが既定の書き方の慣習すら上書きできる」ことを分かりやすく示すため、あえてスネークケースを指定しています。指定どおりに変わっているのが確認できます。
検証結果まとめ
| 観点 | パターン① CLAUDE.mdなし | パターン② CLAUDE.mdあり 同一セッション | パターン③ CLAUDE.mdあり 別セッション |
| CLAUDE.mdの反映 | 対象外 | 反映されない | 反映される |
| 生成ファイル構成 | html1ファイル | html1ファイル (CLAUDE.md効かず) | html,js,css3ファイルに分離 |
| CSSセレクタ名規則 | ケバブケース | ケバブケース (CLAUDE.md効かず) | スネークケース |
GitHubで検証コードを公開しています
今回の検証は再現できるようにGitHub(xpendev/claude-md-html)で公開しています。
without-claude-md(パターン①)
with-claude-md(パターン②)
with-claude-md-v2(パターン③)
まとめ
- CLAUDE.mdはClaude Codeがセッション開始時に自動で読み込む指示書
- 基本はプロジェクトのルートディレクトリに置く
- セッション開始後にCLAUDE.mdを追加しただけでは自動反映されない(パターン②で実際に無視された)
- 確実に効かせるには新しいセッションを開始してから指示する(パターン③でファイル分割・スネークケースが反映された)
- 「設定したのに効かない」と感じたら、まず新しいセッションで試す
次のステップ
続いて第2回では、CLAUDE.mdと並んでよく使う settings.json を扱います。確認ダイアログ(permissions)を減らして、Claude Code の作業をスムーズにする設定です。
連載ナビ

コメント