以下の内容はhttps://techblog.zozo.com/entry/code-review-leadtime-reductionより取得しました。


マトリックス組織×リモートでコードレビューのリードタイムを50%以上短縮した取り組み

マトリックス組織×リモートでコードレビューのリードタイムを50%以上短縮した取り組み

はじめに

こんにちは、WEAR開発部バックエンドブロックのブロック長を務めている伊藤です。普段は弊社サービスであるWEARのバックエンド開発・組織運営を担当しています。

WEARのバックエンドブロックは約10名のエンジニアで構成されています。組織としてはマトリックス型を採用しており、各メンバーはバックエンドブロックに所属しながら、複数の職種で構成されるスクラムチームにも1〜3名ずつ配置されています。スクラムチームにはPdM(プロダクトマネージャー)やデザイナー、フロントエンドエンジニア、QAなど他職種のメンバーが集まります。加えてリモートワークが基本の環境です。

マトリックス組織のイメージ

この体制ではコードレビューのリードタイムが長期化しやすいという課題がありました。本記事では、PRオープンからマージまでの平均時間を約26時間から約11時間へと短縮した取り組みを紹介します。

目次

抱えていた課題

コンテキストの分断

マトリックス組織では、バックエンドエンジニアが複数のスクラムチームに分散して配置されます。WEARのバックエンドブロックでは約10名が1〜3名ずつ別々のチームに所属しており、隣のメンバーが何を開発しているかが見えにくい状態でした。

PRが作成されても、レビュアーにとってはまず「このPRの背景にある仕様は何か」を理解するところから始まります。コンテキストが共有されていないため、レビューの入口でつまずくことが頻繁に起きていました。

レビューのボトルネック化

WEARのバックエンドブロックでは品質担保のため、2名以上のApproveを必須としています。しかしコンテキストがない状態でのレビューは仕様理解から始まるため、1件あたりの負荷が大きくなります。

改善に取り組む前はレビュアーをランダムに2名アサインしていましたが、得意領域や所属チームがバラバラで、忙しさも人によって異なります。結果として、レビューが後回しになりやすく、PRオープンからマージまでに24時間を超えるケースが多々ありました。

構造的に後回しになるレビュー

チーム全員がレビューの重要性は理解していました。しかし、自身のスクラムチームの開発タスクとレビュー依頼が常に競合する状態では、レビューは「割り込みタスク」として後回しにされがちです。

リモートワーク環境では、オフィスで自然に発生する「ちょっと見てほしい」という一声が生まれません。PRを出しても反応のないまま放置される状況が常態化していました。

これは個人の意識の問題ではなく、仕組みで解決すべき構造的な課題でした。

課題を解決したアプローチ

5名ずつの2グループ制

まず、10名を5名ずつの2グループに分けました。グループの編成にあたっては、以下の点を考慮しています。

  • 同じマトリックスチームのメンバーを同一グループにまとめる
  • 関連度の高いチーム(似た領域を触るチーム)やドメインが近い人を同じグループにする
  • ベテラン社員が偏らないようにし、レビューや設計レビューの質にむらが出ないようにする

5名という規模は、全員の作業状況を把握できるギリギリのサイズです。この単位にすることで、「何の仕様に取り組んでいるか」が自然と共有される状態をつくりました。

各グループにはグループリーダーを立て、グループ単位でPDCAを自走できる体制にしています。リーダーがグループ内の課題を拾い、改善施策を回しています。そこで得られた知見はもう一方のグループにも共有し、チーム全体の底上げにつなげています。

全体朝会+グループ朝会の二段構成

毎日の朝会は、全体朝会(30分)とグループ朝会(30分)の二段構成で運用しています。

全体朝会(30分) では、バックエンドブロック全員が集まり、以下の内容を共有します。

  • 小話やLT(チームの雑談・学びの共有)
  • タスク共有(各メンバーの作業状況)
  • 案件共有(お問い合わせ対応のアサインなど)
  • 共有・相談(曜日ごとに担当者が議題を持ち寄る)

