WindsurfでAIコーディングルールを設定する

Cursor使おうとしたらサーバー重いので freeプランだからと追い出された。せっかくなのでWindsurf使ってみることにした。

![overload.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4011379/f12b72e1-8a3c-41a2-8aa2-8abad714afdd.png)

追記: 記事作成中にRoo Codeの方が自分の作業スタイルにはより合っていると感じて乗り換えました。ただ、Windsurfも今後のアップデート次第では再び使いたくなる可能性もあるため、この記事の内容も記録として残すことにしました。

## Windsurf にコーディングルールを設定する

![cascade.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4011379/4665fd56-61a8-4a6c-a7f2-84dbc141dda0.png)

1. `Ctrl` + `L` で展開されるCascadeパネルの右上の本のマークをクリック
1. パネルが「Memories and Rules」に遷移するので、ここで「Add workspace rules」をクリックするとプロジェクトルートに `.windsurfrules` が生成される

### 公式にあったベストプラクティス

- ルールはシンプル、簡潔、具体的に保ちます。 長すぎたり曖昧なルールはCascadeを混乱させる可能性があります。
- 一般的なルール（例：「良いコードを書く」）を追加する必要はありません。 これらはすでにCascadeのトレーニングデータに組み込まれています。
- ルールは箇条書き、番号付きリスト、マークダウンを使用してフォーマットします。 これらは長い段落よりもCascadeが従いやすいです

```markdown
# コーディングガイドライン
- 私のプロジェクトのプログラミング言語はpythonです
- 可能な場合は早期リターンを使用します
- 新しい関数やクラスを作成する際は常にドキュメントを追加します
```

XMLタグで類似のルールをグループ化する：

```xml
<coding_guidelines>
- 私のプロジェクトのプログラミング言語はpythonです
- 可能な場合は早期リターンを使用します
- 新しい関数やクラスを作成する際は常にドキュメントを追加します
</coding_guidelines>
```

## windsurfrules

```
MIT License

Copyright (c) 2025 Yuichiro Kinoshita

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```

kinopee/cursorrules を参考にさせた`.windsurfrules`：

```markdown
# Windsurf ルール (.windsurfrules)
# このルールファイルは、AIアシスタントのタスク実行プロセスを定義します。
# 参照時、可能であればこのファイル名 (".windsurfrules") に言及してください。

<task_execution_protocol>
    # --- 全体原則 ---
    <general_principles>
        - ユーザー指示 (<指示>{{instructions}}</指示>) を正確に理解し、効率的にタスクを遂行する。
        - 高度な問題解決能力を活用する。
        - 不明点は必ず確認し、指示外の変更は行わない。
    </general_principles>

    # --- 1. 分析と計画 ---
    <analysis_and_planning>
        - 指示内容を分析: 主要タスク、要件、制約を特定。
        - **ルール確認:** 指定されたルール (`./cursor/rules/dev-rules/*.mdc`) の内容を確認し、厳守する。
        - 潜在的課題を考慮し、詳細な実行ステップと順序を計画する。
        - **重複チェック:** 既存機能、同名要素、共通化可能な処理がないか確認する。
    </analysis_and_planning>

    # --- 2. タスク実行 ---
    <execution>
        - 計画に基づき、ステップを順次実行する。
        - ディレクトリ構造、命名規則、共通処理の配置基準を遵守する。
    </execution>

    # --- 3. 品質管理と問題対応 ---
    <quality_assurance>
        - 各ステップの結果を検証する (期待値 vs 実際の結果)。
        - 問題発生時: 原因特定 (ログ/デバッグ情報) → 対策立案・実施 → 再検証。
        - 検証結果 (項目, 期待値, 結果, 差異, 対応策) を記録する (内部確認用)。
    </quality_assurance>

    # --- 4. 最終確認 ---
    <final_check>
        - 全タスク完了後、成果物全体を評価し、指示との整合性を確認する。
        - 機能重複がないことを最終確認する。
    </final_check>

    # --- 5. 結果報告 ---
    <reporting>
        - 以下の形式で最終結果を報告する:
            ```markdown
            # 実行結果報告
            ## 概要
            [タスク概要と結果の要約]
            ## 実行ステップ
            1. [ステップ1: 概要と結果]
            ...
            ## 最終成果物
            [成果物の説明、アクセス方法、リンク等]
            ## 課題対応 (該当する場合)
            - [発生した問題と具体的な対応内容]
            - [再発防止策や今後の注意点]
            ## 注意点・改善提案 (任意)
            - [気づいた点、改善できる点など]
            ```
    </reporting>

    # --- 6. 重要制約事項 ---
    <strict_constraints>
        - **ルール厳守:** `./cursor/rules/dev-rules/*.mdc` を最優先で遵守する。
        - **指示外変更禁止:**
            - 明示的な指示または事前の承認なしに、要求範囲外の変更・追加実装は行わない。
            - UI/UXデザイン（レイアウト、色、フォント等）の変更は、理由を提示し承認を得ない限り禁止。
            - 技術スタック（API、ライブラリバージョン等）の変更は、理由を提示し承認を得ない限り禁止。
        - **確認・報告義務:**
            - 不明点、判断に迷う点は作業前に必ず確認する。
            - 重要な判断が必要な場合、予期せぬ問題発生時は、即座に報告し指示を仰ぐ。
    </strict_constraints>
</task_execution_protocol>
```

> **Note:**
> 1. `global_rules.md` と `.windsurfrules` はそれぞれ6000文字に制限されており、それ以上は切り捨てられCascadeが認識しません。
> 1. `global_rules.md` と `.windsurfrules` の合計が12,000文字を超過する場合、グローバルルールが優先され、次にワークスペースルールが続く。12,000文字を超えるルールは切り捨てられます。


## 参考リンク

- [kinopeee/cursorrules - GitHub](https://github.com/kinopeee/cursorrules)
- [Cursorの潜在能力を2倍に引き出す方法【AI駆動開発 / Cursorの使い方】 - Youtube](https://www.youtube.com/watch?v=DU28RWBNfjc)
- [Windsurf エディタ - 完全攻略ガイド - note](https://note.com/komzweb/n/n978354a2d75e)
- [Cascade Memories & Rules - Windsurf](https://docs.windsurf.com/windsurf/memories#best-practices)