【Claude Code 進階配置】#01 CLAUDE.md 與 Rules:讓 AI 照你的規矩寫程式

測驗:CLAUDE.md 與 Rules – 讓 AI 照你的規矩寫程式

共 5 題,點選答案後會立即顯示結果

1. CLAUDE.md 的主要作用是什麼?

  • A. 取代 README.md,作為專案的技術文件
  • B. 讓 Claude Code 在每次對話開始時自動載入你設定的規矩
  • C. 記錄 Claude Code 每次對話的歷史紀錄
  • D. 定義專案的依賴套件和版本

2. 如果你想設定「只有自己生效、不進 git」的專案偏好,應該使用哪個檔案?

  • A. ~/.claude/CLAUDE.md
  • B. ./CLAUDE.md(專案根目錄)
  • C. ./CLAUDE.local.md
  • D. ./.claude/rules/personal.md

3. 關於 .claude/rules/ 目錄下的 Rule 檔案,以下哪個敘述是正確的?

  • A. 所有 .md 檔案都會自動載入,不需要在 CLAUDE.md 裡手動引用
  • B. 必須在 CLAUDE.md 中用 @ 語法逐一引用才會生效
  • C. 只能放一個 .md 檔案,多個會衝突
  • D. 只支援 .json 格式的設定檔

4. 以下是一個條件式 Rule 檔案的開頭,這個設定的效果是什麼?

— paths: – “src/api/**/*.ts” — # API 開發規範 – 所有 API 端點必須做輸入驗證
  • A. 這些規則只對 src/api/ 目錄下的所有檔案生效
  • B. 這些規則只在 Claude 處理 src/api/ 底下的 TypeScript 檔案時生效
  • C. 這些規則會覆蓋其他所有 Rule 檔案的設定
  • D. 這些規則需要手動在 Claude Code 中啟用才會生效

5. 你的 CLAUDE.md 已經超過 500 行,Claude 開始忽略部分指示。根據文章建議,最佳的解決方式是什麼?

  • A. 在每條規矩前面都加上 “IMPORTANT” 來強調
  • B. 把 CLAUDE.md 複製到多個子目錄讓 Claude 重複讀取
  • C. 改用 JSON 格式,因為比 Markdown 更精簡
  • D. 精簡內容,刪除 Claude 不需要提醒就能做對的事,並用 Rules 分檔管理

一句話說明

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)
- 用 Zodruntime 驗證
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 自動載入,不用手動引用
  • 條件式 Rulespaths frontmatter 讓規則只對特定檔案生效
  • 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


本篇重點回顧

  1. CLAUDE.md 是寫給 Claude Code 的規矩檔,每次對話自動載入
  2. 放置位置決定作用範圍~/.claude/ 全域、專案根目錄團隊共用、CLAUDE.local.md 個人專用
  3. Rules 系統.claude/rules/*.md)讓你把規矩拆成多個主題檔案,自動載入
  4. 條件式 Rules 透過 paths frontmatter 讓規則只對特定檔案生效
  5. 保持精簡是最重要的原則:寫太多反而被忽略,只寫 Claude 無法自己推斷的事

進階測驗:CLAUDE.md 與 Rules – 讓 AI 照你的規矩寫程式

測驗目標:驗證你是否能在實際情境中應用所學。
共 5 題,包含情境題與錯誤診斷題。

1. Monorepo 的 CLAUDE.md 配置策略 情境題

你的團隊有一個 monorepo,結構如下:前端用 React + TypeScript,後端用 Python + FastAPI,還有一個共用的工具庫。前端要求用 Vitest 測試、ESM 語法;後端要求用 pytest、type hints。兩者都要遵守 conventional commits 和「不直接 push 到 main」的規則。

以下哪種 CLAUDE.md 配置方式最合理?

  • A. 把所有規矩(前端 + 後端 + 通用)全部寫在根目錄的 CLAUDE.md 中
  • B. 只在前端和後端目錄各放一個 CLAUDE.md,不需要根目錄的
  • C. 根目錄放通用規則(commit 格式、PR 流程),前端和後端目錄各放自己的語言/框架規則
  • D. 只在根目錄放一個 CLAUDE.md,然後用 @import 引用 20 個子檔案

2. 條件式 Rules 的應用 情境題

你的 TypeScript 專案中有 src/api/(API 端點)和 src/components/(React 元件)兩個目錄。你希望 Claude 在寫 API 時一定要加輸入驗證和 OpenAPI 註解,但在寫元件時不要套用這些規則。

你應該怎麼配置?

  • A. 在 CLAUDE.md 中寫「只在 API 目錄套用輸入驗證規則」
  • B. 建立 .claude/rules/api.md,在 YAML frontmatter 中設定 paths: ["src/api/**/*.ts"]
  • C. 在 src/api/ 目錄下放一個 .claude/rules/api.md
  • D. 在 src/components/ 目錄的 CLAUDE.md 中寫「不要加輸入驗證」

3. 個人偏好 vs 團隊規範的衝突 情境題

你的團隊在專案根目錄的 CLAUDE.md 規定「縮排用 4 空格」。但你個人習慣用 2 空格,而且你不想因為改團隊規範被同事罵。同時你有自己的測試資料庫 URL 不想提交到 git。

最佳做法是什麼?

  • A. 在 ~/.claude/CLAUDE.md 中寫「縮排用 2 空格」覆蓋團隊設定
  • B. 修改專案根目錄的 CLAUDE.md 把 4 空格改成 2 空格
  • C. 在 .claude/rules/personal.md 中寫入個人偏好
  • D. 遵守團隊縮排規範,把測試資料庫 URL 放在 CLAUDE.local.md

4. CLAUDE.md 不生效的排查 錯誤診斷

小明建立了一個 claude.md 檔案(注意大小寫),裡面寫了「使用 ESM 語法」和「測試用 Vitest」,但 Claude Code 每次還是用 CommonJS 和 Jest。他用 /memory 指令查看,發現他的設定檔沒有出現在載入清單中。
my-project/ claude.md <– 小明的設定檔 package.json src/ index.ts

最可能的原因是什麼?

  • A. 檔名大小寫錯誤:必須是 CLAUDE.md(大寫 CLAUDE),不是 claude.md
  • B. 檔案需要放在 .claude/ 目錄下才會被讀取
  • C. 需要在 Claude Code 設定中手動啟用 CLAUDE.md 功能
  • D. CLAUDE.md 只支援 JSON 格式,不支援 Markdown 語法

5. Rules 配置問題診斷 錯誤診斷

小華建立了以下 Rule 檔案,希望 TypeScript 規則只對 .ts 檔案生效。但她發現 Claude 在編輯 Python 檔案時也套用了「不要用 any」這條規則。
# .claude/rules/typescript.md # TypeScript 規範 paths: – “**/*.ts” – “**/*.tsx” – 嚴格模式開啟(strict: true) – 不要用 any,用 unknown – 優先用 interface 而非 type

這個配置哪裡出了問題?

  • A. glob 模式寫錯了,應該用 src/**/*.ts 而非 **/*.ts
  • B. .claude/rules/ 目錄不支援條件式載入功能
  • C. paths 沒有用正確的 YAML frontmatter 格式(缺少 --- 分隔線),所以被當成普通文字,規則無條件對所有檔案生效
  • D. 檔名必須和語言名稱完全一致,應該用 ts.md 而非 typescript.md

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *