👏

Cursor rulesチュートリアル:whatだけで伝えるためのルール設計入門

に公開

Cursor rulesチュートリアル:whatだけで伝えるためのルール設計入門

cursorのプロンプトを打つ際に毎回同じような前提を伝えていませんか?
cursor のrulesやclaude codeのCLAUDE.mdにルールを記載していくことで、
より何を達成したいかのwhat だけの依頼でAIがより良いコードを生成できるようになります。

(より以下の記事が分かりやすいかなと思います)
https://zenn.dev/loglass/articles/10cb41eff3139d

この記事では、cursorのプロンプトのtutorialから、rulesを作ってみてどのように成果物が変化するかを試すことができるtutorialになります。
(cursorでrulesを作成しますが、CLAUDE.mdでも本質は同じだと思っています。)

リポジトリ

手元で検証したい方は、以下をcloneして、同じようにプロンプトを打ったり、rulesを作成してみてください。
https://github.com/yuucu/cursor_go_tutorial

実験設定

初期実装として、echoのtutorial程度のmain.goのみ配置しています。
同じAPI実装を4つのアプローチで行い、それぞれの効果を比較検証します。

要件: 「helloを送ったらそのままユーザのテキストのhelloと返すAPI」

各ブランチの特徴:

  • test/01_default: デフォルト設定のみ
  • test/02_default_prompt: プロンプトのみで改善
  • test/03_rules: ルール設定を追加
  • test/04_rules_ex: ルール + 拡張プロンプト

段階1: デフォルト設定での開発

プロンプト

helloを送ったらそのままユーザのテキストのhelloと返すapiを実装してください

結果

  • ファイル数: 4個(基本構成)
  • 実装方法: 全てmain.goに記述
  • コード品質: 基本的な実装

https://github.com/yuucu/cursor_go_tutorial/pull/1/files

特徴

  • ✅ 動作する基本的なAPI
  • ❌ 全てが1ファイルに集約
  • ❌ 構造的な整理が不十分
  • ❌ 拡張性が低い

みてわかる通り、main.goに全てが実装されており、今後保守が難しくなるかなと思います。
一度差分を全て削除し、
handlers.goは分離したいので、次にそれをプロンプトに入れてみましょう。

段階2: プロンプト改善での開発

プロンプト

helloを送ったらそのままユーザのテキストのhelloと返すapiを実装してください
新しいhandlerはhandlers.goに実装してください

https://github.com/yuucu/cursor_go_tutorial/pull/2/files

結果

  • ファイル数: 5個(handlers.go追加)
  • 実装方法: 関心の分離を意識
  • コード品質: 構造化の改善

特徴

  • ✅ ファイル分離の実現
  • ✅ 関心の分離
  • ❌ プロンプトに「how」を含める必要がある
  • ❌ 毎回同じ実装指示を繰り返す必要

handlers.goに分離され、少しすっきりしました。
しかし、これでは毎回プロンプトに分離する方針を伝えなければならず、
手間になってしまいます。
この毎回伝えているな、のようなものをrulesに追加してみましょう。

段階3: ルール設定での開発

プロンプト

helloを送ったらそのままユーザのテキストのhelloと返すapiを実装してください

rules 設定内容

<!-- .cursor/rules/general.mdc -->
新しくhandlerを追加する際はhandler.goに実装してください

https://github.com/yuucu/cursor_go_tutorial/pull/3/files

結果

  • ファイル数: 6個(.cursorディレクトリ追加)
  • 実装方法: ルールに従った構造化
  • コード品質: 構造化の改善

特徴

  • ✅ ファイル分離の実現
  • ✅ 関心の分離
  • ✅ プロンプトは「what」のみでOK

段階4: ルール + 拡張プロンプトでの開発

プロンプト

helloを送ったらそのままユーザのテキストのhelloと返すapiを実装してください

設定内容

## API 作成ルール
- まずはopenapi.yamlを作成し、API定義を作成してください
- https://github.com/ogen-go/ogen を用いて、 `handlers` フォルダにtagごとにhandlerを自動生成して下さい
- 自動生成されたhandlerの中の実装をして下さい

https://github.com/yuucu/cursor_go_tutorial/pull/4/files

結果

  • ファイル数: 24個(大幅な拡張)
  • 実装方法: OpenAPI仕様書駆動開発
  • コード品質: 拡張しやすい品質になった

特徴

  • ✅ ファイル分離の実現
  • ✅ 関心の分離
  • ✅ プロンプトは「what」のみでOK
  • ✅ OpenAPI仕様駆動開発の自動実現

まとめ

プロンプトの進化:「How」から「What」へ

段階 プロンプト内容 What How 結果
段階1 基本的な要件のみ 動作するが構造が悪い
段階2 要件 + 実装指示 毎回howを指定する必要
段階3 要件のみ(ルール設定済み) ルールが自動適用
段階4 要件のみ(拡張ルール設定済み) より高度な自動化

核心的な価値:プロンプトの純粋化

理想的なプロンプト

helloを送ったらそのままユーザのテキストのhelloと返すapiを実装してください

この単純なプロンプトで、段階4では24個のファイルが自動生成され、OpenAPI仕様書駆動開発が実現されました。
このルールでも、生成のたびにかなりブレが出るため、チューニングする箇所はかなりあるかなと思います。

よりプロダクトで扱えるルールになるよう、期待する結果がでるルールに整えていけると良いのかなと思います。

開発者体験の変化

  • Before: 「何を作るか」+「どう作るか」を毎回説明
  • After: 「何を作るか」だけ伝えれば理想的な実装が生成

これでCursorやclaude codeが毎回指示が大変な補助ツールではなく、より自走してくれる開発パートナーへ進化したと言えるかなと思います。

参考

https://zenn.dev/loglass/articles/10cb41eff3139d

Discussion