メインコンテンツまでスキップ

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"
}
]
}
}
}

一般的な問題のトラブルシューティング

ルールが発動しない

  1. ルール構文の確認

    {
    "rules": [
    {
    "pattern": "^[A-Z][a-zA-Z]*$", // 有効な正規表現パターン
    "filePattern": "*.ts", // 有効なグロブパターン
    "severity": "error" // 有効な重要度レベル
    }
    ]
    }
  2. ファイルパスの確認

    # ルールが正しい場所にあることを確認
    .cursor/
    └── rules/
    └── your-rule.json

パフォーマンスの問題

  1. パターンの最適化

    {
    "rules": [
    {
    "pattern": "^[A-Z]\\w*$", // ^[A-Z][a-zA-Z]*$ より効率的
    "filePattern": "*.{ts,js}" // 拡張子をグループ化
    }
    ]
    }
  2. 除外の使用

    {
    "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

定期的な更新

  1. ルールの有効性を確認
  2. フィードバックに基づいてパターンを更新
  3. 偽陽性結果を監視
  4. 重要度レベルを調整
ヒント

MDCルールの変更ログを保持して、変更とその影響を追跡します。

関連リソース