グループ朝会(30分) では、各グループに分かれて以下を行います。

  • 各スクラムチームから現在の作業状況を報告する
  • チームメンバーのOpen PRを確認し、レビュー依頼をリマインドする
  • 新規PRはPR作成者が画面共有しながらメンバーに内容を説明する
  • 朝会後はそのまま「もくもくレビュータイム」としてレビューに取り組む(詳細は後述)
  • 週1回、Findy Team+のチーム比較を確認し、1週間の振り返りと改善点を話し合う

グループ朝会の司会は1週間交代で担当します。特定の誰かに運営が偏らないようにすることで、全員が主体的に関わる仕組みにしています。

ポイントは、グループ朝会で「未レビューのPR」を毎日確認する仕組みにしていることです。これにより、PRが誰の目にも触れずに放置されるという事態を構造的に防いでいます。

段階的にたどり着いた「もくもくレビュータイム」

実は、最初からレビュー専用時間を設けていたわけではありません。取り組みの初期はグループを分けて朝会でPRを確認するところから始めました。

それだけでもリードタイムは改善しましたが、新たな課題が見えてきました。朝会でPRの内容を共有しても、レビューに取り組む時間が仕組みとして確保されていなかったため、結局は各自の開発タスクが優先されがちでした。

そこで、グループ朝会の後にそのまま「もくもくレビュータイム」を設けることにしました。朝会が終わったらそのままGather(仮想オフィスツール)に残り、レビューに取り組みます。

もくもくレビュータイムの運用ルールは以下の通りです。

  • Gatherに集まり、各自が黙々とレビューする
  • 必須でレビューしてほしい人がいる場合は、PR内でその人をメンションしておく
  • メンションされたPRを優先的に確認し、メンションされた人のレビューは必須とする
  • メンションは任意とし、各自の判断で行う(例:その機能に詳しい人へ仕様チェックを依頼したい場合など)

この「朝会→もくもくレビュータイム」の流れを毎日のリズムとして定着させたことで、レビューが「空いた時間にやるタスク」から「毎日の習慣」に変わりました。

さらに、朝会後のレビュータイムとは別に、午後にも30分のもくもくレビュータイムを設けています。午前と午後の2回、同期的にレビューする接点をつくることで、1日を通してPRを素早くキャッチできるようになっています。

以下は、1日の流れを図にしたものです。

1日の流れ

Gatherを活用する理由

もくもくレビュータイムにGatherの仮想オフィスを使っているのには明確な理由があります。

まず、レビュー中に聞きたいことがあればその場ですぐに声をかけられます。MTGをセットしたりSlackで非同期にやりとりしたりする必要がありません。さらに、他のメンバーが質問している内容も一緒に聞こえるので、自然と共通認識が形成されます。

リモートワークでは「ちょっと聞く」のハードルが高くなりがちですが、Gatherで同じ空間にいることで、オフィスの隣の席で気軽に質問するような感覚を再現できています。

Findy Team+による指標の可視化と週次改善

チームの開発パフォーマンスをFindy Team+で継続的に計測しています。設定している目標値は以下の通りです。

  • PRオープン〜マージ:16時間以内
  • PRオープン〜1人目のレビュー:3時間以内
  • レビュー〜マージ:13時間以内

以下は実際にチームで確認しているレビューサマリの画面です。

Findy Team+のレビューサマリ画面

週1回のグループ朝会で、2つのグループ間でリードタイムを比較し、「どこにボトルネックがあったか」を具体的に議論しています。以下はグループ間の比較画面です。

Findy Team+のチーム比較画面

数値があることで「なんとなく遅い」ではなく「今週は1人目のレビューまでが遅かったのはなぜか」という建設的な振り返りができるようになりました。

Findy Team+の計測対象からの除外漏れがないかも毎週確認しています。具体的には、Dependabotによる自動PR、他部署の作業待ちが発生するPR、検証が必要でやむを得ずマージを保留するPRなど、チームのレビュープロセスの実態を反映しないものを除外しています。正確な数値を維持することで、指標の信頼性を保ち、チーム全体が同じデータを見て議論できる状態を担保しています。

