T-CREATOR

Cursor のカスタムルール設定 `.cursorrules` 徹底解説と実践例

Cursor のカスタムルール設定 `.cursorrules` 徹底解説と実践例

AI を活用したコード生成が当たり前となった現代、開発者の生産性を左右するのは AI をいかに自分好みに調教できるかにかかっています。Cursor の .cursorrules ファイルは、まさにその調教のための秘密兵器です。

この記事では、Cursor のカスタムルール設定について初心者の方でも理解できるよう、基礎から実践的な活用法まで詳しく解説いたします。記事を読み終える頃には、あなたのプロジェクトに最適化された AI アシスタントを手に入れることができるでしょう。

背景

.cursorrules ファイルとは何か

.cursorrules ファイルは、Cursor エディタで AI によるコード生成やサジェストをカスタマイズするための設定ファイルです。このファイルを配置することで、AI に対してプロジェクト固有のルールや好み、コーディング規約を伝えることができます。

Cursor の AI は非常に優秀ですが、デフォルトの状態ではあなたのプロジェクトの特殊な要件や、チームのコーディングスタイルを完全に理解していません。.cursorrules ファイルは、この gap を埋める重要な役割を果たします。

以下の図は、.cursorrules ファイルがどのように AI の動作に影響を与えるかを示しています。

mermaidflowchart TD
    user[開発者] -->|コード入力| cursor[Cursor AI]
    rules[.cursorrules] -->|ルール適用| cursor
    cursor -->|カスタマイズされた提案| output[最適化されたコード生成]
    cursor -->|デフォルト提案| default[標準的なコード生成]

    style rules fill:#e1f5fe
    style output fill:#c8e6c9
    style default fill:#ffcdd2

図で理解できる要点:

  • .cursorrules ファイルの有無で AI の出力品質が大きく変わる
  • カスタムルールにより、プロジェクト要件に特化したコード生成が可能

Cursor におけるカスタムルール機能の位置づけ

Cursor は GitHub Copilot や CodeWhisperer といった他の AI コード補完ツールと比較して、よりカスタマイズ性に優れた設計になっています。特に .cursorrules ファイルによる細かな調整機能は、Cursor の大きな差別化要因の一つです。

#機能CursorGitHub CopilotCodeWhisperer
1カスタムルール設定✅ (.cursorrules)
2プロジェクト理解✅ 高精度🔺 中程度🔺 中程度
3コンテキスト活用✅ 全ファイル🔺 近傍ファイル🔺 現在ファイル
4チーム規約対応✅ 完全対応

この表から分かるように、Cursor は他のツールでは実現できない柔軟なカスタマイズを提供しています。

従来のコード補完との違い

従来の IDE のコード補完は、主に構文やライブラリの API を基にした機械的な補完でした。一方、Cursor の AI 補完は文脈を理解し、より人間らしいコード生成を行います。

mermaidsequenceDiagram
    participant dev as 開発者
    participant traditional as 従来のIDE
    participant cursor as Cursor AI

    dev->>traditional: 関数名入力
    traditional->>dev: 構文補完のみ

    dev->>cursor: 同じ関数名入力
    Note over cursor: .cursorrules参照
    cursor->>dev: コンテキスト理解した<br/>カスタム補完

補足:従来の補完は構文レベルでの支援に留まりますが、Cursor は意図を理解したコード生成が可能です。

課題

デフォルト設定の限界

Cursor のデフォルト設定は汎用的に作られているため、以下のような限界があります。

プロジェクト特有の制約への対応不足

  • 特定のライブラリやフレームワークの使用制限
  • セキュリティ要件に基づく実装パターンの制約
  • パフォーマンス要件による実装方針の違い

コーディングスタイルの不一致

  • チーム独自の命名規則
  • インデントやフォーマットの好み
  • コメントの記述ルール

プロジェクト固有の要件への対応

実際の開発現場では、以下のような要件が存在することが多いです。

typescript// 例:レガシーシステムとの互換性要件
// jQuery を使わざるを得ない環境
// 特定のブラウザ対応が必要
// 社内ライブラリの使用義務

これらの要件は一般的な AI モデルでは理解が困難で、明示的にルールとして伝える必要があります。

開発効率の向上ニーズ

現代の開発では、以下のような効率化が求められています。

#従来の課題改善後の理想状態
1コードレビューでの指摘が多い最初からチーム規約に準拠
2ライブラリ選択で迷う時間が長いプロジェクト標準ライブラリを自動提案
3一貫性のないコード実装統一されたパターンでの実装

