「ローカル変数酷使度」ツールの進化:複数ファイル解析機能の追加

PHPのローカル変数酷使度を計測するツールを作ってます。
今回は、このツールの新機能として追加された「複数ファイル解析モード(scopesモード)」について解説します。
機能拡張の背景
前回紹介したツールでは、1つのファイルだけを解析する機能を提供していました。これは小規模のプロジェクトや特定のファイルを集中的に分析する場合には十分でしたが、多くの人に気軽に使ってもらうためには、複数のファイルやディレクトリを一度に解析できた方が好ましいと考えました。
そこで、バージョン0.0.4では、複数のファイルを一度に解析できる「scopesモード」を追加しました。
新しいコマンド構造
新バージョンでは、以下の2つの主要なコマンドモードを提供しています:
- single: 従来通り、単一のPHPファイルを解析します
- scopes: 複数のファイルやディレクトリを解析し、結果を一つのレポートにまとめます
この変更により、ツールの使用方法がより直感的になり、さまざまなユースケースに対応できるようになりました。後方互換性のため、コマンドを指定せずにファイルパスだけを渡す従来の方法も引き続きサポートしています。
scopesモードの使い方
scopesモードでは、複数のファイルパスやディレクトリパスを指定できます:
# ディレクトリ内のすべてのPHPファイルを解析
$ vendor/bin/php-variable-hard-usage scopes src/
# 複数のディレクトリを解析
$ vendor/bin/php-variable-hard-usage scopes src/ tests/
# 特定のファイルとディレクトリを組み合わせて解析
$ vendor/bin/php-variable-hard-usage scopes src/Command.php config/ tests/
指定されたパスがディレクトリの場合、そのディレクトリ内のすべてのPHPファイルが再帰的に解析されます。また、個別のファイルを指定することも可能です。
スコープベースのレポート
scopesモードの出力は、すべての解析結果を「ローカル変数酷使度」の高い順にソートした形式になります:
{
"scopes": [
{
"file": "src/Parse/VariableParser.php",
"namespace": "Smeghead\\PhpVariableHardUsage\\Parse",
"name": "VariableParser::collectParseResultPerFunctionLike",
"variableHardUsage": 65
},
{
"file": "src/Parse/VariableParser.php",
"namespace": "Smeghead\\PhpVariableHardUsage\\Parse",
"name": "Expr_Closure@65",
"variableHardUsage": 47
},
...
]
}
この形式により、プロジェクト全体でどの関数やメソッドが最もローカル変数を酷使しているかを一目で把握することができます。
まとめ
「ローカル変数酷使度」ツールの新バージョンでは、複数ファイル解析機能の追加により、より大きなプロジェクトでの使用が容易になりました。この機能を活用することで、プロジェクト全体の中で特に注意が必要な部分を効率的に特定できるようになります。
ぜひこのツールを使ってみて、自分のプロジェクトのコード品質向上の参考にしてみて欲しいです。また、GitHub上でのフィードバックや機能追加のリクエストもお待ちしています。