🍣

CursorのProject Rulesの調査メモ

2025/03/25に公開

Cursorルールファイル(.mdcファイル)は、Cursor AIがプロジェクトの特定の要件やベストプラクティスを理解し、適切なコード生成や提案を行うための重要な設定ファイル

概要

  • Cursorルールファイルは、プロジェクトのルールやガイドラインを定義するために使用される
  • .mdc形式で記述され、.cursor/rules/ディレクトリに配置されます。

※Cursor v0.45より前は.cursorrulesファイル1つを使用していたが、以降は複数ファイルの対応に変わった

主な定義内容

  1. プロジェクト構造の定義:
    • 特定のディレクトリ構造やファイル命名規則を強制します。
  2. コーディング規約の適用:
    • 命名規則やコードスタイルを一貫性を持たせます。
  3. ベストプラクティスの推奨:
    • パフォーマンス最適化やセキュリティ対策に関するガイドラインを提供します。
  4. AIによるコード生成のサポート:
    • Cursor AIがルールに基づいてコードを生成し、プロジェクトの品質を向上させます。

mdcファイルの命名規則

Cursorルールファイルの命名規則は以下の通りです:

  1. ファイル拡張子は.mdcを使用します[1][5]。
  2. ファイル名にはkebab-caseを使用します[1][3]。
  3. ファイル名は説明的で、ルールの目的を反映させるべきです[1][3]。
  4. 数字のプレフィックスを使用して優先順位や順序を示すことができます。※大きい方が優先
    例えば:
    • 001-099: コア/ワークスペースルール
    • 100-199: 統合ルール
    • 200-299: パターンルール[2]
  5. 一般的なパターンは「technology-focus-cursorrules-prompt-file」のようになります[3]。
  6. ルールファイルは.cursor/rulesディレクトリに直接配置します[3][5]。

これらの命名規則に従うことで、ルールファイルの整理と管理が容易になり、プロジェクト内での一貫性が保たれます。

mdcファイル内の構成要素

  1. フロントマター(YAML形式):
    • description: ルールの簡潔な説明
    • globs: ルールを適用するファイルパターン
    • alwaysApply: ルールを常に適用するかどうか
  2. Markdownコンテンツ:
    • ルールの詳細な説明やコードサンプルを含む。
    • @context@rulesなどのアノテーションを使用して、追加情報を提供します。
  3. メタデータアノテーション:
    • @context: コンテキスト情報を提供
    • @rules: ルールや要件のリストを定義
    • @examples: 実装例を示す
    • @format: フォーマット仕様を定義する
    • @options: 利用可能なオプションを記述する
    • @implementations: 完全な実装の詳細を記述する
    • @related: 関連するドキュメントやコードを参照する
    • @best_practices: ベストプラクティスを定義する
    • @implementation_rules: 実装に関するガイドラインを提供する
    • @patterns: 一般的なパターンを定義
    • @mistakes: 一般的な間違いとその修正方法を記述する
    • @validation: 検証ルールを定義する
(フロントマター)
---
description: Reactコンポーネント作成ガイドライン
globs: src/components/**/*.tsx
alwaysApply: false
---
(**Markdownコンテンツ**)
# Reactコンポーネント開発ルール

(**メタデータアノテーション**)
@context
このルールはReactコンポーネントの開発に適用されます。

## 命名規則
- コンポーネント名はPascalCaseを使用すること
- ファイル名はコンポーネント名と一致させること

## 構造
- 関数コンポーネントを使用すること
- propsの型定義を明示的に行うこと

@rules
- コンポーネントは単一責任の原則に従うこと
- 副作用はuseEffectフック内で管理すること

## コードサンプル

import React, { useEffect, useState } from 'react';

interface UserProfileProps {
userId: string;
}

const UserProfile: React.FC<UserProfileProps> = ({ userId }) => {
const [userData, setUserData] = useState(null);

useEffect(() => {
// ユーザーデータの取得ロジック
}, [userId]);

return (
<div>
{/* コンポーネントの表示ロジック */}
</div>
);
};

export default UserProfile;

Cursorルールの階層化の例

※数字はpriorityで、わかりやすいようにファイルの先頭につけることを想定

※数値は大きい方が優先される

001-099: コア/ワークスペースルール

  • 説明: これらのルールは、Cursorの基本的な動作やワークスペース全体に適用される設定を定義します。
    例えば、プロジェクトの構成、基本的なコードスタイル、エディタの設定などが含まれます。
  • :
    • 001: プロジェクトのルートディレクトリを指定するルール
    • 010: デフォルトのコードフォーマット設定を定義するルール

100-199: 統合ルール

  • 説明: これらのルールは、外部ツールやサービスとの統合を管理します。
    例えば、バージョン管理システム(Gitなど)、CI/CDパイプライン、外部ライブラリのインポートなどが含まれます。
  • :
    • 100: Gitリポジトリとの連携を設定するルール
    • 150: Jenkins CI/CDパイプラインとの統合を定義するルール

200-299: パターンルール

  • 説明: これらのルールは、特定のコードパターンや構造に対する処理を定義します。
    例えば、特定の関数やクラスの生成、コードのリファクタリングルールなどが含まれます。
  • :
    • 200: 特定のクラス構造を自動生成するルール
    • 250: 関数名の命名規則を強制するルール

