CodeRabbitはAIコードレビューサービスです。GitHubやGitLabなどと連携し、PRを自動的にコードレビューします。VS Code機能拡張やCLIも提供しており、こちらは無料で利用できます。パブリックなリポジトリであれば、CodeRabbitを無料で利用できます。
最近のアップデートして、Custom Finishing Touchesに力を入れています。Finishing Touchesというのは仕上げといった意味があるので、カスタマイズできる仕上げ処理といった感じでしょうか。
まずはどういった機能があるのかを紹介します。
Custom Finishing Touchesとは
PRへのレビューに対して「それくらいだったらAIでやってよ」と思うケースはあるかと思います。定型的な指摘だったり、修正であればAIでも十分な品質でできそうです。それをできるようにするのがCustom Finishing Touchesです。
特徴としては、行ってほしい処理を自然言語で書ける点です。マクロ的に使えますが、画一的な作業しかできない訳ではないですし、プログラミングを組む必要もありません。自然言語を理解して、柔軟な対応を行います。
Custom Finishing Touchesの種類
執筆事前でのCustom Finishing Touchesは、以下のようになっています。
Autofix(自動修正)
レビューのフィードバックを自動で適用します。PRのウォークスルー(概要)にあるチェックボックスをクリックするか、以下のチャットコメントで実行されます。
# 新しいPRを作成する場合
@coderabbitai autofix stacked pr
# 現在のPRにコミット追加する
@coderabbitai autofix
Resolve Merge Conflicts(マージのコンフリクト解消)
PRでコンフリクトが生じた場合に実行してほしい処理です。こちらもウォークスルーにあるチェックボックスをクリックするか、以下のチャットコメントで実行できます。
@coderabbitai resolve merge conflict
Resolve Merge Conflicts(マージのコンフリクト解消)の詳細
Generate unit tests(ユニットテストの生成)
PR内にあるクラスや関数に対して、不足しているユニットテストを生成します。こちらもウォークスルーにあるチェックボックスをクリックするか、以下のチャットコメントで実行できます。
@coderabbitai generate unit tests
.coderabbit.yaml の code_generation.unit_tests (または管理画面)で、テストフレームワークやテストの観点を指定できます。以下はその一例です。
code_generation:
unit_tests:
path_instructions:
- path: "**/*.ts"
instructions: |
テストフレームワークとしてvitestを使用します。
エッジケースやエラー条件を含む、包括的なテストケースを生成します。
テストの期待値に対して、適切なTypeScriptの型を明示します。
- path: "**/api/**"
instructions: |
リクエスト/レスポンスの検証とエラー処理に重点を置く。
MSWを使用して外部API呼び出しをモック化する。
認証ミドルウェアとレート制限をテストする。
- path: "**/components/**"
instructions: |
コンポーネントのテストにはReact Testing Libraryを使用します。
ユーザーの操作、アクセシビリティ、およびエラー境界をテストします。
複雑なプロパティをモック化し、状態の変化を検証します。
Generate unit tests(ユニットテストの生成)の詳細
Custom recipes(カスタムレシピ)
カスタムレシピは、よくあるコード修正内容を自然言語で定義するものです。ファイルのインポート順番や不要なインポートファイルの削除、プロジェクト固有の規則の徹底などを指定できます。コードとしては動くのだけれど、チームのやり方にあっていない…そんな状態で放置されてしまうPRに対して利用すると便利です。
カスタムレシピは指定した名前がPRのウォークスルー上に並びます。あとはそれをチェックすれば適用され、追加コミットまたは新しいPRが作成されます。
以下はその設定例です。
reviews:
finishing_touches:
custom:
- name: "cleanup stale imports"
instructions: |
変更されたファイルから未使用のインポートをスキャンして削除します。
型の位置で使用されているインポートは保持します。
既存のインポート順序は変更せず、不要なインポートのみ削除します。
- name: "tighten types"
instructions: |
変更されたファイル内の `any` 型を、周囲のコンテキストで正しい最も具体的な
TypeScript型に置き換えます。
戻り値の型が指定されていないエクスポート関数に明示的な戻り値の型を追加します。
- name: "enforce error handling"
instructions: |
変更されたファイル内のすべてのAsync関数を監査します。
awaitされたすべての呼び出しがtry/catchでラップされているか、.catch()ハンドラーを持っていることを確認します。
エラーをキャッチする際は、プロジェクトの既存のエラーロガーパターンを使用します。
Simplify code(コードのシンプル化)
PR内のコードについて、再利用できるロジックや条件分岐の簡素化、冗長なコードの削除などを実行します。AI生成のコードは割と力技のことが多く、かといってどこを修正すればいいかうまく絞り込めない場合が多いです。そうした時に、とりあえずこのSimplify codeを実行すると、コード全体の見通しが良くなります。
こちらもウォークスルーにあるチェックボックスをクリックするか、以下のチャットコメントで実行できます。
@coderabbitai simplify
Generate docstrings(ドキュメント文字列の生成)
ドキュメントが不足している関数に対してドキュメント文字列を生成します。JSDoc、Googleスタイル、Sphinxなど既存のコードベースに合わせたドキュメントを生成します。
こちらもウォークスルーにあるチェックボックスをクリックするか、以下のチャットコメントで実行できます。デフォルトのままでも自動認識しますが、設定でカスタマイズも可能です。
code_generation:
docstrings:
path_instructions:
- path: "src/**/*.ts"
instructions: |
TsDoc形式を使用し、@param、@returns、@exampleタグを含めます。
パブリックAPI関数にはコード例を含めます。
動作とエッジケースに焦点を当てます。
- path: "**/*test*"
instructions: |
テストの目的と期待される動作について説明します。
ドキュメント文字列は簡潔に保ち、何がテストされているかに焦点を当てます。
- path: "scripts/**/*.py"
instructions: |
Googleスタイルのドキュメント文字列をArgsセクションとReturnsセクションで使用します。
ユーティリティスクリプトの使用例を含めます。
- path: "models/**/*.py"
instructions: |
データベースモデルをフィールドの説明と関係性でドキュメント化します。
クエリの例と一般的な使用パターンを含めます。
まとめ
Custom Finishing Touchesでは、実行時にClaude Agent SDKを利用しています。そのため、精度高くコードの修正が可能です。ぜひご利用ください。
こうしたちょっとした修正がチームを疲弊させます。クリック一つで終わりますので、ぜひ積極的に取り入れてください。