進階 .cursorrules 撰寫
一份好的 .cursorrules 能讓 AI 回覆品質大幅提升。以下是撰寫高效 .cursorrules 的技巧:
結構化撰寫方式
# .cursorrules(完整企業級範例)
## 角色定義
你是本團隊的資深全端工程師,熟悉我們的技術棧與業務邏輯。
在回覆時,優先考慮可維護性和程式碼可讀性,而非過度最佳化。
## 技術棧
前端:Next.js 14 (App Router), TypeScript, Tailwind CSS, shadcn/ui
後端:Node.js, Fastify, Drizzle ORM, PostgreSQL
測試:Vitest, React Testing Library, Playwright
部署:Vercel (前端), Railway (後端)
## 程式碼風格
- 縮排:2 個空格
- 字串:單引號(import 用雙引號)
- 行尾:不加分號(Prettier 設定)
- 最大行寬:100 個字元
## 架構原則
1. 遵循 Feature-based 目錄結構
2. 每個 feature 包含:components/, hooks/, utils/, types/
3. 共用邏輯放在 src/shared/
4. API 呼叫統一在 src/services/ 層處理
5. 型別定義與使用位置在同一目錄
## 命名規範
- React 元件:PascalCase
- Hook:use 前綴 + camelCase
- 工具函式:camelCase
- 常數:UPPER_SNAKE_CASE
- 型別/介面:PascalCase,介面不加 I 前綴
- 資料庫 Table:snake_case
- API 路由:kebab-case
## 禁止事項
- 不使用 any 型別(使用 unknown 或具體型別)
- 不直接操作 DOM(使用 React ref)
- 不在元件中直接呼叫 API(透過 hooks 或 services)
- 不提交含有 console.log 的程式碼
## 回覆規範
- 說明用繁體中文,程式碼用英文
- 修改現有程式碼時,標明修改的原因
- 如有多種實作方式,列出優缺點後推薦最適合的
- 涉及安全性的建議要特別標注分層 .cursorrules
在 Monorepo 或大型專案中,可以在不同子目錄放置不同的 .cursorrules:
project/
├── .cursorrules # 全域規則(共用規範)
├── apps/
│ ├── web/
│ │ └── .cursorrules # 前端特定規則
│ └── api/
│ └── .cursorrules # 後端特定規則
└── packages/
└── shared/
└── .cursorrules # 共用套件規則自訂 AI 指令
除了 .cursorrules,Cursor 提供「User Rules」功能,讓你設定跨所有專案的個人偏好:
前往 Cursor Settings → General → Rules for AI 設定全域規則,例如:
# 個人全域規則
- 說明文字使用繁體中文(台灣用語)
- 程式碼範例總是完整可執行
- 回覆時先給出結論,再詳細說明
- 如果我的問題有更好的解法,主動告訴我
- 遇到安全性問題,務必特別提醒User Rules 的優先度低於 .cursorrules,專案層級的設定會覆蓋個人設定。
MCP 進階整合
善用 MCP(Model Context Protocol),讓 Cursor Agent 能連接真實的工具與資料:
資料庫直連(開發環境)
// .cursor/mcp.json
{
"mcpServers": {
"postgres-dev": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://localhost:5432/myapp_dev"
]
}
}
}
// 使用情境:
// "查詢 users 表,找出過去 7 天內沒有登入的用戶"
// "解釋 orders 表的 schema,有什麼可以最佳化的索引?"GitHub 整合
// .cursor/mcp.json
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}
// 使用情境:
// "列出所有未關閉的 bug 相關 Issues"
// "幫我建立一個 PR 描述,基於這次的 git diff"
// "查看最近 5 個 PR 的狀態"自訂 MCP 伺服器
// 建立自訂 MCP 伺服器(Node.js 範例)
// custom-mcp-server.js
import { Server } from "@modelcontextprotocol/sdk/server/index.js"
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
const server = new Server({ name: "custom-tools", version: "1.0.0" }, {
capabilities: { tools: {} }
})
// 定義工具
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [{
name: "get_user_data",
description: "從內部 API 取得用戶資料",
inputSchema: {
type: "object",
properties: { userId: { type: "string" } },
required: ["userId"]
}
}]
}))
// 工具處理邏輯
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "get_user_data") {
const data = await fetchUserFromAPI(request.params.arguments.userId)
return { content: [{ type: "text", text: JSON.stringify(data) }] }
}
})
const transport = new StdioServerTransport()
await server.connect(transport)隱私模式
對於涉及敏感程式碼的專案,了解 Cursor 的隱私設定非常重要:
隱私模式(Business 方案)
- ✓ 程式碼不會被用於訓練 AI 模型
- ✓ AI 請求不會被 Cursor 儲存
- ✓ 與 OpenAI 的合約保證不使用資料訓練
- △ 需要升級至 Business 方案
使用自己的 API 金鑰
如果你使用 BYOK(Bring Your Own Key)模式:
- 程式碼直接發送至 OpenAI 或 Anthropic,不經過 Cursor 伺服器
- 受 OpenAI/Anthropic 的隱私政策保護(預設不用於訓練)
- 適合有敏感程式碼但無法升級 Business 方案的個人開發者
建議的隱私實踐
- 將機密設定(API Keys、密碼)放在
.env檔案,並加入.gitignore - 在
.cursorignore中排除敏感目錄,避免 AI 索引 - 不在 Chat 中貼上真實的生產環境資料
# .cursorignore(排除 AI 索引的目錄)
.env
.env.*
secrets/
certificates/
*.pem
*.key
node_modules/
.git/Monorepo 策略
在 Monorepo 環境中使用 Cursor,有幾個需要特別注意的地方:
索引設定
// .cursorignore(減少不必要的索引,提升效能)
**/node_modules/
**/dist/
**/build/
**/.next/
**/coverage/
# 只排除不需要 AI 了解的目錄
# 保留所有原始碼,讓 AI 有完整上下文多應用切換
在 Monorepo 中使用 Chat 時,明確指定你在操作哪個應用:
// 明確引用特定應用的程式碼
"@apps/web/src/components 幫我建立一個新的 DataTable 元件"
// 跨應用查詢
"@apps/web @apps/api
前端和後端對 User 型別的定義是否一致?
有沒有需要同步的地方?"效能優化技巧
讓 Cursor AI 回覆更快、更精準的實用技巧:
- 縮小上下文範圍:引用特定檔案而非整個程式碼庫,讓 AI 聚焦在相關程式碼
- 清晰的問題描述:「幫我修復這個 bug」比「這裡有問題」能得到更好的答案
- 使用快速模型做初稿:用 gpt-4o-mini 快速生成初稿,再用 Claude 精修
- 關閉不需要的自動功能:如果某頁面不需要 Tab 補全,可以暫時關閉節省資源
- 定期重整對話:過長的對話歷史會降低精準度,遇到新問題時開啟新對話
搭配 Claude Code 使用
Cursor 和 Claude Code 可以互補使用,發揮各自的優勢:
Cursor 適合日常編輯工作,Claude Code 適合需要深度 Agent 自動化的複雜任務(如大規模重構、CI/CD 整合)。兩者不衝突,可以在同一個專案中並用。
分工建議
- Cursor:日常程式碼編寫、即時補全、快速修改、Chat 問答
- Claude Code:大型重構、跨 Repo 操作、長時間自動化任務、CI/CD 整合
共用 .cursorrules 與 CLAUDE.md
// 讓兩個工具共享相同的規範
// .cursorrules(Cursor 讀取)
// CLAUDE.md(Claude Code 讀取)
//
// 建議在 CLAUDE.md 中引用 .cursorrules:
// "請參考 .cursorrules 文件中的程式碼規範"
//
// 或維護一個共用的規範文件:
// docs/ai-rules.md
// 在 .cursorrules 和 CLAUDE.md 中都引用這份文件