グループ間の比較は健全な競争意識にもつながっています。「今週は相手グループの方がリードタイムを短縮できていた」という事実は、翌週の改善アクションを自発的に生み出す原動力になっています。この仕組みによって、改善が一時的な取り組みではなく、継続的に回り続けるサイクルとして定着しました。

コードレビューガイドラインとAIレビューの活用

レビュー観点を明文化したガイドラインを整備しました。以下の観点を体系的に定義し、レビュアーごとの品質のばらつきを低減しています。

  • Railsのベストプラクティス(RESTfulなAPI設計、Strong Parametersの適切な使用など)
  • セキュリティ(SQLインジェクション対策、JWT認証、環境変数による機密情報の管理など)
  • パフォーマンス(N+1クエリの検出、nolockスコープによるロック回避、バッチ処理など)
  • API設計(バージョニングの整合性、エラーレスポンスの統一フォーマットなど)
  • テスト(RSpecのベストプラクティス、FactoryBotによる適切なテストデータ生成など)
  • プロジェクト固有の規約(設計思想ドキュメントへの準拠、既存パターンとの一貫性など)

加えて、GitHub ActionsとClaude(Anthropic)を組み合わせたAIレビューの仕組みを導入しました。PRのコメントで@claude-reviewと呼びかけるだけで、上記ガイドラインに沿った自動レビューが実行されます。PRの差分を読み取り、インラインコメントと全体のまとめを日本語で返すため、人間のレビュアーが着手する前の一次スクリーニングとして機能しています。

実際のレビューでは、以下のフィードバックが返ってきます。

まとめコメント(抜粋)

🟡 Important

  • N+1クエリ対策: preload ではなく includes の使用を推奨
  • nolockスコープの使用: 読み取り専用クエリでのパフォーマンス最適化

🟢 良い点

  • 適切なバッチ処理: find_in_batches を使用してメモリ効率を考慮
  • 充実したテストカバレッジ: 網羅的なテストケースで品質を担保

インラインコメント(抜粋)

パラメータの型定義が既存のAPIと一貫していません。他のエンドポイントではintegerで定義されているため、一貫性を保つために型を変更することを推奨します。

注目すべきは、単に一般的なベストプラクティスを指摘するだけでなく、プロジェクト固有の設計思想ドキュメントや既存の実装パターンを踏まえた指摘をする点です。これは、AIレビューのプロンプトに「まずCLAUDE.mdと設計思想ドキュメントを読んでからレビューせよ」と指示しているためです。

また、PR作成前の段階でもClaude CodeやCursor、Codexなど、各メンバーがそれぞれのAIツールを使ってセルフレビューしています。AIのセルフレビュー → @claude-reviewを使った機械レビュー → 人間によるレビューという多段構成を取っています。これにより、人間のレビュアーが設計判断やビジネスロジックの妥当性に注力できる環境を整えています。

効果と得られた知見

段階的な施策でリードタイムが半減する

以下は、約2年間のリードタイム推移です。グループ制の導入(2024年4月)、生成AIによるPR数増加(2025年8月頃)、もくもくレビュータイム導入(2025年10月)の前後で変化が見て取れます。

Findy Team+のリードタイム推移

各フェーズの平均時間は以下の通りです。

  • 改善前(〜2024年3月):約26時間
  • グループ制導入後(2024年4月〜):約16時間まで短縮
  • 生成AIによるコーディング普及後(2025年8月頃〜):PR数が週4〜6件から週8〜12件へ約2倍に増加し、約18時間へ上昇
  • AIレビュー・もくもくレビュータイム導入後(2025年10月〜):約11時間まで短縮

グループ制だけでも約10時間の改善がありましたが、生成AIの活用でPR数が約2倍に増えた際、一時的にリードタイムが上昇しました。そこにもくもくレビュータイムとAIレビューを組み合わせることで、PR数が増えた状態でもさらに短縮できています。

コンテキストの把握範囲を狭めることでレビュー速度が上がる

