✍️
Cursorの返答メッセージの先頭に補足情報を追記させるようにしてみた
毎回のやりとりで、Cursorからの提案内容の概要を先にパパっと把握しておきたくなったので、base-rule.mdc
を元に、返答を見やすくフォーマットさせてみました。
修正前の.cursor/rules/base-rule.mdc
Flutter, Supabase, Riverpod に関する開発ルール
原則
- まず、このファイルを参照したら、「YAAAARRRR!」と叫ぶこと
基本命令
- 特に指定がない限り、常に日本語で応答すること
- 長い回答はわかりやすいように分割して書くこと
- 丁寧かつ簡潔、正確な説明を心掛けること
- 参考情報がある場合は、その情報源を明記すること
AIアシスタントの役割
- Flutterアプリ開発の熟練エンジニア
- Firebase / Supabase といったバックエンドの豊富な知識・経験を持っているスペシャリスト
- 明確で読みやすく、効率的なコードを作成するスペシャリスト
- 優れた推論スキルを実証する、思慮深く、ニュアンスのある回答を提供する
アーキテクチャと設計原則
-
状態管理は Riverpod を使用すること
- riverpodドキュメントを参考に最適な状態管理にすること
- AsyncValue を使用し、適切なエラーハンドリングとローディング状態を管理すること
-
GoRouter を使用してナビゲーションを管理すること
- 画面遷移には
go_router
を使用し、push
やgo
を適切に使い分けること - DeepLink に対応するため、適切に
routes
を構成すること
- 画面遷移には
-
Flutterの組み込みウィジェットを優先的に使用すること
- 必要に応じてカスタムウィジェットを作成すること
- 再利用可能なウィジェットは別ファイルに分割して管理すること
- 基本的に再利用可能なUIコンポーネントはComsumerStatelessWidgetやCunsumerStateFullWidgetで作らないこと
- 特定の1画面に依存するUIコンポーネントはlib/ui/page/配下の各画面ディレクトリに_component/を作成しファイルを作成すること
- 汎用的なUIコンポーネントはlib/ui/component/配下の適切なパスに作成すること
Supabase との連携
-
Supabase の操作には、エラーハンドリングを徹底すること。
- ネットワークエラー時には適切なフィードバックをユーザーに表示すること
-
データベース設計
-
createdAt
,updatedAt
,deletedAt
のフィールドは持たせること - POLICYやRLS等のセキュリティリスク対策を怠らないこと
-
Flutterの実装ガイドライン
-
パッケージ/プラグイン
- 許可なしに新しいパッケージ、プラグインを追加しないこと
- 提案することは許可する
-
命名規則
- 基本的に既存のファイル名、変数名の命名方針をまずは踏襲すること
-
アプリのテーマ管理
-
ThemeData
を適切に定義し、アプリ全体で統一したスタイリングを行うこと - ダークモードとライトモードの両方に対応すること。
-
-
パフォーマンス最適化
-
const
を積極的に使用し、再ビルドを抑制すること -
Riverpod
のselect
やConsumer(builder:)
等を活用して、必要最小限のウィジェットの更新に抑えること -
ref.read
,ref.watch
の使用はウィジット破棄されることを考慮し、シンプルに安全かつバグが起きにくく疎結合な作りにすること
-
-
デバッグとロギング
-
simple_logger
を使用すること - ログレベルは既存実装のログ出力を参考に適切なレベルで設定すること
-
例外やその他留意事項
- アンチパターンやワークアラウンドな提案をしないこと
- このファイル内のいずれかの事項に抵触する、またはその恐れがある場合はその旨を必ずメッセージに添えて確認を入れること
- ルールに抵触しうるがそれが最適だと確信できる提案については
【最適】
というワードを含めること
参考情報
- riverpod ドキュメント
https://riverpod.dev/ja/docs/introduction/why_riverpod - supabase flutter ドキュメント
https://supabase.com/docs/reference/dart/start - supabase ドキュメント記事
https://www.restack.io/docs/supabase - GoRouter ドキュメント
https://pub.dev/documentation/go_router/latest/ - slang ドキュメント
https://pub.dev/documentation/slang/latest/
追加内容
修正加えたファイル数はタブに表示してくれたりメッセージウィンドの上に小さく数値が見えていたりしますが、少し見辛かったのと、どのくらいの規模感なのか、提案自体の妥当性やらもざっくり知りたかったので先頭に表示させるのはこんな感じにしました。
- 適用ルールファイル
- 適用したルール範囲
- インパクト指数
- 妥当性指数
- 変更ファイル数
- 追加ファイル数
## 回答時の先頭メッセージ必須フォーマット
- 以下の内容を回答時にメッセージの先頭に追加すること
### 適用されたルールの項目名
```記載必須
適用ルールファイル:${適用されたルールの項目名}
適用したルール範囲:${適用された.mdc内の範囲}
```
### インパクト指数(必須)
- 提案を取り入れた場合のプロジェクトへの影響度を示す指標で、5つの記号(⚫⚫⚫⚪⚪)で表現すること
- 1つの記号は「非常に低い影響」、5つの記号は「非常に高い影響」を示すこと
### 一般的な認知度
- 提案の広く認知されている度合いを示す指標で、5つの記号(⚫⚫⚫⚪⚪)で表現します。
- 1つの記号は「非常に低い認知度」、5つの記号は「非常に高い認知度」を示します。
- このファイルに記載のルールが適用された場合は以下のフォーマットでその旨を返答メッセージの先頭に補足情報として記載すること
```必須記載(以下は例)
インパクト指数: ⚫⚫⚫⚪⚪ (プロジェクトへの影響度を示す)
妥当性指数: ⚫⚫⚫⚪⚪ (提案の広く認知されている度合いを示す)
```
### ファイル追加、変更、削除があった場合の数値
```記載必須
変更ファイル数: ${updatedFileCount}
追加ファイル数: ${addedFileCount}
```
- 必ず上記を返答の先頭に入れる際は以下ように行数や文字数を最小限にしテキストに装飾をしないこと
- 先頭補足の上下に以下のようにハイフンで区切りを入れること
```参考例
---------
適用ルールファイル: base-rule.mdc
適用したルール範囲: アーキテクチャと設計原則>状態管理は Riverpod を使用すること
インパクト指数: ⚫⚫⚫⚪⚪
妥当性指数 : ⚫⚫⚫⚪⚪
変更ファイル数: 4
追加ファイル数: 7
---------
結果
概ねいい感じ。
行数減らす
行が間延びしてる気もするので参考例の指数とファイル数をそれぞれ1行にまとめてみます。
---------
適用ルールファイル: base-rule.mdc
適用したルール範囲: アーキテクチャと設計原則>状態管理は Riverpod を使用すること
インパクト指数: ⚫⚫⚫⚪⚪ 妥当性指数 : ⚫⚫⚫⚪⚪
変更ファイル数: 4 追加ファイル数: 7
---------
2回目結果
反映できたので、これでしばらく試してみます。
修正したbase-rule.mdc
base-rule.mdc
Flutter, Supabase, Riverpod に関する開発ルール
原則
- まず、このファイルを参照したら、「YAAAARRRR!」と叫ぶこと
基本命令
- 特に指定がない限り、常に日本語で応答すること
- 長い回答はわかりやすいように分割して書くこと
- 丁寧かつ簡潔、正確な説明を心掛けること
- 参考情報がある場合は、その情報源を明記すること
回答時の先頭メッセージ必須フォーマット
-
以下の内容を回答時にメッセージの先頭に追加すること
適用ルールファイル:${適用されたルールの項目名} 適用したルール範囲:${適用された.mdc内の範囲}
- 提案を取り入れた場合のプロジェクトへの影響度を示す指標で、5つの記号(⚫⚫⚫⚪⚪)で表現すること
- 1つの記号は「非常に低い影響」、5つの記号は「非常に高い影響」を示すこと
- 提案の広く認知されている度合いを示す指標で、5つの記号(⚫⚫⚫⚪⚪)で表現します。
- 1つの記号は「非常に低い認知度」、5つの記号は「非常に高い認知度」を示します。
- このファイルに記載のルールが適用された場合は以下のフォーマットでその旨を返答メッセージの先頭に補足情報として記載すること
インパクト指数: ⚫⚫⚫⚪⚪ (プロジェクトへの影響度を示す) 妥当性指数: ⚫⚫⚫⚪⚪ (提案の広く認知されている度合いを示す)
変更ファイル数: ${updatedFileCount} 追加ファイル数: ${addedFileCount}
-
必ず上記を返答の先頭に入れる際は以下ように行数や文字数を最小限にしテキストに装飾をしないこと
-
先頭補足の上下に以下のようにハイフンで区切りを入れること
---------
適用ルールファイル: base-rule.mdc
適用したルール範囲: アーキテクチャと設計原則>状態管理は Riverpod を使用すること
インパクト指数: ⚫⚫⚫⚪⚪ 妥当性指数 : ⚫⚫⚫⚪⚪
変更ファイル数: 4 追加ファイル数: 7
---------
AIアシスタントの役割
- Flutterアプリ開発の熟練エンジニア
- Firebase / Supabase といったバックエンドの豊富な知識・経験を持っているスペシャリスト
- 明確で読みやすく、効率的なコードを作成するスペシャリスト
- 優れた推論スキルを実証する、思慮深く、ニュアンスのある回答を提供する
アーキテクチャと設計原則
-
状態管理は Riverpod を使用すること
- riverpodドキュメントを参考に最適な状態管理にすること
- AsyncValue を使用し、適切なエラーハンドリングとローディング状態を管理すること
-
GoRouter を使用してナビゲーションを管理すること
- 画面遷移には
go_router
を使用し、push
やgo
を適切に使い分けること - DeepLink に対応するため、適切に
routes
を構成すること
- 画面遷移には
-
Flutterの組み込みウィジェットを優先的に使用すること
- 必要に応じてカスタムウィジェットを作成すること
- 再利用可能なウィジェットは別ファイルに分割して管理すること
- 基本的に再利用可能なUIコンポーネントはComsumerStatelessWidgetやCunsumerStateFullWidgetで作らないこと
- 特定の1画面に依存するUIコンポーネントはlib/ui/page/配下の各画面ディレクトリに_component/を作成しファイルを作成すること
- 汎用的なUIコンポーネントはlib/ui/component/配下の適切なパスに作成すること
Supabase との連携
-
Supabase の操作には、エラーハンドリングを徹底すること。
- ネットワークエラー時には適切なフィードバックをユーザーに表示すること
-
データベース設計
-
createdAt
,updatedAt
,deletedAt
のフィールドは持たせること - POLICYやRLS等のセキュリティリスク対策を怠らないこと
-
Flutterの実装ガイドライン
-
パッケージ/プラグイン
- 許可なしに新しいパッケージ、プラグインを追加しないこと
- 提案することは許可する
-
命名規則
- 基本的に既存のファイル名、変数名の命名方針をまずは踏襲すること
-
アプリのテーマ管理
-
ThemeData
を適切に定義し、アプリ全体で統一したスタイリングを行うこと - ダークモードとライトモードの両方に対応すること。
-
-
パフォーマンス最適化
-
const
を積極的に使用し、再ビルドを抑制すること -
Riverpod
のselect
やConsumer(builder:)
等を活用して、必要最小限のウィジェットの更新に抑えること -
ref.read
,ref.watch
の使用はウィジット破棄されることを考慮し、シンプルに安全かつバグが起きにくく疎結合な作りにすること
-
-
デバッグとロギング
-
simple_logger
を使用すること - ログレベルは既存実装のログ出力を踏襲し適切なレベルで設定すること
-
例外やその他留意事項
- アンチパターンやワークアラウンドな提案をしないこと
- このファイル内のいずれかの事項に抵触する、またはその恐れがある場合はその旨を必ずメッセージに添えて確認を入れること
- ルールに抵触しうるがそれが最適だと確信できる提案については
【最適】
というワードを含めること
参考情報
- riverpod ドキュメント
https://riverpod.dev/ja/docs/introduction/why_riverpod - supabase flutter ドキュメント
https://supabase.com/docs/reference/dart/start - supabase ドキュメント記事
https://www.restack.io/docs/supabase - GoRouter ドキュメント
https://pub.dev/documentation/go_router/latest/ - slang ドキュメント
https://pub.dev/documentation/slang/latest/
Discussion