【要約】既存の負債はノイズにしない。PHPStan×GitHub Actionsで「今触ったコード」の認知複雑度だけを可視化する [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
開発者はコードレビュー中、既存の複雑なコードに惑わされる課題に直面する。既存の負債が混在するファイルでは、本来見るべき変更点が見えにくくなる。
- ・複雑度の蓄積:変更が繰り返されることで、コードは徐々に読みにくくなる。
- ・警告のノイズ:ファイル全体の計測では、触っていない既存の負債まで表示される。
- ・レビューの阻害:大量の警告により、レビュアーの認知負荷が増大する。
// Approach
変更箇所のみを特定し、その複雑度をPRに通知する仕組みを構築した。差分に特化することで、レビューの質を維持するアプローチである。
- ・差分解析:
PHP-Parserを使い、変更行が含まれる関数名を抽出する。 - ・静的解析:
PHPStanとtomasvotruba/cognitive-complexityで複雑度を計測する。 - ・フィルタリング:計測結果から、変更したメソッドのみを抽出する。
- ・コメント管理:
actions/github-scriptで既存コメントを上書きし、スレッドの汚れを防ぐ。
// Result
レビュアーは「今触ったコード」の品質に集中できる環境を得た。これにより、コードの劣化を早期に検知できる。
- ・ノイズ排除:既存の負債による警告を非表示にし、レビューの質を向上させる。
- ・導入容易性:既存のPHPStan環境へ拡張機能を追加するだけで導入できる。
- ・段階的改善:閾値を緩めから始め、徐々に厳しくすることで、無理なく品質を向上させる。
Senior Engineer Insight
> 既存の負債を「無視する」のではなく「ノイズにしない」思想が極めて実戦的だ。大規模開発では、全件警告は無視される運命にある。差分に絞ることで、開発者の心理的障壁を下げ、コードの劣化を確実に防げる。ただし、AST解析スクリプトの保守や、閾値の運用ルール策定が運用の鍵となる。現場への導入価値は非常に高い。