在讓 AI 碰你的程式碼前
Claude Code 可以讀取、修改、刪除你專案中的檔案,也可以執行 Shell 指令。這代表它有和你一樣的檔案系統權限。在現有專案上使用 Claude Code 之前,需要做好幾件事來降低風險。
飛飛建議的原則:把 Claude Code 當成一個新來的同事,給他看該看的、不給看不該看的,每次改動都要 Code Review。
第一步:設定 CLAUDE.md
CLAUDE.md 是 Claude Code 的專案說明檔案,放在專案根目錄。Claude Code 每次啟動時都會自動讀取這個檔案,用來理解專案的架構和規範。
一個有效的 CLAUDE.md 應該包含:
專案架構說明。哪些目錄放什麼、主要的 entry point 在哪裡。
技術慣例。使用的語言版本、框架、套件管理工具(npm/yarn/pnpm)、程式碼風格(ESLint 規則、Prettier 設定)。
禁止操作。不要修改哪些檔案、不要刪除哪些目錄、不要執行哪些指令。
測試指令。怎麼跑測試、怎麼啟動開發環境。
範例:
# 專案架構
- src/ — 主程式碼(TypeScript)
- tests/ — 測試檔案(vitest)
- config/ — 設定檔(不要修改)
- .env.* — 環境變數(不要讀取或修改)
# 規範
- 使用 TypeScript strict mode
- 所有 API endpoint 都需要做輸入驗證
- 使用 pnpm,不要用 npm 或 yarn
- 跑測試:pnpm test
- 跑 lint:pnpm lint
# 禁止操作
- 不要修改 config/ 目錄下的任何檔案
- 不要執行 rm -rf 指令
- 不要修改 CI/CD 設定(.github/workflows/)
- 不要安裝新的 npm 套件,除非我明確同意
第二步:設定 .claudeignore
.claudeignore 的格式和 .gitignore 一樣,用來告訴 Claude Code 哪些檔案不應該被讀取。
建議排除的項目:
# 敏感設定
.env
.env.*
config/secrets/
credentials/
# 金鑰和憑證
*.pem
*.key
*.p12
id_rsa*
# 資料庫
*.sqlite
*.db
dumps/
# 第三方套件(太大且不需要)
node_modules/
vendor/
.venv/
這可以防止 Claude Code 意外讀取到敏感檔案內容。但要注意,.claudeignore 只防止 Claude Code 主動讀取,如果你在對話中直接貼上敏感內容,它仍然會看到。
第三步:Git 安全工作流
在讓 Claude Code 修改任何程式碼之前,確保:
確認工作目錄是乾淨的。跑 git status 確認沒有未提交的變更。如果有,先 commit 或 stash。
建立新的分支。不要讓 Claude Code 直接在 main 或 develop 分支上修改。
git checkout -b feature/ai-refactor-auth
設定 Claude Code 的 commit 行為。Claude Code 可以自動建立 commit,但建議先關掉這個功能,改為手動確認每次變更後再 commit。
這樣做的好處是:如果 Claude Code 改壞了什麼,你可以直接 git checkout . 回到修改前的狀態。在獨立分支上工作,即使整個分支都不要了,也不影響主分支。
第四步:權限模式的選擇
Claude Code 有幾種權限模式:
Ask 模式(預設):每次執行 Shell 指令、修改檔案前都會問你。適合初次在專案上使用,先觀察 Claude Code 會做什麼事。
Auto-accept 模式:自動接受 Claude Code 的操作。效率高但風險也高,只建議在你已經熟悉 Claude Code 的行為模式、且專案有完整的 Git 安全網之後使用。
飛飛的建議:第一次在現有專案上使用 Claude Code 時,一律用 Ask 模式。先觀察幾個 session,確認它的行為符合預期,之後再考慮放寬。
自訂權限設定。你可以在 .claude/settings.json 中設定哪些操作自動允許、哪些需要確認:
{
"permissions": {
"allow": [
"Read **/*.ts",
"Read **/*.tsx",
"Bash(npm test)",
"Bash(npm run lint)"
]
}
}
這樣讀取 TypeScript 檔案和跑測試是自動允許的,但修改檔案和執行其他指令仍然需要你確認。
第五步:Review AI 的修改
Claude Code 完成修改後,不要直接 commit。先做以下檢查:
看 diff。用 git diff 看所有變更,確認每一行都是你預期的修改。特別注意是否有意外的檔案被修改(例如 package.json 被加了新的依賴、設定檔被改動)。
跑測試。確認所有現有測試仍然通過,新加的功能也有對應的測試。
檢查安全問題。AI 生成的程式碼常見的安全問題包括:使用 eval() 或 Function() 執行動態程式碼、SQL 字串拼接而不是 parameterized query、缺少輸入驗證、硬編碼的預設值取代了環境變數、過於寬鬆的 CORS 設定。
確認沒有敏感資訊外洩。雖然有 .claudeignore,仍要檢查 Claude Code 是否在程式碼中留下了任何敏感資訊(例如在測試檔案中使用了真實的 API Key 作為範例)。
Rollback 策略
當 Claude Code 的修改出了問題,根據情況選擇回滾方式:
修改還沒有 commit。直接 git checkout . 就可以回到修改前的狀態。
已經 commit 但還沒 push。用 git reset HEAD~1 取消最後一個 commit(變更會保留在工作目錄,你可以選擇性保留部分修改)。
已經 push 到遠端。在分支上用 git revert 建立一個反向 commit。不要用 force push,特別是如果有其他人也在看這個分支。
整個分支都不要了。切回主分支,刪除 AI 工作分支:git checkout main && git branch -D feature/ai-refactor-auth。
安全與限制
Claude Code 的能力範圍取決於你的系統權限。它可以做的事情和你在終端機能做的事情完全一樣。
CLAUDE.md 和 .claudeignore 是「指示」層級的限制,Claude Code 會遵循這些規則,但它們不是硬性的權限控制。在高安全需求的環境,應該搭配作業系統層級的權限限制(例如 Docker 容器、專用使用者帳號)。
Claude Code 在處理大型程式碼庫時可能會遺漏跨檔案的依賴關係。修改一個檔案時,它可能沒有考慮到其他檔案對這段程式碼的依賴。這就是為什麼跑完整測試套件很重要。
知識檢測
讀完文章後,測試一下你對這個主題的理解。
常見問題
Claude Code 會把我的程式碼上傳到哪裡?
Claude Code 會將你的程式碼內容傳送到 Anthropic 的 API 進行處理。根據 Anthropic 的 API 政策,API 請求的資料不會被用來訓練模型。如果你使用的是企業方案,可能有額外的資料保護條款。對於高度敏感的程式碼,評估這個風險後再決定是否使用。
可以讓 Claude Code 只讀不寫嗎?
可以。在 Ask 模式下,你可以只允許讀取操作,拒絕所有寫入操作。或者在對話一開始就告訴它:「這次只做 Code Review,不要修改任何檔案。」
大型專案(數百個檔案)使用 Claude Code 有什麼注意事項?
Claude Code 有上下文視窗的限制,無法一次讀取所有檔案。建議在 CLAUDE.md 中清楚標示專案架構和重要檔案的位置,讓它可以快速找到需要的資訊。將任務拆小,一次只處理一個功能或一個模組。
團隊中多人同時使用 Claude Code 會有衝突嗎?
和多人開發一樣,每個人在自己的分支上工作就不會衝突。建議團隊統一 CLAUDE.md 和 .claudeignore 的內容,確保每個人的 Claude Code 看到一致的專案規範。
有哪些類型的專案不適合用 Claude Code 修改?
處理金融交易的核心邏輯、醫療系統的關鍵路徑、涉及加密演算法的實作,這些對正確性要求極高的程式碼,不建議直接讓 AI 修改。可以讓 AI 做 Review 或提供建議,但最終修改由人類工程師完成。
相關文章
- Claude Code + Git 工作流:分支、commit、review 完整實作
- Vibe Coding 流程:從想法、開發、測試到安全上線
- 從 AI 原型到 MVP:技術債與安全債的管理
- 用 AI 做 Code Review:GitHub Copilot vs Cursor vs Claude Code 實測
參考資料
- Claude Code 官方文件
- Anthropic API 資料使用政策