測驗:CLAUDE.md 與 Rules – 讓 AI 照你的規矩寫程式
共 5 題,點選答案後會立即顯示結果
1. CLAUDE.md 的主要作用是什麼?
2. 如果你想設定「只有自己生效、不進 git」的專案偏好,應該使用哪個檔案?
3. 關於 .claude/rules/ 目錄下的 Rule 檔案,以下哪個敘述是正確的?
4. 以下是一個條件式 Rule 檔案的開頭,這個設定的效果是什麼?
5. 你的 CLAUDE.md 已經超過 500 行,Claude 開始忽略部分指示。根據文章建議,最佳的解決方式是什麼?
一句話說明
CLAUDE.md 是你寫給 Claude Code 的「規矩清單」,每次對話開始時自動載入,讓 AI 照你的方式工作。
為什麼你需要知道這個
你有沒有這種經驗:每次開一個新的 Claude Code 對話,都要重複說「用 ESM 不要用 CommonJS」「commit message 用中文」「測試用 Vitest 不要用 Jest」?
CLAUDE.md 就是解決這個問題的。你把規矩寫一次,Claude Code 每次啟動都會讀,不用再重複。
而 Rules 系統則更進一步,把規矩分門別類,像是「通用規則」、「TypeScript 專用規則」、「Python 專用規則」,讓你的配置更有組織。
CLAUDE.md 是什麼?
CLAUDE.md 是一個 Markdown 檔案,Claude Code 在每次對話開始時會自動讀取。你可以把它想像成一份「新人訓練手冊」,告訴 Claude:
- 這個專案是做什麼的
- 寫程式有什麼規矩
- 常用的指令有哪些
- 有什麼地雷不能踩
最小範例
在你的專案根目錄建立一個 CLAUDE.md:
# 專案:我的電商網站
## 程式風格
- 使用 ES modules(import/export),不要用 CommonJS(require)
- 縮排用 2 空格
- 變數命名用 camelCase
## 常用指令
- 測試:npm run test
- 建構:npm run build
- Lint:npm run lint
## 重要規則
- 不要直接 commit 到 main 分支
- commit message 用 conventional commits 格式
Code language: PHP (php)就這樣。Claude Code 啟動後會自動讀這個檔案,之後所有的對話都會遵守這些規矩。
逐行翻譯
讓我們拆解一下這個 CLAUDE.md 在做什麼:
# 專案:我的電商網站 # 告訴 Claude「你在哪」,一句話定位
## 程式風格 # 寫程式的規矩
- 使用 ES modules... # Claude 預設可能用 require,這邊明確說用 import
- 縮排用 2 空格 # 統一團隊風格
## 常用指令 # Claude 不用猜,直接知道怎麼跑測試、建構
- 測試:npm run test # 不然 Claude 可能猜成 npm test 或 jest
## 重要規則 # 地雷區,絕對不能違反的事
- 不要直接 commit 到 main # 防止 Claude 自作主張
Code language: PHP (php)CLAUDE.md 放哪裡?
CLAUDE.md 不是只能放一個地方。它有一個階層系統,不同位置代表不同的作用範圍。
放置位置一覽
| 位置 | 作用範圍 | 誰能看到 | 用途 |
|---|---|---|---|
~/.claude/CLAUDE.md |
所有專案 | 只有你自己 | 個人偏好,例如「我喜歡用 Vim」 |
./CLAUDE.md(專案根目錄) |
這個專案 | 團隊所有人(透過 git) | 專案規範,例如「用 Vitest 跑測試」 |
./CLAUDE.local.md |
這個專案 | 只有你自己 | 個人的專案設定,例如「我的測試資料庫 URL」 |
./.claude/CLAUDE.md |
這個專案 | 團隊所有人 | 同上,另一個放法 |
./子目錄/CLAUDE.md |
那個子目錄 | 團隊所有人 | 子模組特定規則 |
載入順序
Claude Code 會從你目前的工作目錄往上遞迴尋找 CLAUDE.md。假設你的專案結構是:
my-monorepo/
CLAUDE.md # (1) 整個 monorepo 的通用規則
packages/
frontend/
CLAUDE.md # (2) 前端專案的規則
src/
components/
CLAUDE.md # (3) 元件開發的規則
Code language: PHP (php)當你在 packages/frontend/src/ 工作時:
- (1) 和 (2) 會在啟動時自動載入
- (3) 會在 Claude 讀取
components/目錄下的檔案時按需載入
越具體的規則優先權越高。 如果根目錄說「縮排 4 空格」,但 frontend 的 CLAUDE.md 說「縮排 2 空格」,在 frontend 工作時會用 2 空格。
常見變化
變化 1:個人偏好 + 專案規範分離
~/.claude/CLAUDE.md # 你的個人偏好(所有專案共用)
my-project/
CLAUDE.md # 團隊規範(commit 到 git)
CLAUDE.local.md # 你自己的專案設定(不進 git)
Code language: PHP (php)翻譯:「團隊規矩大家一起遵守,但我自己的小習慣不用強迫別人。」
CLAUDE.local.md 會自動被加到 .gitignore,適合放個人的資料庫 URL、API key 等不該進版本控制的東西。
變化 2:Monorepo 多專案配置
monorepo/
CLAUDE.md # 通用規則:commit 格式、PR 流程
apps/
web/
CLAUDE.md # Web app 規則:用 React、Vitest
api/
CLAUDE.md # API 規則:用 Express、Supertest
packages/
shared/
CLAUDE.md # 共用套件規則:嚴格型別
Code language: PHP (php)翻譯:「一個大倉庫裡面有很多小專案,每個的規矩不一樣。」
@import 機制:引用外部檔案
CLAUDE.md 支援用 @路徑 的語法引用其他檔案,這樣可以把 CLAUDE.md 保持精簡:
# 我的專案
參考 @README.md 了解專案概述。
參考 @package.json 查看可用的 npm 指令。
## 更多規範
- Git 工作流程:@docs/git-instructions.md
- 個人偏好:@~/.claude/my-project-instructions.md
Code language: PHP (php)這在幹嘛:Claude Code 看到 @README.md 時,會自動去讀那個檔案的內容,就像是把那個檔案「貼進來」一樣。
重點注意:
- 路徑是相對於包含
@的那個檔案,不是工作目錄 - 支援絕對路徑(
@~/.claude/...)和相對路徑(@docs/...) - 最多巢狀 5 層(A 引用 B,B 引用 C…最多 5 層)
- 第一次遇到外部引用時,Claude Code 會跳出確認對話框
Rules 系統:分門別類的規矩
CLAUDE.md 一個檔案寫所有規矩,檔案一大就容易被忽略。Rules 系統讓你把規矩拆成多個小檔案,各司其職。
基本結構
在專案的 .claude/rules/ 目錄下放置 .md 檔案:
my-project/
.claude/
CLAUDE.md # 主要指示
rules/
code-style.md # 程式風格
testing.md # 測試規範
security.md # 安全要求
git-workflow.md # Git 工作流程
Code language: PHP (php)所有 .claude/rules/ 下的 .md 檔案都會自動載入,不需要在 CLAUDE.md 裡面手動引用。
最小範例:一個 Rule 檔案
<!-- .claude/rules/code-style.md -->
# 程式風格規範
- 優先使用 immutable 資料:用 const 而非 let,用展開運算子而非 push
- 每個檔案控制在 200-400 行,最多不超過 800 行
- 函式不超過 50 行
- 巢狀不超過 4 層
- 不要在 production 程式碼中留下 console.log
- 用 try/catch 處理錯誤,不要靜默吞掉
Code language: HTML, XML (xml)進階用法:條件式 Rules
Rules 可以透過 YAML frontmatter 指定只在特定檔案路徑下生效:
---
paths:
- "src/api/**/*.ts"
---
# API 開發規範
- 所有 API 端點必須做輸入驗證
- 使用標準錯誤回應格式
- 加上 OpenAPI 文件註解
Code language: PHP (php)翻譯:「這些規矩只有在 Claude 碰到 src/api/ 底下的 TypeScript 檔案時才生效。」
沒有 paths 的 Rule 檔案會無條件對所有檔案生效。
常用 Glob 模式速查
| 模式 | 意思 |
|---|---|
**/*.ts |
所有目錄下的 TypeScript 檔案 |
src/**/* |
src 目錄下的所有檔案 |
src/**/*.{ts,tsx} |
src 目錄下所有 .ts 和 .tsx 檔案 |
{src,lib}/**/*.ts |
src 和 lib 目錄下的 TypeScript 檔案 |
從 everything-claude-code 學習 Rules 分層設計
everything-claude-code 是一個熱門的 Claude Code 配置範本倉庫。它的 Rules 設計展示了一個值得學習的分層架構:
目錄結構
rules/
common/ # 通用規則(所有語言都適用)
coding-style.md # 程式風格
testing.md # 測試規範
performance.md # 效能考量
security.md # 安全要求
git-workflow.md # Git 工作流程
patterns.md # 設計模式
hooks.md # Hooks 使用規範
agents.md # Agent 使用規範
typescript/ # TypeScript 專用規則
python/ # Python 專用規則
golang/ # Go 專用規則
README.md
Code language: PHP (php)設計邏輯
這個分層的核心想法是:
通用規則(common/)
定義所有語言都該遵守的原則
例如:「函式不超過 50 行」「最少 80% 測試覆蓋率」
語言特定規則(typescript/ python/ golang/)
繼承通用規則,加上語言專屬的最佳實踐
例如:TypeScript 要用 Zod 做驗證,Python 要用 type hints
common/ 規則重點摘要
以下是 everything-claude-code 中 common/ 規則的精華:
coding-style.md — 程式風格
核心原則:
- 永遠創建新物件,不要修改現有的(immutability)
- 多個小檔案比少數大檔案好(200-400 行/檔)
- 永遠處理錯誤,不要靜默吞掉
- 在系統邊界做輸入驗證
testing.md — 測試規範
- 最低測試覆蓋率:80%
- 三種測試都要有:單元測試、整合測試、端對端測試
- 測試驅動開發流程:寫測試(RED) -> 跑測試(FAIL) -> 寫實作(GREEN) -> 跑測試(PASS) -> 重構
security.md — 安全要求
提交前必須確認:
- 沒有硬編碼的 secret(API key、密碼、token)
- 所有使用者輸入都有驗證
- SQL 查詢用參數化查詢防注入
- 錯誤訊息不能洩漏敏感資訊
git-workflow.md — Git 工作流程
- Commit message 格式:<type>: <description>
- type 可以是:feat, fix, refactor, docs, test, chore, perf, ci
- 不要直接 commit 到 main
- PR 前要跑過所有測試
Code language: HTML, XML (xml)實戰:為你的專案建立配置
步驟 1:用 /init 快速開始
在 Claude Code 中輸入:
/init
這會分析你的程式碼庫,自動產生一份基本的 CLAUDE.md,包含偵測到的建構工具、測試框架和程式碼模式。然後你再根據自己的需求修改。
步驟 2:建立 Rules 目錄
mkdir -p .claude/rules
步驟 3:建立通用規則
建立 .claude/rules/code-style.md:
# 程式風格
- 使用 ES modules(import/export)
- 縮排 2 空格
- 變數用 camelCase,元件用 PascalCase
- 每個檔案 200-400 行,最多 800 行
- 函式不超過 50 行
- 不要留 console.log 在 production 程式碼中
Code language: PHP (php)建立 .claude/rules/testing.md:
# 測試規範
- 測試框架:Vitest
- 跑測試指令:npm run test
- 跑單一測試:npx vitest run path/to/test.ts
- 改完程式碼要跑相關測試確認沒壞
- 新功能要附帶測試
Code language: PHP (php)建立 .claude/rules/git-workflow.md:
# Git 工作流程
- Commit message 用 conventional commits:feat:, fix:, docs:, refactor:
- 不要直接 push 到 main
- PR 前確認測試全部通過
- PR 標題不超過 70 個字
Code language: PHP (php)步驟 4:建立語言特定規則(選用)
如果你的專案用 TypeScript,建立 .claude/rules/typescript.md:
---
paths:
- "**/*.ts"
- "**/*.tsx"
---
# TypeScript 規範
- 嚴格模式開啟(strict: true)
- 不要用 any,用 unknown 然後做型別收窄
- 優先用 interface 而非 type(除非需要 union type)
- 用 Zod 做 runtime 驗證
Code language: PHP (php)完成後的目錄結構
my-project/
CLAUDE.md # 專案概述 + 常用指令
CLAUDE.local.md # 個人設定(不進 git)
.claude/
rules/
code-style.md # 程式風格
testing.md # 測試規範
git-workflow.md # Git 流程
typescript.md # TS 專用規則(條件式)
src/
...
Code language: PHP (php)必看懂 vs 知道就好
必看懂(會一直用到)
- CLAUDE.md 的位置和作用範圍:根目錄的給團隊用,
~/.claude/的給自己用,子目錄的按需載入 - Rules 目錄:
.claude/rules/*.md自動載入,不用手動引用 - 條件式 Rules:
pathsfrontmatter 讓規則只對特定檔案生效 - CLAUDE.local.md:個人設定不進 git,自動加入
.gitignore
知道就好(遇到再查)
- @import 機制:CLAUDE.md 裡用
@路徑引用其他檔案,最多巢狀 5 層 - Managed policy:企業等級的組織統一配置,放在系統路徑下
- Auto memory:Claude 自動記憶的功能,存在
~/.claude/projects/<project>/memory/ - Symlinks:
.claude/rules/支援符號連結,可以跨專案共用規則
Vibe Coder 檢查點
當你在配置 CLAUDE.md 和 Rules 時,確認以下事項:
- [ ] CLAUDE.md 是否保持精簡?太長的話 Claude 會忽略部分內容(建議 300 行以內)
- [ ] 是否只寫了「Claude 無法自己推斷」的規矩?(例如不需要寫「用正確的語法」這種廢話)
- [ ] 團隊共用的規矩是否放在
CLAUDE.md(進 git),個人偏好是否放在CLAUDE.local.md(不進 git)? - [ ] 有沒有把常用指令(build、test、lint)寫進去?這是最實用的部分
- [ ] Rules 檔案是否各自聚焦一個主題?(一個
.md一個主題,不要全塞在一起) - [ ] 條件式 Rules 的
paths是否正確?(TypeScript 規則不該套用到 Python 檔案上)
常見問題
Q:CLAUDE.md 寫太長會怎樣? A:Claude 會開始忽略部分指示。官方建議是「如果你的 CLAUDE.md 太長,Claude 會忽略一半,因為重要的規矩被淹沒了」。解法是精簡再精簡,如果 Claude 不需要提醒就能做對的事,就不要寫進去。
Q:CLAUDE.md 和 Rules 有什麼不同? A:功能上一樣,都會被自動載入。差別在於組織方式。CLAUDE.md 是單一檔案,適合簡短的專案概述和常用指令。Rules 是多檔案系統,適合大型專案把規矩分門別類。你可以兩者搭配使用。
Q:怎麼知道 Claude 有沒有讀到我的規矩? A:在 Claude Code 中輸入 /memory,會列出目前載入的所有記憶檔案。如果你的規矩沒出現在清單中,檢查檔案位置和命名是否正確(大小寫敏感,必須是 CLAUDE.md 不是 claude.md)。
Q:可以用強調語氣讓 Claude 更重視某些規矩嗎? A:可以。官方文件建議在重要規矩前加上 “IMPORTANT” 或 “YOU MUST” 來提高遵守率。例如:IMPORTANT: 絕對不要在程式碼中硬編碼 API key。
本篇重點回顧
- CLAUDE.md 是寫給 Claude Code 的規矩檔,每次對話自動載入
- 放置位置決定作用範圍:
~/.claude/全域、專案根目錄團隊共用、CLAUDE.local.md個人專用 - Rules 系統(
.claude/rules/*.md)讓你把規矩拆成多個主題檔案,自動載入 - 條件式 Rules 透過
pathsfrontmatter 讓規則只對特定檔案生效 - 保持精簡是最重要的原則:寫太多反而被忽略,只寫 Claude 無法自己推斷的事
進階測驗:CLAUDE.md 與 Rules – 讓 AI 照你的規矩寫程式
共 5 題,包含情境題與錯誤診斷題。
1. Monorepo 的 CLAUDE.md 配置策略 情境題
以下哪種 CLAUDE.md 配置方式最合理?
2. 條件式 Rules 的應用 情境題
src/api/(API 端點)和 src/components/(React 元件)兩個目錄。你希望 Claude 在寫 API 時一定要加輸入驗證和 OpenAPI 註解,但在寫元件時不要套用這些規則。
你應該怎麼配置?
3. 個人偏好 vs 團隊規範的衝突 情境題
最佳做法是什麼?
4. CLAUDE.md 不生效的排查 錯誤診斷
claude.md 檔案(注意大小寫),裡面寫了「使用 ESM 語法」和「測試用 Vitest」,但 Claude Code 每次還是用 CommonJS 和 Jest。他用 /memory 指令查看,發現他的設定檔沒有出現在載入清單中。
最可能的原因是什麼?
5. Rules 配置問題診斷 錯誤診斷
.ts 檔案生效。但她發現 Claude 在編輯 Python 檔案時也套用了「不要用 any」這條規則。
這個配置哪裡出了問題?