フロントマター**(YAML形式)**の詳細


主要フィールド

1. description

  • 役割: ルールの目的を人間可読な形式で説明[1][5][9]
  • 例: description: Reactコンポーネントのベストプラクティス
  • ベストプラクティス:
    • 50文字以内で簡潔に記述
    • キーワードを先頭に配置(例: "Goコーディング規約")
    • 日本語/英語の統一

2. globs

  • 役割: ルール適用対象のファイルパターン指定[2][4][9]
  • 例: globs: src/components/**/*.tsx
  • 設計指針:
    • 階層構造を考慮(例: src/features/**/*.tsx
    • 拡張子の明示(例: .test.js
    • 除外パターンの併用(例: !**/legacy/**

3. alwaysApply

  • 役割: グローバル適用フラグ[1][7]
  • 例: alwaysApply: false
  • 動作特性:
    • true: ファイルパス無視で全適用
    • false: globsパターンに基づく適用

ルールタイプ別メタデータ設定

タイプ description globs alwaysApply ユースケース例
Always 任意 * true 全プロジェクト共通ルール
Auto Attached 特定パターン false 言語固有ルール
Agent Requested 詳細記述 false 設計原則
Manual false 非推奨パターン

フロントマターの例

---
description: Reactコンポーネント作成ガイドライン
globs: src/components/**/*.tsx
alwaysApply: false
Related_docs: <https://reactjs.org/docs/components-and-props.html>
priority: 80
---

メタデータ間の相互作用

1. globsとalwaysApplyの関係

  • alwaysApply=trueの場合、globs値は無視され全ファイルに適用[1][7]
  • alwaysApply=falseではglobsパターンが厳密に評価[4][9]

2. descriptionの影響範囲

  • Agent Requested型ルールでAIの判断材料として活用[1][9]
  • 検索インデックス作成時のキーワード抽出源[5][7]

3. 複数ルールの競合解決

  1. 詳細なglobsパターンが優先(例: */controller/*.js > .js
  2. alwaysApplyが最優先
  3. ファイルパス近接性を考慮[4][9]

ケース別の応用使用例

マイクロサービスアーキテクチャ向け設定

---
description: 注文サービスAPI規約
globs: services/order/**/*.ts
alwaysApply: false
---
# API設計原則
- RESTful規約厳守
- Swaggerドキュメント必須
- エンドポイントバージョニング(v1/)

セキュリティポリシー

---
description: 認証処理ガイドライン
globs: middleware/auth*.js,utils/security.js
---
# セキュリティ要件
- JWTトークンのHS256アルゴリズム使用
- パスワードハッシュ化(bcrypt)
- レートリミット実装必須

トラブルシューティング

ルール未適用時の対応フロー

  1. メタデータ検証(description/globs入力確認)[5]
  2. ファイルパス再チェック(相対パス/絶対パス)
  3. インデックス再構築(⌘+Shift+P → "Rebuild Index")
  4. Cursor再起動
  5. ルール優先度の調整[9]

デバッグ手法

---
description: デバッグ用ルール
globs: *
---
# 動作確認
- 適用確認メッセージ表示
- 現在日時: {{CURRENT_DATETIME}}

上記ルールで適用範囲を確認しつつ、コンソールログを監視[5][9]。

最新動向(Cursor 0.47.5以降)

  1. 動的変数サポート: {{FILE_PATH}}{{PROJECT_NAME}}の使用可能[1][7]

  2. パターン継承: @extends: base-rule.mdcによるルール継承[9]

  3. 条件付き適用:

    When: FILE_SIZE > 100kb
    Apply: 最適化警告を発動
    

メタデータアノテーションの詳細


メタデータアノテーションは、Cursorのルールファイル(.mdc)内で使用され、特定のセクションに追加情報を提供するための機能。

アノテーションは、有効なJSONフォーマットで記述し、関連するセクションの前に配置する。

適切に使用することで、AIがプロジェクト固有の要件やガイドラインを理解し、より正確なコード生成や提案を行うことができる1

よく利用するプロパティ

  1. @context: プロジェクトやドキュメントのコンテキスト情報を提供する

    例:

    @context {
      "type": "documentation",
      "purpose": "cursor_rules",
      "format_version": "1.0.0"
    }
    
  2. @rules: ルールやリクワイアメントのリストを定義する

    例:

    @rules [
      {
        "id": "rule_one",
        "severity": "error",
        "description": "description of rule one"
      }
    ]
    
  3. @format: フォーマット仕様を定義する

  4. @options: 利用可能なオプションを記述する

  5. @examples: 実装例を提供する

  6. @implementations: 完全な実装の詳細を記述する

  7. @related: 関連するドキュメントやコードを参照する

  8. @best_practices: ベストプラクティスを定義する

  9. @implementation_rules: 実装に関するガイドラインを提供する

  10. @patterns: 一般的なパターンを定義

  11. @mistakes: 一般的な間違いとその修正方法を記述する

  12. @validation: 検証ルールを定義する

生成や周辺ツールなど

Discussion