🌟

3500件以上あったLarastanのエラーを約3ヶ月で解消するまで

に公開

はじめに

こんにちは。株式会社イノベーションでITトレンドの開発をしているむーです。
本記事では、私たちのプロダクトにLarastanを導入し、3500件以上あったエラーをチームで解消した経験についてご紹介します。

前提

対象読者

  • 静的解析ツールの導入に興味はあるが、まだ踏み切れていない方
  • 静的解析ツール導入の流れや、導入後の影響について知りたい方

この記事で触れないこと

  • Larastan自体の詳細
  • 技術的な話(Larastanの導入方法やエラーの解消方法)

環境

  • PHPのバージョン:8.2.28
  • Laravelのバージョン:10.48.17
  • Larastanのレベル:5

Larastanを導入した経緯

サービスの長期運用により、古いコードと新しいコードが混在し、不具合が発生しやすい状況でした。テストが十分でない箇所も多く、少しでも早い段階で問題を検知するためにLarastanを導入しました。
なお、Larastanのレベルは6以上が理想ではありましたが、エラー件数が多すぎて対応しきれないため、今回は5に設定しました。

エラー解消の進め方

Larastanのエラーがあるファイルを一覧化し、スプレッドシートで担当者や対応状況を管理しました。(下記のようなイメージの表を活用しました。)

毎日30分、メンバー全員(6~7人)でLarastanのエラー解消に取り組む時間を設け、その時間でエラー解消やコードレビューを行いました。

上記の進め方で良かったこと

時間を固定したことで、チーム全員で進めることが習慣化できたこと

1日の中で各々30分時間を取る場合と比較して、「後でやればいいか」とエラー解消が後回しになるのを防げたのではないかと思います。(もちろん、緊急性の高いタスクがあるときはそちらを優先していました。)

困った時にすぐ相談できる環境ができ、1つのエラーに何日も悩む事態を避けられたこと

「このファイルでこんなエラーで詰まっているんですが。。」と相談するとすでに同じようなエラーに遭遇した方が解消した時のtipsを共有してくださったり、複数人で解決方法を一緒に考えたりでき、開発の経験年数に左右されず全員で取り組みやすい雰囲気につながっていました。

エラー解消時に意識したこと

プルリクの粒度を小さくして、細かくリリースする

1ファイルの修正とその修正により影響が出る箇所の修正が終わり次第、プルリクを作成するようにしました。基本的に1つのプルリクでレビューにかかる時間が10分かからない程度の粒度にすることで、レビュワーの負担が大きくならないよう意識しました。

修正後の動作確認を丁寧に行う

修正箇所が既存機能に影響を与えていないか確認し、その証跡をプルリクに残すようにしました。レビュワーもコードレビューだけでなく、可能な限り動作確認を行うようにしました。

全てのエラーを完璧に解消することにはこだわらない

今回は、プロダクトコードでのバグ検知を重視していました。そのため、設計から見直しが必要になりそうなエラーについては、無理に対応せず一旦無視する方針としました。また、/testsディレクトリ配下のファイルもLarastanのエラー解析対象から除外しました。
設計から見直しが必要なエラーを無理に解消しようとすると、かえってリリース時に新たなバグを生むリスクが高まるためです。さらに、テストコードまでLarastanの解析対象に含めてしまうと、テストを書くこと自体が負担になり、本来の目的から外れてしまう恐れがありました。こうした理由から、今回はテストコードは解析対象外としました。

結果

約3ヶ月で、3500件以上あったLarastanのエラーを解消し、0件にすることができました。
エラー件数の推移は下記のグラフの通り着実に減少し、チーム全体の達成感やモチベーション向上につながったと感じています。

Larastanのエラー解消に取り組んでみて

Larastanのエラー解消を通じて、下記のようなさまざまな恩恵を感じています。

  • CRで本来レビューすべき箇所(ex: 仕様変更・追加した箇所)に集中できるようになった
  • チーム全体で品質の高いコードを書く意識が高まった
  • コードベースでサービスの仕様理解が深まった(特に私は当時配属2年目だったこともあり、触れたことがあまりない機能に関するコードも多く見ることができました)
  • 他のメンバーのコードを見る機会が増え、レビューの観点が広がった

また個人的には、チーム全員でやる × 小さな積み重ねの習慣化の効果の大きさを実感しました。1人で3500件ものエラーを解消するのは困難ですが、チームで毎日少しずつでも着実に進めたことで、短い期間でたくさんのエラーを解消できたのではないかと思います。

最後に

既存コードのLarastanのエラーを解消しただけでは、コードを追加・修正するとまたエラーが出てきてしまいます。そのため、エラーがない状態を維持するためにgitのpre-commitフックやCIへの組み込みも行いました。これらの取り組みについては別の記事でご紹介する予定です。

最後までお読みいただきありがとうございました。

株式会社イノベーション Tech Blog

Discussion