MDCルールのベストプラクティスとトラブルシューティング
ヒント
MDC(Model-Driven Code)ルールは、Cursorで一貫したコード品質を維持し、繰り返しのタスクを自動化するのに役立ちます。
MDCルールの理解
MDCルールは以下のことを可能にする強力なツールです:
- コーディング標準の強制
- コード変換の自動化
- カスタムバリデーションの実装
- プロジェクト固有のガイドラインの作成
MDCルールの設定
基本構造
プロジェクトに.cursor/rules
ディレクトリを作成します:
.cursor/
└── rules/
├── naming.json
├── formatting.json
└── custom-rules.json
ルール設定
基本的なルール構造:
.cursor/rules/naming.json
{
"name": "命名規則",
"description": "プロジェクト全体で一貫した命名を強制します",
"rules": [
{
"pattern": "^[A-Z][a-zA-Z]*Component$",
"filePattern": "*.component.ts",
"message": "コンポーネント名はパスカルケースで'Component'で終わる必要があります"
}
]
}
一般的なルールタイプ
1. 命名規則
{
"rules": [
{
"pattern": "^[a-z][a-zA-Z]*Service$",
"filePattern": "*.service.ts",
"message": "サービス名はキャメルケースで'Service'で終わる必要があります"
},
{
"pattern": "^I[A-Z][a-zA-Z]*$",
"filePattern": "*.interface.ts",
"message": "インターフェース名は'I'で始まりパスカルケースを使用する必要があります"
}
]
}
2. コード構造
{
"rules": [
{
"pattern": "^import.*from",
"location": "top",
"message": "インポートはファイルの先頭にある必要があります"
},
{
"maxLines": 300,
"filePattern": "*.ts",
"message": "ファイルは300行を超えるべきではありません"
}
]
}
3. ドキュメント要件
{
"rules": [
{
"pattern": "^\\/\\*\\*[\\s\\S]*?\\*\\/",
"filePattern": "*.ts",
"message": "すべてのファイルにJSDocドキュメントが必要です"
}
]
}
高度なルール設定
変数の使用
{
"variables": {
"COMPONENT_PREFIX": "App",
"MAX_FILE_SIZE": 500
},
"rules": [
{
"pattern": "^${COMPONENT_PREFIX}[A-Z][a-zA-Z]*$",
"filePattern": "*.component.ts",
"message": "コンポーネントは'${COMPONENT_PREFIX}'で始まる必要があります"
}
]
}
ネストされたルール
{
"rules": {
"naming": {
"components": [
{
"pattern": "^[A-Z][a-zA-Z]*Component$",
"severity": "error"
}
],
"services": [
{
"pattern": "^[a-z][a-zA-Z]*Service$",
"severity": "warning"
}
]
}
}
}
一般的な問題のトラブルシューティング
ルールが発動しない
-
ルール構文の確認
{
"rules": [
{
"pattern": "^[A-Z][a-zA-Z]*$", // 有効な正規表現パターン
"filePattern": "*.ts", // 有効なグロブパターン
"severity": "error" // 有効な重要度レベル
}
]
} -
ファイルパスの確認
# ルールが正しい場所にあることを確認
.cursor/
└── rules/
└── your-rule.json
パフォーマンスの問題
-
パターンの最適化
{
"rules": [
{
"pattern": "^[A-Z]\\w*$", // ^[A-Z][a-zA-Z]*$ より効率的
"filePattern": "*.{ts,js}" // 拡張子をグループ化
}
]
} -
除外の使用
{
"exclude": [
"node_modules/**",
"dist/**",
"build/**"
],
"rules": [...]
}
ベストプラクティス
1. 組織化
.cursor/
└── rules/
├── naming/
│ ├── components.json
│ └── services.json
├── formatting/
│ ├── spacing.json
│ └── indentation.json
└── documentation/
└── jsdoc.json
2. ルールドキュメント
{
"name": "コンポーネント命名",
"description": "一貫したコンポーネント命名規則を強制します",
"version": "1.0.0",
"author": "あなたのチーム",
"rules": [...]
}
3. ルールのテスト
テストファイルを作成します:
test/rules/naming.test.ts
describe('命名ルール', () => {
it('コンポーネント名を検証する必要があります', () => {
// テスト実装
});
});
CI/CDとの統合
GitHub Actionsの例
.github/workflows/mdc.yml
name: MDC検証
on: [push, pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: MDC検証を実行
run: cursor validate-rules
監視とメンテナンス
ルール統計
cursor rules-stats
定期的な更新
- ルールの有効性を確認
- フィードバックに基づいてパターンを更新
- 偽陽性結果を監視
- 重要度レベルを調整
ヒント
MDCルールの変更ログを保持して、変更とその影響を追跡します。