解決策

.cursorrules ファイルの基本構造

.cursorrules ファイルは、プレーンテキスト形式で Cursor AI への指示を記述します。基本的な構造は以下のとおりです。

ini# プロジェクト情報
このプロジェクトは [フレームワーク名] を使用した [アプリケーション種別] です。

# コーディング規約
- [具体的なルール1]
- [具体的なルール2]
- [具体的なルール3]

# 禁止事項
- [避けるべき実装パターン]
- [使用禁止ライブラリ]

# 推奨事項
- [推奨するライブラリ]
- [推奨する実装パターン]

ファイル構成の基本となるセクションを図で示します。

mermaidflowchart TB
    rules[.cursorrules ファイル]

    rules --> meta[メタ情報]
    rules --> coding[コーディング規約]
    rules --> forbidden[禁止事項]
    rules --> recommend[推奨事項]

    meta --> framework[フレームワーク指定]
    meta --> purpose[プロジェクト目的]

    coding --> naming[命名規則]
    coding --> format[フォーマットルール]
    coding --> structure[構造ルール]

    style rules fill:#e3f2fd
    style meta fill:#fff3e0
    style coding fill:#e8f5e8

設定方法とファイル配置

.cursorrules ファイルの配置方法は非常にシンプルです。プロジェクトのルートディレクトリに配置するだけで自動的に Cursor が認識します。

基本的な配置手順

bash# プロジェクトルートディレクトリに移動
cd your-project-root

# .cursorrules ファイルを作成
touch .cursorrules

ファイル配置の優先順位

markdown1. カレントディレクトリの .cursorrules
2. 親ディレクトリの .cursorrules
3. ホームディレクトリの .cursorrules

複数のファイルが存在する場合、より具体的(深い階層)なルールが優先されます。

効果的なルール記述方法

効果的な .cursorrules ファイルを作成するためには、以下の点を意識することが重要です。

明確で具体的な指示

arduino❌ 悪い例: "良いコードを書いてください"
✅ 良い例: "関数は最大20行以内に収め、単一責任の原則に従ってください"

実例を含めた説明

vbnet# エラーハンドリング規約
try-catch ブロックを使用する際は、以下のパターンに従ってください:

```typescript
try {
  const result = await apiCall();
  return result;
} catch (error) {
  logger.error('API呼び出しエラー:', error);
  throw new CustomError('処理に失敗しました', error);
}
```

具体例

TypeScript プロジェクト向けルール設定

TypeScript プロジェクトでは、型安全性とコードの品質を重視したルール設定が効果的です。

以下は実際のプロジェクトで使用されている設定例です。

typescript// .cursorrules
# TypeScript プロジェクト設定

# 基本方針
このプロジェクトは TypeScript + Next.js を使用したフルスタック Web アプリケーションです。
型安全性を最優先とし、保守性の高いコードの作成を目指します。

# 型定義ルール
- すべての関数に明示的な戻り値の型を指定する
- any 型の使用は禁止
- unknown 型を適切に活用する
- インターフェースはPascalCaseで命名する

型安全性を重視した関数定義例

typescript// 推奨される関数の型定義
interface UserData {
  id: string;
  name: string;
  email: string;
}

const fetchUser = async (
  id: string
): Promise<UserData | null> => {
  try {
    const response = await fetch(`/api/users/${id}`);
    if (!response.ok) return null;
    return (await response.json()) as UserData;
  } catch (error) {
    console.error('ユーザー取得エラー:', error);
    return null;
  }
};

エラーハンドリングパターン

typescript// 統一されたエラーハンドリング
class AppError extends Error {
  constructor(
    public message: string,
    public code: string,
    public statusCode: number = 500
  ) {
    super(message);
    this.name = 'AppError';
  }
}

React 開発向けルール設定

React プロジェクトでは、コンポーネントの設計原則とパフォーマンス最適化に関するルールが重要です。

typescript// .cursorrules に追加する React 固有設定
# React コンポーネント規約
- 関数コンポーネントを使用し、React.FC は使わない
- Props の型定義は interface で行う
- useEffect の依存配列は必ず指定する
- カスタムフックは use から始める命名にする

コンポーネント実装パターン

typescript// Props インターフェースの定義
interface ButtonProps {
  children: React.ReactNode;
  onClick: () => void;
  variant?: 'primary' | 'secondary';
  disabled?: boolean;
}

