WithCodeMedia-1-pc
previous arrowprevious arrow
next arrownext arrow

WithCodeMedia-1-sp
previous arrowprevious arrow
next arrownext arrow

Cursor Project Rulesでコーディング規約を自動化|カスタムルール設定・チーム品質向上

生徒

Cursorを使ってはいるんですが、毎回「TypeScriptで書いてください」とか「BEMでCSSを書いてください」とプロンプトに書くのが面倒です。何か良い方法はありますか?

ペン博士

それはProject Rulesを使えば一発で解決じゃ!プロジェクトごとにコーディング規約・命名規則・ディレクトリ構造をルールファイルに書いておけば、Cursorが毎回それに従って出力してくれるようになるんじゃぞ。今日はProject Rulesの全タイプの使い分けから、実践的なルール設定例まで徹底解説するぞい!

目次

この記事でわかること

  • Cursor Project Rulesとは何か・従来の.cursorrulesとの違い
  • Always・Auto Attached・Agent Requested・Manualの4タイプの使い分け方
  • そのままコピーして使えるルールテンプレート5選(フロントエンド・テスト・WordPress・Docker・PR作成)
  • チームでProject Rulesを定着させる3つの戦略
  • ルール設計の原則・ファイルサイズの目安・よくある失敗パターン

Cursorで毎回「TypeScriptで書いてください」「BEMで書いてください」とプロンプトに書く必要はありません。Project Rules(`.cursor/rules/*.mdc`)にコーディング規約を定義すれば、Cursor Chat/Composerが自動でルールを参照してコードを生成します。チームでGitにコミットして共有すれば、全員のコードアウトプットを均質化できます。

あわせて読みたい:
Webhookを実際に使ってみる|SlackやGitHubと連携する実装手順(自動化の基礎)
TypeScript型安全なAPIクライアントの作り方完全ガイド(TypeScript実践)


Cursor Project Rulesとは何か|3種のカスタムルール比較

Project Rules はCursor v0.45から導入されたプロジェクト固有のコンテキスト設定機能です。`.cursor/rules/` ディレクトリ以下に `.mdc` 拡張子のファイルとして保存され、Cursor Chat や Composerの対話に自動でコンテキストとして注入されます。

User RulesProject Rules.cursorrules(非推奨)
適用スコープCursorアプリ全体(全プロジェクト共通)特定のリポジトリ・ディレクトリのみ特定のリポジトリ・ディレクトリのみ
記述形式テキストのみテキスト + ファイルシンボルテキストのみ
発動条件常時Always / Auto Attached / Agent Requested / Manual の4タイプ常時
ファイルの場所Cursorアプリ設定内.cursor/rules/*.mdcプロジェクトルートの.cursorrules
将来性継続サポート推奨(v0.49〜さらに強化)廃止予定
Gitでチーム共有不可(個人設定)可能(リポジトリに含まれる)可能
【Project Rules が強い理由】

✅ チーム全員が同じルールを使える
→ `.cursor/rules/*.mdc` をGitにコミットすれば全員に自動適用

✅ ファイルシンボルを使ってプロジェクト内のファイルを参照できる
→ 「@PULL_REQUEST_TEMPLATE.md を読んでPRを作成してください」が可能

✅ 4タイプの発動条件で「いつルールを参照するか」を細かく制御できる
→ `*.test.ts` ファイルだけにテストルールを適用、など

✅ ルールを複数ファイルに分割して管理できる
→ frontend-rules.mdc / backend-rules.mdc / test-rules.mdc など

4タイプの発動条件を使い分ける|Always・Auto Attached・Agent Requested・Manual

タイプ1:Always(常時参照)

すべてのChat/Composerセッションで常にコンテキストとして読み込まれます。プロジェクト全体に適用すべき普遍的なルール(技術スタック・コーディングスタイル・禁止事項)に使います。Always ルールはファイルサイズを500行以内に保つことを推奨します。長すぎるとコンテキストウィンドウを圧迫し、コード生成の品質が下がります。

タイプ2:Auto Attached(ファイルパターン一致で自動参照)

Glob パターンで指定したファイルが会話に含まれた場合に自動でルールが読み込まれます。特定ファイル種別に特化したルールに最適です。

【Auto Attached の設定例】

テストファイル専用ルール:
  Globs: **/*.test.ts, **/*.spec.ts
  → テストファイルを開いたときだけ「Vitest形式で書く・AAA構造で書く」を適用

CSSファイル専用ルール:
  Globs: **/*.css, **/*.scss
  → CSSファイルに対してのみ「BEM記法・CSS変数使用必須・モバイルファースト」を適用

WordPressテンプレート専用ルール:
  Globs: **/templates/**/*.php, **/template-parts/**/*.php
  → PHPテンプレートファイルに「esc_html / wp_kses_post の使用必須・nonce 検証」を適用

