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導入の次にやるべきこと — autoFixableパターンで機械的修正を自動化する

0
Last updated at Posted at 2026-05-29

CodeRabbit autoFixableパターン GitHub Actions auto-fix workflow

CodeRabbitを導入すると、PRに自動でレビューコメントが付くようになります。「未使用のimportがあります」「ここはconst推奨です」「nullable型に明示が必要です」。便利なのは間違いないのですが、3か月使った私のチームの感想は意外なものでした。

「コメントを読む時間が増えた」

レビュアーは内容を確認する、レビュイーは修正する、CodeRabbitに「了解」と返す。この往復が前より増えた。理由は単純で、機械的に直せる指摘までAIがコメントしてくるからです。

ここで効くのが、harness-code-review Book ch12で書いた「autoFixableパターン」という考え方です。CodeRabbitの指摘のうち「機械が直せるもの」は、レビュアーを通さずGitHub Actionsで先に直す。残ったものだけを人間がレビューする。導入から3週間で、私のチームのPRレビュー時間は4割減りました。

autoFixable と non-autoFixable の境界線

最初にやるべき分類です。CodeRabbit / Claude Code Review / Cursor BugBot が出してくる指摘は、ざっくり次の2つに分かれます。

種類 ツール
autoFixable (機械的に直せる) Prettier / Biome / ESLint --fix / Ruff --fix フォーマット / import順 / 末尾セミコロン
non-autoFixable (人間の判断が必要) 人間レビュアー 設計の方針 / 命名 / N+1問題 / ロジックバグ

autoFixableは「正解が一意に決まる」のが特徴です。フォーマットは設定ファイル通りに直せばよく、importは順序ルールが決まっていれば自動整列できます。一方、命名や設計は文脈依存で、機械が「正しい答え」を1つに絞れません。

私のチームの感覚だと、CodeRabbitの指摘の6〜7割がautoFixableでした。これを自動化すれば、人間が見るのは残り3割だけ。レビューの密度が一気に上がります。

GitHub Actions で auto-fix を組む

最小構成のworkflowはこれです。

# .github/workflows/auto-fix.yml
name: Auto Fix
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  autofix:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.head_ref }}
          token: ${{ secrets.GITHUB_TOKEN }}

      - uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: 'npm'

      - run: npm ci

      - name: Auto format
        run: npx prettier --write .

      - name: Auto lint fix
        run: npx eslint . --fix

      - name: Commit if changed
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git diff --quiet || (
            git add -A &&
            git commit -m "chore: auto-fix format and lint issues" &&
            git push
          )

PRがopenまたはsynchronizeされるたびに、PrettierとESLintを走らせて、差分があれば自動でcommit & pushします。PRの所有者は何もしないまま、フォーマットの揺れが消えます。

ポイントは permissions: contents: write です。secrets.GITHUB_TOKEN でcommitし返すために必要な権限で、これを書き忘れるとworkflowが silently に commit失敗します。

secrets.GITHUB_TOKEN でpushしたcommitはGitHub Actionsの再トリガーをしない仕様です。auto-fix commit後に追加のworkflow(テスト等)を走らせたい場合は、personal access token (PAT)GitHub App token で push する必要があります。これを知らないと「auto-fix後にCIが回らない」現象に困惑します。

Biome — ESLint + Prettierの一本化

ESLintとPrettierを別々に走らせると、設定の競合と起動オーバーヘッドが地味に効きます。私のチームでは2025年からBiomeに統合しています。

{
  "$schema": "https://biomejs.dev/schemas/1.9.0/schema.json",
  "formatter": {
    "enabled": true,
    "indentStyle": "space",
    "indentWidth": 2
  },
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true,
      "suspicious": {
        "noExplicitAny": "error"
      }
    }
  },
  "organizeImports": { "enabled": true }
}

CIでの auto-fix は biome check --apply . 1行で済みます。

- name: Biome auto-fix
  run: npx @biomejs/biome check --apply .

私のチームの計測では、Prettier + ESLintの組み合わせで12秒かかっていたCI時間が、Biomeで2.8秒になりました。auto-fixのコスト負担が小さいので、毎PR走らせても気になりません。

Python / Go / Rust のautoFixable

Node.jsだけでなく、他言語にも同じパターンが効きます。

- name: Python auto-fix (Ruff)
  run: ruff check --fix . && ruff format .

- name: Go auto-fix
  run: gofmt -w . && go mod tidy

- name: Rust auto-fix
  run: cargo fmt && cargo clippy --fix --allow-dirty

Ruffは2026年5月時点でPython lint/format界のデフォルトに近づいてきました(Pandas、FastAPI、Polars等の主要プロジェクトが採用)。Black + isort + Flake8の組み合わせから移行すると、CI時間が体感で5〜10倍速くなります。

CodeRabbitのautoFix機能を併用する

CodeRabbit自体も、AI生成のautoFix提案をPRコメントに埋め込む機能があります(2026年5月時点、Pro Plan・公開ベータ)。

