cursor Rulesではじめる効果的なAIコードレビュー
はじめに
こんにちは!株式会社 ispec で EM をしている shinya です。
ispecでは、PRAgent を使った AI コードレビューを導入しています。Pull Request に対して自動でコメントがつく仕組みで、レビュワー・レビュイー双方の作業の効率化を期待していました。
しかし、正直なところPRAgentのレビューが参考になったと感じる場面はほとんどありませんでした。
コメントはつくものの、その内容は非常に一般的な指摘が多く、チームとして定めているルールや、コード全体の設計方針を踏まえたコメントにはなっていませんでした。
さらに、意図して書いた実装に対してもコメントがつくことがあり、それらはむしろノイズとして受け取られるようになり、次第に誰も AI のレビューを見なくなっていきました...
この状況を改善するために導入したのが cursorRules です。
AI に明確なレビュー観点を与えることで、コードの意図を汲み取りつつ、本質的な指摘をしてくれるようにしたいと考えました。
cursorRules とは
cursorRules は、AIエディタのcursor内でAIが考慮するためのヒントを表すルール定義です。
特定のコードベースに対して、「このプロジェクトではこう実装するべき」といった開発ルールを記述し、それをエディタ内の AI に共有するために用いられます。
たとえば、「ドメインロジックはドメイン層に集約するべき」「エラーメッセージはその場で書かずに error ファイルから参照する」といった、チームやプロダクトごとの方針をルールとして記述できます。
開発者がコードを書いていると、Cursor の AI はその cursorRules を参照しながらコード提案やレビューを行います。
つまり、実装時の判断を プロジェクト固有の文脈に沿わせるための補助線として cursorRules が使われています。
この cursorRules を、今回は 実装時だけでなく、AI によるコードレビュー時にも活用してみようと考えました。
PRAgent に cursorRules を組み込む
次の GitHub Actions のワークフローでは、まず初めに、該当ブランチにおける .cursor/rules ディレクトリ内のルール定義を読み取り、環境変数として格納しています。
その後、PRAgent の各機能(PR 説明生成・レビュー・改善提案・チェンジログ更新)に対して、これらのルールを適用しています。
このように設定することで、.cursor/rules に定義された内容をもとにしたレビューが可能になります。
具体的には、以下のようなステップを用意しています
- name: Read cursor rules
id: read-cursor-rules
run: |
RULES=""
for file in .cursor/rules/*.mdc; do
if [ -f "$file" ]; then
content=$(cat "$file" | tr '\n' ' ' | sed 's/"/\\"/g' | sed "s/'/\\'/g" | sed 's/#/\\#/g')
RULES="$RULES$content "
fi
done
echo "rules=$RULES" >> $GITHUB_ENV
そして env.rules として展開されたルールは、次のように PRAgent の各種プロンプト内で参照されます:
pr_reviewer.extra_instructions: |
...
### コードルール
${{ env.rules }}
pr_code_suggestions.extra_instructions: |
...
### コードルール
${{ env.rules }}
pr_update_changelog.extra_instructions: |
...
### コードルール
${{ env.rules }}
この構成により、AI は実装時と同じ観点に基づいたレビューや改善提案を行えるようになります。
観点が明文化されていることで、レビューの一貫性と納得感が 大きく向上することを期待しています。
今後の展望
今回の取り組みを通じて、実装時に利用している cursorRules をレビューの観点として明文化し、それを AI に共有することで、レビューの精度や納得感を高められる可能性が見えてきました。
ただ、現状だとルールが増えれば増えるほどPRAgentへのpromptも膨大になってしまうので、本当はPRの内容にあったルールのみを適用するべきだと考えています。
cursorRules には、特定のファイルパスやディレクトリに対してルールを限定する仕組みがあるので、その情報とPRの差分ファイルをもとに、該当範囲のルールだけを抽出して PRAgent に渡す構成にしていきたいと考えています。
これにより、PRに関係のある範囲のルールだけをプロンプトに含めることができるようになり、PRに必要のないルールが混ざらない分、余計なノイズが減るのでpromptの質は向上し、最終的には PRAgentのレビューも最適化されると考えられます。
おわりに:採用情報
ispec では更なる事業拡大を見据え、エンジニア職にて新しいメンバーを募集しています。
採用サイトでは各求人の詳細だけでなく、ispec で大切にしている価値観や、メンバーの紹介記事も掲載しております。
- 技術へのこだわりやプロダクト愛を活かして働きたい
- フルリモート、フルフレックス下で最大限のバリューを発揮したい
- 心理的安全性の高い環境の中、チームで成果をあげてみたい
そんな思いを持った方がいらっしゃいましたら、ぜひ一度カジュアルにお話ができたらと思います。
Discussion