タイプ3:Agent Requested(AIが必要と判断したときに参照)

Description に記載された内容をもとに、Cursor の AI がルールを参照するかどうかを自動判断します。AIが判断できるよう、Descriptionに「〜するときに参照する」「〜に関するルール」という具体的なシーン・キーワードを含めることが重要です。

【Agent Requested の推奨ケース】

✅ 特定のドメイン知識が必要なルール(DBの命名規則・インデックス設計方針)
✅ ある程度頻度は低いが、使うときには必ず参照してほしいルール
✅ セキュリティに関するルール(SQL インジェクション対策・入力値検証ルール)
✅ Docker環境・環境依存のコマンド実行ルール

Description 例:「データベース設計・マイグレーション・スキーマ変更について質問・作業するときに参照する」

タイプ4:Manual(明示的に指定したときのみ参照)

プロンプトにルールのファイル名を `@ルール名` 形式で明示的に指定した場合にのみ読み込まれます。頻度が低い特殊な作業(PullRequest作成・リリースノート生成など)や、誤作動を防ぎたい重要な手順に適しています。


Project Rules の設定方法

手動で新規作成する

  1. Cursor メニュー「Cursor Settings」を開く
  2. 「Rules」タブ → 「Project Rules」セクションの「Add new rule」をクリック
  3. または ⌘(Ctrl)+ Shift + P → 「File: New Cursor Rule」と入力して実行
  4. ファイル名(例:coding-standards)を入力して Enter
  5. RuleType・Globs(Auto Attached の場合)・Description(Agent Requested の場合)を設定する
  6. ルール本文を記述して保存する
// 保存場所
.cursor/
  └─ rules/
       ├─ coding-standards.mdc    // Always:全体コーディングルール
       ├─ frontend-rules.mdc      // Auto Attached:*.tsx, *.ts
       ├─ test-rules.mdc          // Auto Attached:*.test.ts
       ├─ database-rules.mdc      // Agent Requested
       └─ create-pullrequest.mdc  // Manual

// ✅ .cursor/rules/ ディレクトリをGitにコミットすることで
//    チームメンバー全員に同じルールが自動適用される

AIに自動生成させる(/Generate Cursor Rules コマンド)

Cursor Chat のプロンプト入力エリアで /Generate Cursor Rules と入力すると、AI が対話内容をもとにルールを自動生成します。

【/Generate Cursor Rules の活用パターン】

パターン1:対話後にルール化する
→ AI との実装のやり取りが終わった後に
  「この会話をProject Rulesにまとめてください」
→ 今回の実装方針・スタイルガイドがルールとして保存される

パターン2:最初にルールを作成してから開発を始める
→ 新規プロジェクト開始時に
  「React + TypeScript + Tailwind を使ったフロントエンドプロジェクトのProject Rulesを作成してください」
  「ディレクトリ構造はfeatures/コンポーネント設計はAtomicDesignです」
→ プロジェクトのルールセットが一気に生成される

パターン3:既存のREADMEやESLint設定からルール化する
→ 「@eslint.config.js @README.md の内容を参考にProject Rulesを作成してください」
→ 既存の設定ファイルからルールを自動抽出する