// 関数コンポーネントの実装
const Button = ({
  children,
  onClick,
  variant = 'primary',
  disabled = false,
}: ButtonProps) => {
  return (
    <button
      className={`btn btn-${variant}`}
      onClick={onClick}
      disabled={disabled}
    >
      {children}
    </button>
  );
};

export default Button;

カスタムフックの実装例

typescript// データ取得用カスタムフック
const useUserData = (userId: string) => {
  const [user, setUser] = useState<UserData | null>(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState<string | null>(null);

  useEffect(() => {
    const fetchData = async () => {
      try {
        setLoading(true);
        const userData = await fetchUser(userId);
        setUser(userData);
      } catch (err) {
        setError(
          err instanceof Error
            ? err.message
            : '不明なエラー'
        );
      } finally {
        setLoading(false);
      }
    };

    fetchData();
  }, [userId]);

  return { user, loading, error };
};

Node.js バックエンド向けルール設定

Node.js バックエンド開発では、セキュリティとパフォーマンスを重視したルール設定が必要です。

javascript// .cursorrules に追加する Node.js 設定
# Node.js バックエンド規約
- Express.js を使用し、ルーティングは Router() で分離する
- 環境変数は dotenv で管理し、型安全性を確保する
- データベースアクセスには Prisma ORM を使用する
- ログ出力には winston ライブラリを使用する

Express アプリケーションの基本構造

javascript// app.js - メインアプリケーション
const express = require('express');
const helmet = require('helmet');
const cors = require('cors');
const rateLimit = require('express-rate-limit');

const app = express();

// セキュリティミドルウェア
app.use(helmet());
app.use(
  cors({
    origin:
      process.env.ALLOWED_ORIGINS?.split(',') ||
      'http://localhost:3000',
    credentials: true,
  })
);

// レート制限
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15分
  max: 100, // 最大100リクエスト
});
app.use(limiter);

環境変数の型安全管理

typescript// config/environment.ts
interface EnvironmentConfig {
  PORT: number;
  NODE_ENV: 'development' | 'production' | 'test';
  DATABASE_URL: string;
  JWT_SECRET: string;
}

const getConfig = (): EnvironmentConfig => {
  const config = {
    PORT: Number(process.env.PORT) || 3000,
    NODE_ENV:
      (process.env.NODE_ENV as
        | 'development'
        | 'production'
        | 'test') || 'development',
    DATABASE_URL: process.env.DATABASE_URL || '',
    JWT_SECRET: process.env.JWT_SECRET || '',
  };

  // 必須環境変数の検証
  if (!config.DATABASE_URL || !config.JWT_SECRET) {
    throw new Error('必須の環境変数が設定されていません');
  }

  return config;
};

export const env = getConfig();

個人的な好みとチーム開発のバランス

.cursorrules ファイルは個人の好みを反映できる一方で、チーム開発では統一性も重要です。

以下の図は、効果的なルール設定のバランスを示しています。

mermaidflowchart LR
    personal[個人の好み] --> balance[バランス点]
    team[チーム統一性] --> balance

    balance --> effective[効果的な設定]

    personal --> styleOrg[コーディングスタイル]
    personal --> tools[好みのツール]

    team --> standards[チーム標準]
    team --> maintainability[保守性]

    effective --> productivity[生産性向上]
    effective --> quality[コード品質]

個人向け設定例

markdown# 個人開発向け .cursorrules
# 優先事項
- 開発速度重視
- 実験的なライブラリの積極活用
- 個人的なコードスタイルの適用

# スタイル設定
- セミコロンは省略
- シングルクォート使用
- 関数型プログラミングスタイル推奨

チーム開発向け設定例

markdown# チーム開発向け .cursorrules
# 品質重視設定
- ESLint/Prettier 設定に厳密に従う
- 型安全性を最優先
- コードレビュー通過率を重視

# 禁止事項
- any 型の使用禁止
- console.log の本番コード混入禁止
- 未テストコードのコミット禁止

まとめ

.cursorrules ファイルは、Cursor AI を自分のプロジェクトに最適化するための強力なツールです。初期設定に少し時間をかけることで、長期的に大幅な開発効率の向上が期待できます。

重要なポイントをまとめますと:

  1. 段階的な導入: まず基本的なルールから始めて、徐々に詳細化していく
  2. チームでの共有: .cursorrules ファイルをバージョン管理に含めてチーム全体で活用する
  3. 定期的な見直し: プロジェクトの進化に合わせてルールを更新していく

適切に設定された .cursorrules ファイルは、あなたの開発体験を大きく向上させることでしょう。ぜひ今日から活用を始めてみてください。

関連リンク