Larastanで静的解析はじめます
アイミツ開発チームでエンジニアリングをしている deliku です!
他チームのLaravelを利用したプロジェクトでは、Larastan がすでに導入されているのですが、アイミツ開発チームでも この度 Larastan を導入する運びとなりました。
静的解析とは?
コードを実行せずに行う検証を指し、コードの記述内容から構文チェック、未知のクラス、未知の関数、デッドコードなどを検知し、バグ発生要因を発見することができます。これによりシステムの保守性 / コード可読性の向上に効果があります。
なぜ、今までいれてなかったか?
今年の春頃までアイミツのプロダクトはシステムリプレイスを行なっており、リプレイスを進めている間は CodeFactor にて設定したPHP_CodeSniffer によるコーディング規約チェックをCIで動かすまでで留まっておりました。今にして思えばリプレイス初期時点で Larastan を導入しておくべきだったなと思う(今まさにブログを書きながら反省しています)のですが、リプレイス期間中にそこまで考慮する余裕が当時の私にはなかったようです。
導入していないことでの不安な声もあった
- PHPの緩い型制約による実行時エラーが不安
- クラスやインスタンスに対する存在しないプロパティ・メソッドアクセスを実行前に検出可能となる
単体/結合テストコードを書いているので不具合はほぼ発生していないのですが、PRレビュータイミングで型宣言漏れや未定義変数などをレビュワーが指摘するのは開発効率が悪くなってしまいます。
なによりも リプレイス後の高速な価値検証のために、型チェックを導入し、開発的安全性・安心感を手に入れたい という理由が大きくなってきました。
Larastan いれてみる
まずは、level0でエラーがなくなるようにします。level 0では未知のクラス、未知の関数、未定義変数などをチェックしてくれます。
basic checks, unknown classes, unknown functions, unknown methods called on $this, wrong number of arguments passed to those methods and functions, always undefined variables
解析結果の指摘箇所はそれほど多くなく、似たような指摘が多かったので数日で指摘事項の対応を終えることができました。指摘事項に対応したcommitは下記の通りです。
今後の展望
まだ静的解析ができる状態になっただけですので、チームメンバーと協力して早めに下記に着手していきたいと思っています。
1. levelを徐々にあげて解析ルールの厳格さを強める
2. CI環境で Larastan を実行し、reviewdog によるコードレビューを自動で行う
▶ 【PR】ユニラボ に興味がある方へ
今回の記事を読んでユニラボに興味を持っていただけた方は、まずはカジュアル面談でざっくりお話させていただければと思います!