CursorのRuleTypeとは？

## はじめに

Cursor熱いですね！
自分のチームでも申請すれば誰でもCursorを使えるくらい効果を期待されているエディタですし、実際にこれまでの開発よりも何倍も早く実装が完了できるようになりました。
今回はチームでよりCursorを使いこなせるように、基本であるRuleファイルについて解説する記事を作成しました。


## Cursorってなに？

Cursorは、VSCodeをフォークして作られた**AIコーディング特化のエディタ**です。普通のVSCodeとほとんど同じ見た目・操作感なんですが、

* `Cmd + K`（Ctrl + K）で選択中のコードに対して「これリファクタして」と頼めたり
* `Cmd + L`（Ctrl + L）でサイドバーのチャットボックスを開いて質問できたり
* プロジェクト全体の文脈を理解した上で修正案を出してくれたり

といった、**まるでペアプロしてくれるかのような使い方**ができます。

VSCodeでAI拡張を入れるのとは一味違って、Cursorでは**最初からAI前提で作られてる**のが魅力。コードの補完や生成だけじゃなくて、設計の相談やバグ修正まで一緒にやってくれる、そんな頼れる相棒的な存在です。



## Cursor Ruleってなに？

Cursorには「**ルール（Rule）**」という機能があって、これが**AIに指示を与えるためのテンプレート**のような役割を果たします。

例えば、

* 「変数名は必ずスネークケースにして」
* 「ユニットテストはRSpecで書いてね」
* 「コメントは日本語で書いて」

といった**プロジェクトごとのお作法やスタイルガイド**を、AIに毎回手で説明しなくても、このルールとして記述しておけば**勝手に守ってくれる**ようになる、という仕組みです。

ルールはMarkdownベースの`.mdc`ファイルとして定義します。

```markdown
---
description: APIルール
globs: "app/controllers/api/**/*.rb"
alwaysApply: false
---

- コントローラーの命名は複数形にする
- パラメータチェックには strong_parameters を使う
```

上の例だと、「`app/controllers/api/`配下のファイルを編集してるときだけこのルールを適用する」という感じになります。



## Rule Typeってなに？

Cursor 0.47.5から追加された機能で、「**このルールをAIにいつ渡すか？**」っていう**適用タイミングの設定**です。ざっくり4種類あります：

### 1. `Always`（常に適用）

* どんなチャットや編集でも**毎回必ず適用**されるルール
* 基本的なコーディングスタイル、プロジェクト全体のポリシーに向いてる
* `.mdc`ファイルのYAMLに `alwaysApply: true` を設定

```yaml
---
description: 全体に適用されるルール
alwaysApply: true
---
```

### 2. `Auto Attached`（特定パターンで自動適用）

* 対象ファイルが `globs` にマッチするときだけAIに適用される
* 例えば `globs: "frontend/**"` にしておけば、フロントエンドコードだけに適用

```yaml
---
description: フロント用
globs: "frontend/**"
---
```

自分はAuto Attachedが最も使用されるかと思っていて、以下のサンプルのように細かく指定していけばルールが肥大化することなく、かなり重宝しています。
また、コンテナで開発をしている場合、コマンドの実行方法もコンテナ内で実行しなくてはいけないなどの制約も書いておけば、ルールに沿ってコマンド実行してくれます。

spec/の場合は〜

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/7b88854b-7352-4ab7-9a7a-894ad07115bc.png)

controller/の場合は~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/bead7b01-18d7-4ff7-97e5-4caa1c3a80a1.png)

*.jbの場合は~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/a4c414fa-53e1-4555-b1fd-369332b98f72.png)



### 3. `Agent Requested`（AIが必要に応じて使う）

* 常に渡されるわけじゃなく、AIが「今このルール使ったほうがいいな」と判断したときだけ使われるルールです
* `description` が超重要（これを読んでAIがルールを選ぶ）になってきます
* 汎用的な補足ルールとか、チーム用Tipsにおすすめです

```yaml
---
description: セキュリティチェックが必要なときに読むやつ
globs: "**/*.rb"
---
```

### 4. `Manual`（明示的に使うときだけ）

* チャットで `@ルール名` を書いたときだけ使われる
* `alwaysApply: false` かつ `globs` なし、`description` なしのルールが該当
* 例外的な状況や、たまにしか使わないノウハウにぴったり

```markdown
---
---

- この手順はCIサーバー上でしか使わないので、必要なときに手動で呼び出してね
```


例えばこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/6c279d37-6275-4ed3-92d7-b51c785d506f.png)


## おわりに

Cursorのルール機能を使えば、プロジェクトに合わせたAIの挙動を**細かくコントロール**できます。特に`Rule Type`を使い分けることで、

* 常に守ってほしいこと（Always）
* 特定ディレクトリでだけ必要なルール（Auto Attached）
* 必要なときにAIが自動で使ってくれる（Agent Requested）
* 手動で呼び出す特殊ルール（Manual）

のように整理できて、無駄なくスマートにAIを活用できます。
感覚的にはRuleなしだとほぼ人間の手直しが必要になるが、Ruleを整備すれば多くの実装がAIで完結できるようになります。

「うちのプロジェクト、AIに任せるにはちょっと癖があるんだよな〜」っていう場合ほど、このルール機能は真価を発揮します。まずは `.cursor/rules/` に `.mdc` ファイルを1つ作ってみて、Cursorの「New Cursor Rule」コマンドから試してみてください。ルールを育てていくと、AIとの開発がもっと自分たちらしく、もっと楽になりますよ！



## 余談

ここまでCursorの話をしておいてですが、自分はRoo Codeの方を頻繁に使っています。
Roo Codeの場合は.roo/の配下に同じようにmd形式のルールファイルを作成することができ、モードごとに管理することができます。こちらも気になる方はぜひ使ってみてください！

- モード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/afbb5a9d-829c-4f76-b135-fcc269ac4e85.png)

- Codeモードの場合は.roo/rules-codeに作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/548f9c24-d6cf-402d-8a55-f8aeda62ee11.png)