実践的なProject Rules設定例5選|コピーして使えるテンプレート

例1:フロントエンド全体のコーディングルール(Always)

ファイル名:frontend-coding-standards.mdc / RuleType:Always

## フロントエンドコーディング規約

### 技術スタック
- 言語:TypeScript(strict: true)
- フレームワーク:React 18 + Next.js 14 (App Router)
- スタイリング:Tailwind CSS + CSS Variables
- 状態管理:Zustand(サーバー状態は TanStack Query)
- フォーム:React Hook Form + Zod

### 型の扱い
- `any` 型の使用禁止。不明な型は `unknown` を使う
- 型アサーション(`as`)の使用は最小限にし、型ガードを使う
- 関数の戻り値の型は明示的に定義する

### コンポーネント設計
- 1ファイル1コンポーネントを原則とする
- Props の型は `interface` で定義し、ファイル先頭に記述する
- コンポーネントはデフォルトエクスポートを使用する
- 300行を超えるコンポーネントは分割を検討する

### 命名規則
- コンポーネント:PascalCase(例:`UserProfileCard.tsx`)
- 関数・変数:camelCase(例:`getUserProfile`)
- 定数:SCREAMING_SNAKE_CASE(例:`MAX_RETRY_COUNT`)
- カスタムフック:`use` プレフィックス(例:`useUserProfile`)
- CSS クラス:Tailwind を基本とし、カスタムは BEM を使用する

### 禁止事項
- `console.log` の本番コードへの混入(デバッグ後は必ず削除)
- `useEffect` 内での直接 DOM 操作(Ref を使う)
- インラインスタイル(`style={{ color: 'red' }}`)の使用
- マジックナンバーの直書き(定数として切り出す)

例2:テストファイルの記述ルール(Auto Attached)

ファイル名:test-rules.mdc / RuleType:Auto Attached / Globs:**/*.test.ts, **/*.test.tsx, **/*.spec.ts

## テストコード規約

### テストフレームワーク
- Vitest(単体・統合テスト)
- React Testing Library(コンポーネントテスト)
- Playwright(E2Eテスト)

### テスト構造(AAA パターン必須)
- Arrange(準備)→ Act(実行)→ Assert(検証)の順で記述する
- 各フェーズをコメントで明示すること

```typescript
it('ユーザー名が空のとき、エラーメッセージを表示する', () => {
  // Arrange
  const { getByRole, getByText } = render(<LoginForm />);
  const submitButton = getByRole('button', { name: '送信' });

  // Act
  fireEvent.click(submitButton);

  // Assert
  expect(getByText('ユーザー名を入力してください')).toBeInTheDocument();
});
```

### テストの命名規則
- `it('〜のとき、〜する')` の形式(日本語可)
- テスト対象の振る舞いが明確にわかる名前をつける
- NG:`it('test1')` / OK:`it('emailが無効な形式のとき、送信ボタンが無効になる')`

### モックの扱い
- `vi.mock()` を使ったモジュールモックは `describe` ブロック外に配置する
- モックデータはテストファイルの末尾にまとめて定義する
- `afterEach` で `vi.clearAllMocks()` を呼び出す

例3:WordPress テーマ開発ルール(Auto Attached)

ファイル名:wordpress-theme-rules.mdc / RuleType:Auto Attached / Globs:**/*.php

## WordPress テーマ開発規約

### セキュリティ(必須)
- 出力は必ずエスケープ関数を使用する
  - HTMLコンテキスト:`esc_html()` `esc_attr()` `wp_kses_post()`
  - URLコンテキスト:`esc_url()`
  - JSコンテキスト:`esc_js()`
- フォーム送信には必ず nonce を検証する
  `wp_verify_nonce()` で検証してから処理する
- 入力値は必ずサニタイズする
  - テキスト:`sanitize_text_field()`
  - メールアドレス:`sanitize_email()`
  - URL:`esc_url_raw()`

### テンプレート設計
- 共通パーツは `get_template_part()` を使う(コピペ禁止)
- カスタムフィールドは ACF を使い、`get_field()` で取得する
- ループ内では `have_posts()` / `the_post()` を使う

### アセット登録
- JavaScript は `wp_enqueue_script()` で登録する(直接 `<script>` タグ禁止)
- CSS は `wp_enqueue_style()` で登録する
- バージョンには `filemtime()` を使ってキャッシュバスティングを行う

```php
wp_enqueue_style(
  'theme-style',
  get_template_directory_uri() . '/assets/css/main.css',
  [],
  filemtime(get_template_directory() . '/assets/css/main.css')
);
```

例4:コマンド実行ルール(Agent Requested)

ファイル名:docker-commands.mdc / RuleType:Agent Requested / Description:Docker環境でのコマンド実行・テスト実行・コンテナ操作をするときに参照する

## Docker 環境でのコマンド実行ルール

### 基本の実行コマンド
通常の npm コマンドは使用せず、必ず docker compose exec を経由して実行する。

```bash
# 開発サーバー起動
docker compose up -d

# Node.js コマンドの実行(npmの代わりに使う)
docker compose exec app npm run dev

# テスト実行
docker compose exec app npx vitest run

# 特定ファイルのテストのみ実行
docker compose exec app npx vitest run src/utils/formatter.test.ts

# 特定行のテストのみ実行(失敗箇所がわかっている場合)
docker compose exec app npx vitest run src/utils/formatter.test.ts:25
```

### データベース操作
```bash
# マイグレーション実行
docker compose exec app npx prisma migrate dev

# Prisma Studio(DB GUI)
docker compose exec app npx prisma studio
```

### コンテナ再起動
```bash
# 特定コンテナの再起動
docker compose restart app

# 全コンテナの停止・削除・再起動
docker compose down && docker compose up -d
```

例5:PullRequest 自動作成ルール(Manual)

ファイル名:create-pullrequest.mdc / RuleType:Manual

## Pull Request 作成手順

### 必須前提条件
1. Issue 番号を確認する
   - Issue のリンクが提供されていない場合は「関連する Issue はありますか?」と必ず確認する
   - Issue が存在しない場合は PR の説明に明記する

### 差分の確認
- マージ先ブランチは特に指示がなければ `main` とする
- `git diff origin/main...HEAD | cat` で差分を確認してからPRを作成する

### Pull Request の作成
```bash
# ブランチのプッシュと PR 作成を1コマンドで実行
git push origin HEAD && \
echo -e "{{PRテンプレートを1行に変換}}" | \
gh pr create --draft --title "{{PRタイトル}}" --body-file - && \
gh pr view --web
```

### PR テンプレート
@PULL_REQUEST_TEMPLATE.md からテンプレート内容を取得すること

### タイトルの命名規則
- `feat: ユーザー認証機能の追加`(新機能)
- `fix: ログイン時のエラーハンドリング修正`(バグ修正)
- `refactor: UserService のロジック整理`(リファクタリング)
- `docs: API仕様書の更新`(ドキュメント)
- `test: ユーザー登録のテスト追加`(テスト)

Project Rules 設計ガイド|タイプ別の使い分け早見表

ルール内容推奨タイプ理由
プロジェクト全体の技術スタック・禁止事項Alwaysすべての作業に適用されるため
命名規則・ディレクトリ構造の基本方針Always常に参照が必要なため
テストコードの書き方(Vitest / Jest)Auto Attached(*.test.ts)テストファイルのときだけ必要なため
CSS / スタイリング規約(BEM・Tailwind)Auto Attached(*.css, *.scss)スタイルファイルのときだけ必要なため
WordPress テーマ・PHP セキュリティAuto Attached(*.php)PHPファイルのときだけ必要なため
Docker コマンド・環境依存の操作Agent Requestedコマンド実行を依頼したときのみ必要なため
DB設計・マイグレーション方針Agent RequestedDB作業のときのみ必要なため
PullRequest 作成手順ManualPR作成時のみ使う特殊フローのため
リリースノート・CHANGELOG 生成Manualリリース時のみ使う特殊フローのため
緊急デプロイ・ロールバック手順Manual誤作動を防ぐため明示的指定が安全
【ルール設計の3つの原則】

