PHPMD is 何?
PHPの潜在的なバグを発見してくれるツール。
詳しくは例えば以下を参照のこと。
この記事を読んでわかること
- PHPMDで独自ルールセットの作り方
-
phpmd 対象ファイル text 既存ルール1 既存ルール2 ...
とかだと、複数の詳細なルールで構成されている既存ルールを全て適用する/しないになるが、紹介する方法だと、どの詳細なルールを当てるかを指定できます。✌('ω')✌ - 公式ページのルールセットの作り方の劣化版
-
- 独自ルールセットの実行方法
- PHPMDがインストールされていることが前提です。
独自ルールセットの作り方
公式ページのルールセットの作り方を参考につくっていく。やり方は次の通り。
- テンプレートファイルをコピペして任意の場所に独自ルールセットのxmlファイルを作る
- 名前はなんでもよいですが、説明のため以降ではruleset.xmlとします
- テンプレートに利用したいルールを書いていく
- コマンドラインでPHPMDを実行する際に、ルールセットを読み込む
テンプレートファイルをコピペして任意の場所にruleset.xmlを作る
以下のテンプレートをコピペして作ってください。
テンプレート
ruleset.xml
<?xml version="1.0"?>
<ruleset name="My first PHPMD rule set"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="
http://pmd.sf.net/ruleset_xml_schema.xsd">
<description>
My custom rule set that checks my code...
</description>
<!-- ここから利用したいルールを書く -->
</ruleset>
テンプレートに利用したいルールを書いていく
必要なルールを追記していきます。詳しいルールは公式ページのルール一覧を参照してください。
各ルール(以下、便宜上親ルールと呼ぶ)はいくつかの詳細なルール(以下、子ルール)からなります。rule
で適用したい親ルールの項目を選択し、exclude
で除外したい子ルールを指定します。
ruleset.xml
<!-- ここから利用したいルールを書く -->
<!-- Import the entire unused code rule set -->
<rule ref="rulesets/unusedcode.xml" /> <!-- 親ルールを指定すると含まれる子ルール全てが適用される -->
<!-- Import the entire cyclomatic complexity rule -->
<rule ref="rulesets/codesize.xml/CyclomaticComplexity" /> <!-- 子ルールの循環的複雑度チェックだけいれたい -->
<!-- Import entire naming rule set and exclude rules -->
<rule ref="rulesets/naming.xml">
<exclude name="ShortVariable" /> <!-- 短い変数が使いたいので子ルールの一部を除外 -->
</rule>
rulesetは常にインストールディレクトリをルートとして読み出されるようで、ruleset.xmlのpathにかかわらず<rule ref="rulesets/hoge />
と指定しても大丈夫みたいです。
参考:rulesetの実体はどこにある?
composerでグローバルにインストールしている場合
tree ~/.composer/vendor/phpmd/phpmd/src/main/resources/
/Users/User/.composer/vendor/phpmd/phpmd/src/main/resources/
└── rulesets
├── cleancode.xml
├── codesize.xml
├── controversial.xml
├── design.xml
├── naming.xml
└── unusedcode.xml
コマンドラインでPHPMDを実行する際に、ルールセットを読み込む
次のようなコマンドで検査対象に対して独自ルールセットを適用したPHPMDを実行します。(rulesetはデフォルトのルールセットと同じ場所に置きました。)
phpmd file text ruleset.xml
ただしfile
は検査対象のファイル。text
はアラートを出す際にテキスト形式で出力することを意味します(他にxml
やらが指定できます)。なお、デフォルトでは標準出力に表示されます。
たったこれだけ!君も今すぐPHPMDでコードチェック!!!
自動化したくなったら次の記事も参照ください。