エンジニアブログ 2024.07.10 コードレビューに取り組むメリット はじめに こんにちは。PS事業推進部の小林です。普段はAndroidアプリ開発のエンジニアをしています。 私がエプソンアヴァシスに入社したのは十数年前ですが、当時からチーム開発の中でコードレビューがプロセスとして導入されているなど、コードの品質を高める活動が定着していました。 今回は、コードレビューがどのようなことに役立つと考えているかについて、私がこれまで経験した中からいくつか紹介します。 この記事を通じて、アヴァシスでのソフトウェア開発の雰囲気を少しでも感じていただければと思います。 どのようなことに役立つか? コードレビューはどのように役立つのでしょうか?たとえば以下のような場合にメリットがあると感じることが多いです。 早い段階で不具合に気づける プロジェクトに対する認識や知見の差に気づける コードの品質を向上させることができる ナレッジの共有ができる 早い段階で不具合に気づける エッジケースで発生するバグ(極端なパラメータを指定したときや、特定の状態の組み合わせのときなど。テストケースで網羅しきれない) 並行処理で実行タイミングに依存して発生するバグ(処理Aと処理Bの実行順序が制御されていないときに、低確率で発生する類のもの。再現させるのが難しく後で見つかると厄介なバグ) パフォーマンスの問題(長時間プログラムを動作させた状態や、長期間運用を続けてデータ量が多くなるなど。再現環境を作るのに時間がかかる) このような問題はいずれもテストで見つけづらいものが多かったりしますが、コードを直接確認することで、ある程度の開発経験があると気づける場合があります。 また、バグの検出が遅くなると問題の調査・修正・再テストなどにかかる時間なども余計に必要となりますが、早期にバグを検出できることで手戻りを最小限にすることができます。 プロジェクトに対する認識や知見の差に気づける チームにおける役割、関わっている年数によって、知っている情報や考え方に差が出たりすることがあります。 自分は問題ないと思っていたことが、他のメンバーからするとNGなことがある 情報が正確に伝わっていない、暗黙知になっていたことが反映されていない たとえば、製品の運用を通じてパラメータを最適化させるために特定の処理の状態をログに出力する必要があったり、手作業によるミス防止や効率化のため、直接コードを変更せずに生成ツールから出力したコードを利用しなければならない、などのプロジェクトごとに異なる事情がある場合です。他にも、開発の途中で軽微な仕様追加・変更があったときに、他のモジュールには影響しないと判断して関係メンバーに連絡しなかったことが、実は影響があったという場合もあります。 これらは繰り返されるとよくないので、気付いたタイミングで共通認識を共有するための仕組みを作ることが大切です。ガイドラインを作ったり、情報伝達のフローをきちんと定義したりするなどして回避します。 コードの品質を向上させることができる より単純で簡潔な処理に置き換えられないか? 重複・類似した処理がないか? コメントはわかりやすく書かれているか? プログラミングの原理原則やデザインパターン・ベストプラクティス・アンチパターンなどをもとに、コードを最適化します。 本質的でない些細な指摘がたくさんあると時間もかかりますし、レビューする側、される側の両方に負担となります。 このような場合ではコードレビューを実施する前にLinterやFormatter、コードメトリクス計測など、できるだけツールで対処することが推奨されます。技術的負債をできるだけ作らないように気をつけます。 ナレッジの共有ができる ソフトウェア開発において、チームのメンバーがいつまでも同じとは限りません。プロジェクトが保守フェーズに入りチーム人数縮小するなど、コードを書いた人はいつかプロジェクトを離れるものです。 何をやっているのかわからないコードを引き継ぐのは大変 設計資料がない、コメントがない、設計意図がわからない、複雑すぎて影響範囲が大きすぎる 少しの変更なのに膨大な調査・修正工数がかかることに! 上のようなことが起きないように、書いた本人が目の前にいる今聞くのが一番コストは小さくなります。 コードレビューのやり方 いちばん簡単な方法は、チームのメンバーの隣に行って、自分のPCの画面にコードを表示して見てもらう方法です。人数が多いときはミーティングスペースで大きめのモニターで表示したり、開発拠点が離れているメンバーがいるときはTeamsを使ってリモートで画面共有しながらすることも多いです。画面を共有してのピアレビューは、対話しながらより細かな内容を共有できます。またちょっとした疑問や不安、違和感を共有する場としても有効です。 また、GitLabでコードをホストしているプロジェクトの場合は、マージリクエストを使うやり方も実施しています。 この方法では、非同期でレビューできるとともに、コメントも残るので効率的です。どのような方法で実施するかは、プロジェクトごとに最適なものを選択して実施しています。 おわりに 今回はエプソンアヴァシスのソフトウェア開発で行っているコードレビューについて紹介しました。コードレビューは、ソフトウェアの欠陥を見つけることだけではなく、チームの協力と知識共有を促進し、長期にわたりソフトウェア開発を継続するための重要なプロセスです。みなさんもぜひ、コードレビューに積極的に取り組んでみてください! ※本文中に記載されている会社名、製品名等は、各社の登録商標または商標です。本文中ではTM、(R)マーク等は明記していません。 この記事を書いた人 Androidエンジニア。趣味は小学生のむすめといっしょに遊ぶこと。ビールと温泉がすき。