チームを分けてレビューすることで、各メンバーが把握すべきコンテキストの範囲が大幅に狭まりました。10名全員の状況を追うのではなく、5名の動きだけ把握すればレビューに入れる状態をつくったことが、最も効果の大きかった施策です。

グループ朝会で毎日Open PRを確認する運用と組み合わせることで、「誰がどんなPRを出しているか」が常に頭に入っている状態になります。レビューに着手する際のコンテキストスイッチのコストが大幅に下がりました。

「仕組みだけ」では不十分、同期の時間が文化を変える

グループ分けと朝会での情報共有だけでは、レビューのリードタイムは十分には改善しませんでした。転機となったのは「もくもくレビュータイム」の導入です。

情報を共有しても、レビューする「時間」が確保されていなければ結局後回しになります。午前と午後に同期的な接点を設け、「みんなが同じタイミングでレビューする」という習慣を作ったことで、レビューが日常のリズムの一部に変わりました。

重要なのは長い会議を増やすことではなく、短い同期時間を毎日の習慣として組み込むことです。

メトリクスの可視化が「感覚」を「共通言語」に変える

Findy Team+の数値とグループ間比較により、改善が「個人の頑張り」ではなく「チームの仕組み」として回るようになりました。

特に週1回のFindy Team+チェックを定例化したことで、数値が悪化したときに早く気づき、翌週の改善アクションにつなげるサイクルが定着しています。ボトルネックを感覚ではなくファクトで議論できることが、継続的な改善を支えています。

AIレビューは「人間のレビューの質」を高める

AIレビューの効果は、リードタイム短縮だけではありません。コーディング規約への準拠やN+1クエリの検出といった機械的に判断できる指摘をAIが担うことで、人間のレビュアーがそれらを一つひとつ確認する必要がなくなりました。その分、設計判断やビジネスロジックの妥当性といった、より本質的な観点へ集中できるようになっています。

また、PR作成者自身がAIツールでセルフレビューしてからPRを出すことで、レビュー時の指摘事項が減り、レビュー1件あたりの負荷が下がっています。結果として、レビューの「速度」と「質」を両立できる状態に近づいています。

おわりに

レビューのリードタイム改善は、個人の意識改革ではなく仕組みの設計で実現できます。本記事で紹介した施策をまとめると、以下の4点に集約されます。

  1. 認知範囲の縮小:グループを分けることで、把握すべきコンテキストを絞る
  2. 同期の接点の設計:朝会でPRを共有し、もくもくレビュータイムで実行する。午前と午後に接点を分散させることで情報のキャッチアップを早める
  3. 指標の可視化:Findy Team+で数値を計測し、週1回振り返る。数値で語れる文化をつくり、改善を仕組み化する
  4. AIによるレビュー品質の底上げ:AIレビューとセルフレビューで定型的な指摘を自動化し、人間は設計判断に集中する

私たちのチームも最初からうまくいったわけではありません。グループ分けだけでは足りず、レビュー専用時間の追加やFindy Team+での振り返りの定例化、AIレビューの導入など、段階的に改善を重ねてきました。結果として、PRオープンからマージまでの平均時間は約26時間から約11時間へと短縮しています。

マトリックス組織×リモートという環境は、コードレビューにとって不利な条件が揃いやすい構造です。しかし適切な単位でチームを分割し、同期と非同期のバランスを設計し、指標で振り返る仕組みを整えれば、質を落とさずに速度を上げることは十分に可能です。

約11時間まで短縮できましたが、改善の余地はまだあると考えています。AIレビューのプロンプトを磨いてレビュー精度を高めることや、AIレビューの品質向上を前提に2名Approveのルール自体を見直すことなど、取り組みたいテーマは尽きません。今後もチームの変化に合わせて仕組みをアップデートしていきます。

同様の課題を抱えるチームにとって、本記事が何かの参考になれば幸いです。

ZOZOでは、一緒にサービスを作り上げてくれる方を募集中です。ご興味のある方は、以下のリンクからぜひご応募ください。

corp.zozo.com




以上の内容はhttps://techblog.zozo.com/entry/code-review-leadtime-reductionより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14