Halcyon Days

工場DX担当者のメモ書き

MENU

Claude CodeのCLAUDE.mdの書き方:ベストプラクティスとハッカソン優勝者設定から学ぶ

誰かが「CLAUDE.mdなどはちゃんと自分で書いたほうがいいよ〜」的なことを言っていたので。

参照。

code.claude.com

code.claude.com

CLAUDE.mdとは

Claudeがチャット開始時に毎回読み込む「メモリ(指示)ファイル」。
ここに Bashコマンド・コードスタイル・ワークフロールール などを置いておくと、Claudeが毎回それを前提に動いてくれる。

ポイントは「Claudeがコードを読めば推測できること」ではなく、コードだけだと推測しづらい前提を置くこと。

  • 使ってほしいコマンド(build/test/lint)
  • このリポジトリ固有のスタイル(例:ESM強制、importの癖)
  • このチームの流儀(例:typecheckを必ず通す、PRの粒度)
  • ハマりどころ(例:環境変数、特殊なディレクトリ構成)

CLAUDE.mdに書き込む内容

基本は 「広範に適用される情報のみ」
Claudeは毎回CLAUDE.mdを読むので、ここが肥大化すると本当に守ってほしい指示が埋もれる。

自分の中での判断基準はこれが分かりやすい。

その1行を消したら、Claudeがミスりやすくなる?
→ なら残す。ならないなら切る。

ざっくり「書くもの / 書かないもの」

書くもの

  • Claudeが推測できないBashコマンド(pnpm test なのか npm test なのか等)
  • テスト
  • 命名ディレクトリの構成
  • 非自明な設計判断
  • 必須の環境変数や実行前提

書かないもの

  • ドキュメントを読めば分かること(APIの仕様など)
  • 変化が激しい情報(コロコロ変わる手順など)
  • 長いチュートリアル
  • ファイル説明の羅列(「このファイルは〜」のような)

CLAUDE.mdは「ドキュメント」じゃなくて コードとして扱う
うまくいかなかったら直す。増えたら削る。定期的にレビューして整理すること。


CLAUDE.mdはどこに置けるか

配置場所はいくつかパターンがある。

  • ホームフォルダ(ユーザー共通)~/.claude/CLAUDE.md
    全プロジェクトに効く「自分の流儀」を置く場所。
  • プロジェクトルート./CLAUDE.md(または ./.claude/CLAUDE.md
    チーム共有したい内容はここ。
  • ディレクト:モノレポで効く。
    root/CLAUDE.mdroot/foo/CLAUDE.md の両方が読み込まれる、みたいな動きができる。
  • ディレクト:必要になったときに追加で引かれる。
    あるサブディレクトリ配下のファイルを触る時だけ、追加のルールを読み込ませる、みたいな使い方。

どう探索して読み込むのか

Claude Codeは、起動したカレントディレクトリから上に向かって(/直下までは行かずに)CLAUDE.md / CLAUDE.local.md再帰的に探す。
さらに、作業中にサブツリー配下の CLAUDE.md も見つけて取り込む。

つまり「モノレポで親にも子にも置ける」のはこの探索方式のおかげ。


追加ファイルのインポート(分割して肥大化を防ぐ)

CLAUDE.mdは @path/to/import で追加ファイルを読み込める。

# Additional Instructions
- Git workflow: @docs/git-instructions.md

分割のメリットはシンプルで、

  • CLAUDE.md本体を短く保てる
  • ルールを用途別に管理できる(git運用だけ切り出す等)
  • チームで差分レビューしやすい

知っておくと良い仕様もある。

  • 相対パスは「そのimportを書いたファイル」を基準に解決される(cwd基準じゃない)
  • インポートは コードブロックやインラインコード内では評価されない
  • 再帰インポートは可能だが深さに上限がある(無限に辿らない)

どのファイルが読み込まれているかは /memory で確認できる。


Skills / rules との住み分け

下記のような感じでいいのでは。

  • 常に必要なこと → CLAUDE.md
  • たまにしか使わないドメイン知識・手順 → Skills(必要な時だけ呼ぶ)
  • 大きいプロジェクトのルール群.claude/rules/ で分割管理

ハッカソン優勝者の設定(everything-claude-code)を見て思ったこと

「CLAUDE.mdに書くトピック」は案外シンプルでOKで、つらつらと書く必要はないな〜と思った。

実際に書かれていたものは下記。

  • プロジェクト概要(何を作ってるか)
  • ルール(構成・スタイル・テスト・セキュリティ)
  • ファイル構成(迷いやすい場所だけ)
  • キーパターン(レスポンス形式、エラーハンドリング等)
  • 環境変数
  • 使用コマンド
  • Gitのワークフロー

ただ、正直これを見て「概念(TDDとか)理解してないと書けへんなぁ」と思った。
でも逆に言うと、理解できた概念から順にCLAUDE.mdへ“自分の言葉で”落としていけばいいんじゃないかな。


参照

code.claude.com

code.claude.com

syu-m-5151.hatenablog.com

github.com

qiita.com