RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

コードレビューガイドラインと「おやつ」のオイシイ関係

こんにちわ @kawanamiyuu です。今回は私の所属する楽楽労務の開発チームで運用しているコードレビューガイドラインとコードレビューにまつわる少し変わった取り組みについて紹介しようと思います。

楽楽労務の開発体制

  • チーム
    • 開発拠点は東京と大阪
    • 1 チームあたり 3 〜 5 名の、合計 3 チーム(+スクラムマスター等)でスクラム開発*1
    • 私はそのうちの 1 チームのリーダーを担当
  • ツール
    • GitLab でソース管理し、Merge Request *2 を活用してコードレビューを実施
      • レビューを通ったコードがメインブランチにマージされる
    • 開発タスク(PBI*3、SBI*4)は Trello で管理

コードレビューガイドライン策定の背景

開発規模拡大のための人員増とそれに伴う複数チーム体制への移行により、

  • チームごとにコードレビュー指摘の重要度や観点にばらつきがある
  • 開発メンバーが自身の成長を測る指標として、Merge Request の差し戻し回数より細かい粒度の情報を収集しづらい

といった課題が出てきていました。

コードレビューガイドライン策定の目的

これらの課題を解決するためのコードレビューガイドラインを策定し、次の実現を目指しています。

  • 開発チーム全体で同じ基準でコードレビューを行い、修正要否を判断できるようにする
  • 開発メンバーがレビュー指摘を重要度や観点ごとに分析し、自身のふりかえりに活かせるようにする
  • 観点を明文化することで、レビューイーのセルフチェックやレビュアー育成のインプットとして使えるようにする

レビュー指摘の重要度

コードレビューで発生する指摘には必ず優先度を付け、プロダクト品質に対する重要度を表現します。

重要度 説明
MUST 必ず修正すべき。われわれが期待する当たり前品質に達しておらず、そのままではリリースできない。今放置するとあとで大きな負債になる
SHOULD 可能なら修正すべき。リリーススケジュールを優先するため戦略的に修正を見送ることもできるが、その場合は次バージョンで修正を検討すべき
IMO 修正判断はレビューイーに委ねられる。別解の提案や現時点では判断が難しい課題など、レビュアーの意見に過ぎない

レビュアーはこれらの「重要度」に「観点」*5を加えて、Merge Request 上のコードに対してレビュー指摘を記述します。

<レビュー指摘の記述例> f:id:kawanamiyuu:20200827085340p:plain

コードレビューの工夫

MUST レベルのレビュー指摘はリリース品質を満たしていないことを意味するため、必ず修正する必要がありますが、SHOULD レベルのレビュー指摘の修正判断には裁量があります。

私がリーダーを担当するチームでは「SHOULD レベルのレビュー指摘はすぐには修正せずいったん負債として積み上げる」という運用を試みています。平たくいうと、未修正の SHOULD レベルのレビュー指摘が残っていても Merge Request をマージしてよいことにしています。

これは、

  • まずはリリース可能品質到達を最速で目指すことで、開発の後工程のスケジュール上のリスクを減らしたい
  • コードの問題を「いつ」「どの程度ちゃんと」修正するかという意思決定によって開発速度と品質のバランスを調整したい

という考えが背景にあり、担当チームメンバーと開発チーム全体に説明のうえ、このような工夫を試しています。

この運用によって後回しにした負債タスクも Trello 上で管理しています。

その名も「SHOULD」レーン(まんま)です。

f:id:kawanamiyuu:20200826203357p:plain:w300

このレーンのタスクは、実装タスクのレビュー待ち時間やスプリントの切れ目など、主に開発業務のリードタイムが発生したときに、開発業務の箸休め的なタスクとして、各自が自主的に取って解消していく運用としています。

「おやつ」という発明

さて、いよいよ本題ですが、最近のスプリント終了時の振り返りで、私のチームのあるメンバーが「今回のスプリントはタイミングよく負債タスクを消化できた。おやつ感覚だった。」と発言しました。その瞬間、メンバー全員が「これだ!」と思いました。

そして爆誕したのが「おやつ」レーン(名前変えただけ)です。

f:id:kawanamiyuu:20200827085832p:plain

この並びに「おやつ」の文字が並ぶのは面白いですね。

プログラマーにとって名前付けはとても重要です。その対象の特徴を適切に捉えた良い名前が与えられることで、非常にすっきりとその世界観を理解することができます。

また、今回、負債タスクに「おやつ」という名前がついたことで、負債というネガティブなイメージがポジティブなイメージに変わり、負債解消に前向きに取り組むことができるようになりました。

おわりに

今回紹介したコードレビューに対する取り組みは、現状うまく回っています。開発中に発生した一部のレビュー指摘を負債として一時的に後回しにはするものの、「おやつ」感覚で適宜消化し、負債を溜め込まない状態をキープできています。

私たちの取り組みが、開発速度と品質を両立し、技術的負債に対して前向きに取り組みむためのアイデアとなれば嬉しいです。

--

P.S. その後、次のような名言(迷言)も生まれています。

  • おやつの鮮度が落ちると背景理解に時間がかかる
    • = 負債を放置すると、実際に修正しようとしたときにどんなコンテキストでの指摘だったのか思い出して理解するのに時間がかかる
  • おやつを食べすぎた
    • = メインの実装タスクよりも負債の解消を優先してしまい、実装タスクの完了が遅れた

*1:LeSS のようなイメージ

*2:GitHub でいうところの Pull Request のこと

*3:Product Backlog Item

*4:Sprint Backlog Item

*5:外部品質上の指摘観点:「不具合」「互換性」etc。内部品質上の指摘観点:「理解容易性」「変更容易性」etc。

Copyright © RAKUS Co., Ltd. All rights reserved.