1. Always に詰め込みすぎない
→ Always ルールが長すぎるとコンテキストウィンドウを圧迫する
→ 「絶対に必要なもの」だけを Always にして、それ以外は分割する

2. Auto Attached は Glob パターンを具体的に設定する
→ 「**/*.ts」だと広すぎる → 「**/*.test.ts」のように絞る
→ 複数のパターンを組み合わせる:「**/*.css, **/*.scss, **/*.module.css」

3. 1ルールファイルに1テーマ
→ 「frontend-rules.mdc」にWordPressルールを混在させない
→ 分割することでルール管理が容易になる(追加・削除・改訂しやすい)

チーム開発でProject Rulesを定着させる3つの戦略

戦略1:`.cursor/rules/` をGitリポジトリに含める

// 推奨ディレクトリ構成
your-project/
├── .cursor/
│   └── rules/
│       ├── README.md          // ← ルールの説明書を作る
│       ├── coding-standards.mdc
│       ├── frontend-rules.mdc
│       ├── test-rules.mdc
│       └── create-pr.mdc
├── src/
└── ...

// チームへの周知コミットメッセージ例
git commit -m "feat: Cursor Project Rules を追加(コーディング規約・テストルール・PR自動作成)"

戦略2:ルールが効いているかを確認する「叫ばせるテスト」

ルールが正しく読み込まれているかを確認するために、ルールの先頭に確認用の合言葉を「叫ばせる」というテクニックがあります。

// ルールの先頭に追加するデバッグ行
まず、このファイルを参照したら、「RULE_LOADED: frontend-coding-standards」と出力してください。

// Chat / Composer で AI からこのメッセージが表示されれば
// ルールのコンテキストが正しく読み込まれている証拠

// 確認後はデバッグ行を削除して本番運用に移る

戦略3:AI を使ってルールを継続改善する

// ルール改善の質問テンプレート
@frontend-coding-standards.mdc のルールについて
わかりにくいところや、改善したほうがよいポイントはありますか?
特に「コンポーネント設計」セクションが意図通りに機能していません。

// AIが返してくれること
→ ルールの曖昧な表現の指摘
→ より具体的な書き方の提案
→ 追加すべきルールの提案
→ 矛盾するルールの検出

よくある質問(FAQ)

Project Rules と User Rules はどちらを優先するべきですか?

基本的にProject Rulesを使うことを推奨します。User RulesはCursor全体(すべてのプロジェクト)に適用されるため、プロジェクトごとに技術スタックが違う場合に矛盾が生じることがあります。User Rulesには「日本語で回答してください」のような全プロジェクト共通の汎用的な指示のみを記述するのが理想的です。

ルールが多くなりすぎたときの対処法はありますか?

ルールの分割・タイプの適切な割り当て・定期的な見直しの3つが有効です。Always に詰め込みすぎるとコンテキストウィンドウを圧迫してコード品質が落ちます。「毎回必要か?」を問い直して Auto Attached や Manual に移動させることが重要です。四半期に1度はルールを見直し、使われていないルールを削除またはアーカイブする習慣をつけましょう。

.cursorrules はまだ使えますか?すぐに移行すべきですか?

v0.49 時点では .cursorrules はまだ動作しますが、Cursor公式ドキュメントで廃止予定と明記されているため、新規プロジェクトではProject Rulesを使うべきです。既存の .cursorrules がある場合は、内容をそのまま .cursor/rules/coding-standards.mdc(Always タイプ)に移行するだけで動作します。移行自体は数分で完了します。

ルールに機密情報(APIキーなど)を書いても大丈夫ですか?

絶対に書いてはいけません。.cursor/rules/ をGitにコミットする場合、ルールファイルはリポジトリ上にパブリックで公開される可能性があります。APIキーはシークレット管理ツール(AWS Secrets Manager等)で管理し、ルールファイルには「APIキーは .envAPI_KEY 変数から読み込むこと」のような参照方法のみを記述してください。

ルールファイルの推奨の長さはありますか?

Always タイプのルールは500行以内(理想は200〜300行)を目安にすることを推奨します。Cursor はルールをコンテキストとして読み込むため、長すぎると有効なコードウィンドウが減り、コード生成の品質が下がります。「1ルールファイルに1テーマ」を原則として、必要に応じてファイルを分割することでコンテキストを節約できます。Auto Attached や Manual は必要時のみ読み込まれるため、比較的長くても問題ありません。


生徒

Project Rulesを設定しておけば、毎回「TypeScriptで」「BEMで」と書かなくても良くなるんですね!チームで設定を共有できるのも便利そうです。

ペン博士

その通りじゃ!しかも、チーム全員がCursorを使っていれば、コードレビューで「この命名おかしくない?」「このファイルはどこに置くの?」という会話が激減するんじゃ。WithCodeでフロントエンドのスキルをしっかり磨いた後、Project Rulesで「自分だけのルールセット」を育てていくと、プロとしての開発効率が一気に上がるぞ!

生徒

今日からまずはAlwaysルールを1つ作ってみます!PRの自動作成ルールも便利そうで、チームに共有したいです!


まとめ

  • 3種のルールを使い分ける:User Rules(全プロジェクト共通)/ Project Rules(リポジトリ固有・推奨)/ .cursorrules(廃止予定・移行推奨)
  • 4タイプの発動条件:Always(常時)/ Auto Attached(ファイルパターン)/ Agent Requested(AI判断)/ Manual(明示指定)を用途に合わせて選ぶ。
  • Always に詰め込みすぎない:コンテキストウィンドウを節約するため、ルールを適切なタイプに分散させることが品質向上の鍵。
  • Gitでチーム共有.cursor/rules/ をGitにコミットすることでチーム全員に同じルールが自動適用される。
  • 「叫ばせるテスト」でルールの読み込みを確認:ルールの先頭にデバッグ用の出力行を追加して動作確認する。
  • AIでルールを継続改善する@ルールファイル名 このルールの改善点はありますか? で定期的にルールをブラッシュアップする。

Project Rules は設定すればするほど「コードを書く時間」が増え「プロンプトを説明する時間」が減る、開発生産性への最高の投資です。まず1ファイルから始めて、少しずつルールセットを育てていきましょう。


関連記事


参考リンク(公式・一次情報)


WithCodeを体験できる初級コース公開中!

WithCodeを体験できる初級コース公開中!

初級コース(¥49,800)が完全無料に!

  • 期間:1週間
  • 学習内容:
    ロードマップ/基礎知識/環境構築/HTML/CSS/LP・ポートフォリオ作成
    正しい学習方法で「確かな成長」を実感できるカリキュラム。

副業・フリーランスが主流になっている今こそ、自らのスキルで稼げる人材を目指してみませんか?

未経験でも心配することはありません。初級コースを受講される方の大多数はプログラミング未経験です。まずは無料カウンセリングで、悩みや不安をお聞かせください!

この記事を書いた人

WithCode(ウィズコード)は「目指すなら稼げる人材」をビジョンに、累計400名以上のフリーランスを輩出してきた超実践型プログラミングスクールです。150社以上の実案件支援を特徴にWeb制作・Webデザインなどの役立つ情報を現場のノウハウに基づいて発信していきます。

– service –WithGroupの運営サービス

  • WithCode
    - ウィズコード -

    スクール

    「未経験」から
    現場で通用する
    スキルを身に付けよう!

    詳細はこちら
  • WithFree
    - ウィズフリ -

    実案件サポート

    制作会社のサポート下で
    実務経験を積んでいこう!

    詳細はこちら

公式サイト より
今すぐ
無料カウンセリング
予約!

目次