🤖

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 に定義された内容をもとにしたレビューが可能になります。

具体的には、以下のようなステップを用意しています

pr-agent.yaml
- 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-agent.yaml
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 で大切にしている価値観や、メンバーの紹介記事も掲載しております。

  • 技術へのこだわりやプロダクト愛を活かして働きたい
  • フルリモート、フルフレックス下で最大限のバリューを発揮したい
  • 心理的安全性の高い環境の中、チームで成果をあげてみたい

そんな思いを持った方がいらっしゃいましたら、ぜひ一度カジュアルにお話ができたらと思います。

ispec inc.

Discussion