0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コードレビューツールを比較してみる

CodeRabbit と cubic は、いずれも AI によるコードレビューを提供していますが、その得意とする領域やレビューの切り口には違いがあります。プルリクエストのログに基づき、比較してみました。
使用したコードは、テスト的に作った、Rust 実装の PAY.JP用のクライアントツール(お蔵入り)です

1. レビューの焦点とアプローチの比較

比較項目 CodeRabbit cubic
主な視点 マクロ(全体構造・設計・流れ) ミクロ(Rustの慣習・仕様の厳密性)
得意分野 処理フローの可視化、設計のリファクタリング Rustのイディオム、数値制約、アルゴリズム
可視化ツール Mermaid によるシーケンス図の自動生成 特になし(テキストベースの精密な指摘)
指摘の性質 「重複を排除して共通化しよう」という設計論 「この数値範囲は 1-31 であるべき」という仕様論
ドキュメント 変更箇所の要約とカテゴリ分け ドキュメントと実装の整合性、サンプルコードの正確性

シーケンス図

CodeRabbitのこの機能は、素直に良いなと思いました。
下図のようなシーケンス図を作成してくれます。

image.png

2. CodeRabbit の独自性と強み

CodeRabbit は、「コードが何をしているか」を抽象化して理解し、開発者に伝える能力に長けています。

システムの振る舞いの可視化

  • SDK の内部処理(PayjpClient、request、PAY.JP API 間のやり取り)を Mermaid 形式のシーケンス図で図解。これにより、複雑な非同期処理の流れが一目で把握できるようになる

設計の保守性(DRY 原則)へのこだわり

  • src/client.rs において、GET、POST、DELETE などの各メソッドで共通するエラーハンドリングやリクエスト送信処理を、ヘルパーメソッドとして抽出することを提案

エンドポイントの配線確認

  • ChargeService の各メソッドが、PAY.JP API のドキュメント通りに正しい HTTP メソッドと URL パスに紐付けられているかをマッピングして確認

レートリミット

CodeRabbit ですが、トライアルでやっていたこともあり、初回に大量のコードを処理したら、レートリミットが来てしまいました。とはいえ、1分44秒待てというくらいのものでしたが・・・

image.png

抜き忘れていた cubic が入っていたのが、検出され注意されてますね。

3. cubic の独自性と強み

cubic は、「Rust として正しく、API 仕様として堅牢か」を緻密に検証します。

Rust のイディオムと安全性の徹底

  • ビルダーパターンの実装が Rust らしく(idiomatic)行われているかを評価。また、パニックを避け、適切に Result を返す設計になっているかを厳しくチェック

パラメータの境界値とバリデーション

  • trial_days (0-36500) や billing_day (1-31) といった具体的な数値範囲に言及し、コード内でのバリデーションやドキュメントへの明記を求めている

アルゴリズムの数学的正しさ

  • リトライ処理における「指数バックオフ(Exponential Backoff)」の実装を分析し、オーバーフローを防ぐための saturating_pow の使用や、ジッター(ゆらぎ)の加え方が適切かを数学的視点で検証

4. 両者の補完関係

この PR において、2つの AI は以下のように補完し合っているように見えます。

  1. 設計 vs 実装: CodeRabbit が「共通処理をまとめよう」と構造を指摘し、cubic が「この変数は i64 が適切」とデータ型や値を指摘
  2. 概要 vs 詳細: CodeRabbit が全体の変更をテーブル形式でサマリーし、cubic がサンプルコードと本体の実装が1行ずつ一致しているかを突き合わせている
  3. 連携 vs ロジック: CodeRabbit が外部 API との疎通経路を、cubic が内部のリトライ・ロジックの堅牢性を担保

まとめ

  • CodeRabbit は、「アーキテクト」に近い役割。全体の設計を整え、図解によってチームの理解を助ける
  • cubic は、「熟練の Rust エンジニア」に近い役割。言語特有の作法や数値の制約、細かな不整合を見逃さず、コードの堅牢性を高める

ですので、両者を併用することで、お互いを補完しあうようなレビューができるとは思いますが、同じポイントを修正しようとすることも多々あるので、よくわからない状態で複数使用するよりは、1つのレビューツールに絞った方が良いように思いました。

おまけ

後日談で、Github Copilot でのレビューを入れてみたのですが、CodeRabbit の方がレビュー速度は速いような気がしました。Github Copilot はレビューにそこそこ時間がかかります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?