CLAUDE.mdとは?効いた・効かなかった3パターンで検証

目次

はじめに

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 がない状態なので、ファイル分割や命名規則は当然ありません。

図1:CLAUDE.mdなしの状態。without-claude-md配下はindex.html 1枚だけで、Claudeの応答にも「単一HTMLファイル」と明記されている
図1: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>
図2:CLAUDE.mdあり・同一セッションの状態。プロンプト冒頭が「続いて」になっており、with-claude-md配下にCLAUDE.mdがあるのにindex.htmlが1枚だけ生成されている
図2:プロンプト冒頭の「続いて」が同一セッションの証拠。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>
図3:CLAUDE.mdあり・別セッションの状態。セッション冒頭でCLAUDE.mdをReadし、2つのルールを認識したうえでindex.html・style.css・script.jsを別々に生成している
図3:セッション開始時に 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 の作業をスムーズにする設定です。

連載ナビ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次