CodeRabbitのレビューコメントの中に「Apply suggestion」ボタンが現れ、ワンクリックで提案がcommitされます。ESLintやRuffで直しきれないロジック寄りのlint指摘(例: 未処理のPromise、nullableのチェック漏れ)もAIが書き換え案を提示してくれます。

私のチームは「機械的なautoFixはGitHub Actionsで全自動、AI生成のautoFix候補はCodeRabbitで人間が承認制」という二段構えにしています。

PR open
  ↓
GitHub Actions auto-fix (Prettier/ESLint/Ruff) → 自動commit
  ↓
CodeRabbitレビュー → ロジック指摘+autoFix候補ボタン
  ↓
レビュイーが「Apply」を選択(人間の判断)
  ↓
人間レビュアーが最終確認

自動の領域とAI支援の領域を分けると、責任の所在が明確になります。フォーマット崩れはbot責任、ロジックの修正は最終的に人間責任。これがチームでうまく回るコツでした。

効果測定 — 数字で見る変化

auto-fix workflowを導入する前と後で、私のチームの数字がどう変わったかを残しておきます。30人ほどのフロントエンド/バックエンド混成チームで、3ヶ月間の変化です。

指標 導入前 導入後 変化
PR平均レビュー時間 47分 28分 -40%
PR1本あたりCodeRabbitコメント数 11.3件 4.1件 -64%
Approveまでの平均往復回数 3.2回 1.8回 -44%
マージ可能になるまでの平均時間 18時間 9時間 -50%

人間がレビューする「ロジック寄りのコメント」だけが残るので、レビューの密度が上がり、議論の質も上がりました。「import順がどうこう」の往復が消えるだけで、認知コストはかなり下がります。

特に副次的な効果として、「新人の心理的安全性」が上がったというコメントがチームから多く出ました。フォーマット系の指摘は新人にとって地味に効くストレスで、それが機械任せになると、設計議論に集中できるという声でした。レビュアーから「セミコロン入れて」と言われ続ける新人ほど辛いものはありません。機械が直すなら誰も傷つかない、これは想像以上に大きい効果でした。

pre-commitとCIの両方で動かすか

「pre-commit hookで動かせばCIで走らせる必要ないのでは?」とよく聞かれます。私の答えは「両方やった方が安全」です。

  • pre-commit: ローカルで早期に修正、CIを汚さない
  • CI(auto-fix workflow): pre-commitをbypassした場合の最後の砦

pre-commitは git commit --no-verify で簡単にスキップできます。チームの全員がhookを入れているとも限らない。「絶対に通したくない指摘はCIで直す」 がベルト&サスペンダー的な保険になります。

Lefthookやhuskyでhookを管理しているチームは、 lefthook installnpm install の postInstall に組み込んで、新規メンバーが自動的にhookを有効化する仕組みにしておくと良いです。

auto-fix で失敗しがちな運用上の落とし穴

実際に運用して見えた、踏みやすい落とし穴を3つ。

落とし穴1: detached HEADへのpush試行

actions/checkout@v4 のデフォルト設定だと、PRがdetached HEADでcheckoutされます。この状態でpushしようとすると失敗します。対策はworkflowで ref: ${{ github.head_ref }} を明示することです。サンプルのworkflowに入れているのはこの理由です。

落とし穴2: forkからのPRは GITHUB_TOKEN にwrite権限が無い

OSSリポジトリで外部fork からのPRに対し、secrets.GITHUB_TOKENread-only になる仕様です。auto-fix workflow は forkPRでは push 失敗します。対策は「pull_request_target event を使う」または「forkPRはauto-fix対象外」と運用で決めるかです。前者はセキュリティリスクが上がるので、私は後者を選んでいます。

落とし穴3: package-lock.json の競合連発

auto-fix commitと開発者のローカルcommitが衝突して、package-lock.json の merge conflict が頻発するチームがありました。merge-strategies.gitattributespackage-lock.json merge=theirs に設定するか、auto-fixはlock fileを触らない方針にしておくのが楽です。

まとめ

CodeRabbit導入の次の一歩はautoFixableパターンの自動化でした。

  • autoFixable と non-autoFixable を分類: 正解が一意のものはbotに、文脈依存は人間に
  • GitHub Actions で auto-fix workflow: Prettier / ESLint / Biome / Ruff を --fix で回す
  • 二段構え運用: 機械的修正はAutomation、AI生成提案はCodeRabbit、最終判断は人間

これを入れただけで私のチームのPRレビュー時間は4割減りました。人間にしかできないレビューに時間を使うための、最初の足元を固める仕組みです。CodeRabbitの月額が高く感じる方は、まずautoFixableの自動化だけでも効果は出ると思います。

レビュー仕組み化の全体像を、12枚のスライドに

autoFixableの自動化を含むレビュー仕組み化全体(hooks・AI・人間の3層モデル)を12枚にまとめました。スライド単体でも流れがつかめます。

PRレビューのハーネス設計について、無料Book「Engineering Code Review」では、autoFixableパターンを含む15章でレビュー仕組み化を扱っています。
Engineering Code Review (Kenimoto)

参考

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?