PHPMD は PHP depend のスピンオフ プロジェクトであり、よく知られた Java ツール PMD と同等の PHP となることを目指しています。 PHPMD は、PHP depend によって測定される生のメトリクス ストリーム用のユーザー フレンドリーなフロントエンド アプリケーションとみなすことができます。
https://phpmd.org
https://phpmd.org/download/index.html を参照してください。
phpmd [filename|directory[,filename|directory[,...]]] [report format] [ruleset file]
と入力します。つまり、次のように入力します。
mapi@arwen ~ $ phpmd php/PDepend/DbusUI/xml rulesets.xml
一方、 rulesets.xml
ルールセット ファイルは次のようになります。
<? xml version = " 1.0 " ?>
< ruleset name = " My first PHPMD rule set "
xmlns = " https://phpmd.org/xml/ruleset/1.0.0 "
xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : schemaLocation = " https://phpmd.org/xml/ruleset/1.0.0
http://phpmd.org/xml/ruleset_xml_schema_1.0.0.xsd "
xsi : noNamespaceSchemaLocation = "
http://phpmd.org/xml/ruleset_xml_schema_1.0.0.xsd " >
< description >
My custom rule set that checks my code...
</ description >
< rule ref = " rulesets/codesize.xml " />
< rule ref = " rulesets/cleancode.xml " />
< rule ref = " rulesets/controversial.xml " />
< rule ref = " rulesets/design.xml " />
< rule ref = " rulesets/naming.xml " />
< rule ref = " rulesets/unusedcode.xml " />
</ ruleset >
XML レポートは次のようになります。
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
< pmd version = " 0.0.1 " timestamp = " 2009-12-19T22:17:18+01:00 " >
< file name = " /projects/pdepend/PHP/Depend/DbusUI/ResultPrinter.php " >
< violation beginline = " 81 "
endline = " 81 "
rule = " UnusedFormalParameter "
ruleset = " Unused Code Rules "
externalInfoUrl = " https://phpmd.org/rules/unusedcode.html#unusedformalparameter "
priority = " 3 " >
Avoid unused parameters such as '$builder'.
</ violation >
</ file >
</ pmd >
PHP ソース コードを含むファイル名またはディレクトリ名のリストを含むカンマ区切りの文字列を PHPMD に渡すことができます。
PHPMD Phar ディストリビューションには、上記の「rulesets/codesize.xml」パラメータがファイルシステム参照のように見えても、そのアーカイブ内にルール セット ファイルが含まれています。
デフォルトの出力は XML であることに注意してください。そのため、それをファイルにリダイレクトして XSLT などに変換できます。
次のように、短縮名を使用して組み込みルール セットを参照することもできます。
phpmd PHP/Depend/DbusUI/ XML コードサイズ
コマンド ライン インターフェイスは、次のオプションの引数も受け入れます。
--verbose, -v, -vv, -vvv
- 出力の詳細レベル。処理またはキャッシュされている内容の詳細情報を出力します。レポート出力を妨げないように、 STDERR
に送信されます。 text
出力には、各エラーの下にルールのドキュメントへのリンクも含まれ、ほとんどの IDE がクリックするとエラー行のファイルを開くためのリンクに変換される方法で場所をフォーマットします。--minimumpriority
- ルールの優先度のしきい値。それより優先度の低いルールは使用されません。--reportfile
- デフォルトの出力ターゲットSTDOUT
ではなく、指定されたファイルにレポート出力を送信します。--suffixes
- 有効なソース コードのファイル名拡張子のカンマ区切り文字列 (php、phtml など)。--exclude
- ディレクトリを無視するために使用されるパターンのカンマ区切り文字列。パターンによって除外するにはアスタリスクを使用します。たとえば*src/foo/*.php
または*src/foo/*
--strict
- @SuppressWarnings アノテーションが付いたノードもレポートします。--ignore-errors-on-exit
- エラーが発生した場合でも、ゼロ コードで終了します。--ignore-violations-on-exit
- 違反が見つかった場合でも、ゼロ コードで終了します。--cache
- 結果キャッシュを有効にします。デフォルトは、現在の作業ディレクトリの.phpmd.result-cache.php
になります。--cache-file
- --cache
と連携して.phpmd.result-cache.php
のデフォルトの結果キャッシュ ファイル パスを指定されたファイル パスにオーバーライドします。--cache-strategy
- ファイルがまだ新しいかどうかを判断するためのキャッシュ戦略を設定します。ファイルの内容に基づくコンテンツ、またはファイルの変更されたタイムスタンプに基づくタイムスタンプのいずれかです。--generate-baseline
- ルールセット定義ファイルの隣に既存の違反に対するphpmd.baseline.xml
生成します。違反のファイル パスは、現在の作業ディレクトリからの相対パスになります。--update-baseline
- 存在しない既存のphpmd.baseline.xml
からすべての違反を削除します。新しい違反は追加されません_。違反のファイル パスは、現在の作業ディレクトリからの相対パスになります。--baseline-file
- カスタム ベースライン XML ファイルへのファイルパス。存在しない場合は、デフォルトでphpmd.baseline.xml
が使用されます。--color
- 出力の色を有効にします。たとえば、テキスト レンダラーはルール名を黄色で表示し、エラーの説明を赤色で表示します。--extra-line-in-excerpt
- HTML 形式のコード スニペットに追加する追加行の数を指定します。コマンドラインの例:
phpmd PHP/Depend/DbusUI XML コードサイズ --reportfile "phpmd.xml" --suffixes "php,phtml"
オプションは引数の前または後に指定できます。スペースまたは等号 ( =
) を使用して値と区切ることができます。したがって、次の構文は前の構文と同等です。
phpmd --reportfile="phpmd.xml" --suffixes="php,phtml" PHP/Depend/DbusUI XML コードサイズ
-
で始まる文字列はオプション名として認識されます。 -
で始まる引数がある場合は、最初にオプションを設定してから、 --
を使用して明示的な開始または引数リストをマークします。
phpmd --reportfile "phpmd.xml" --suffixes "php,phtml" -- -foo/Folder xml codesize
PHPMD は、テスト対象のソースに対して適用される一連のルールを構成/定義する、いわゆるルール セットを使用します。 PHPMD のデフォルトのディストリビューションには、すぐに使用できるいくつかのデフォルト セットがすでに同梱されています。セット名を指定して PHPMD の cli ツールを呼び出して、この設定を適用できます。
~ $ phpmd /パス/to/ソーステキストコードサイズ
しかし、ソースに対して複数のルール セットを適用したい場合はどうすればよいでしょうか?カンマで区切られたルール セット名のリストを PHPMD の cli ツールに渡すこともできます。
~ $ phpmd /パス/ソーステキストへのコードサイズ、未使用コード、名前付け
カスタム ルール セット ファイルと組み込みルール セットを混在させることもできます。
~ $ phpmd /パス/ソーステキストコードサイズ,/my/rules.xml
それでおしまい。この動作を使用すると、ソース コードをチェックする独自のルール セットの組み合わせを指定できます。
PHPMD では、コードの特定の部分に対して 1 つの出力を作成する場合に備えて、複数のソース ディレクトリを指定することもできます。
~ $ phpmd /path/to/code,index.php,/another/place/with/code テキスト コードサイズ
または、glob パターンを使用します。
~ $ phpmd src/main/php/*/*/*{Renderer,Node}.php text my/rules.xml
PHPMD は標準入力 stdin を読み取ることもできます。
~ $cat src/MyService.php | phpmd - テキスト my/rules.xml
したがって、スキャンされる PHP コードは、必ずしもファイルに保存される必要はない、他のプログラムによって生成される可能性があります。
PHPMD のコマンド ライン ツールは現在、4 つの異なる終了コードを定義しています。
--ignore-violations-on-exit
フラグを使用してこの動作を防ぐこともできます。これにより、違反が見つかった場合でも0が返されます。現時点では、PHPMD には次のレンダラーが付属しています。
既存のプロジェクトについては、違反ベースラインを生成できます。このベースラインのすべての違反は、以降の検査では無視されます。
推奨されるアプローチは、プロジェクトのルートにphpmd.xml
作成することです。その隣にphpmd.baseline.xml
を生成するには、次のようにします。
~ $ phpmd /パス/ソーステキスト phpmd.xml --generate-baseline
エクスポート用のカスタム ベースライン ファイルパスを指定するには、次の手順を実行します。
~ $ phpmd /ソーステキストへのパス phpmd.xml --generate-baseline --baseline-file /ソーステキストへのパス/phpmd.baseline.xml
デフォルトでは、PHPMD はphpmd.xml
の隣にphpmd.baseline.xml
を探します。この動作を上書きするには:
~ $ phpmd /ソーステキストへのパス phpmd.xml --baseline-file /ソーステキストへのパス/phpmd.baseline.xml
既存のベースライン ファイルをクリーンアップし、存在しなくなった違反のみを削除するには:
~ $ phpmd /パス/ソーステキスト phpmd.xml --update-baseline
Tidelift サブスクリプションの一部として利用できます。
PHPMD
および他の何千ものパッケージの管理者は、Tidelift と協力して、アプリケーションの構築に使用するオープンソースの依存関係に対する商用サポートとメンテナンスを提供しています。使用する正確な依存関係の保守者に料金を支払いながら、時間を節約し、リスクを軽減し、コードの健全性を向上させます。もっと詳しく知る。
PHPMD に貢献したい場合は、貢献ガイドを参照してください。