LoginSignup
9
12

More than 5 years have passed since last update.

PHPMD実行時に好きなルールのみ適用する

Last updated at Posted at 2015-11-18

PHPMD is 何?

PHPの潜在的なバグを発見してくれるツール。
詳しくは例えば以下を参照のこと。

この記事を読んでわかること

  • PHPMDで独自ルールセットの作り方
    • phpmd 対象ファイル text 既存ルール1 既存ルール2 ...とかだと、複数の詳細なルールで構成されている既存ルールを全て適用する/しないになるが、紹介する方法だと、どの詳細なルールを当てるかを指定できます。✌('ω')✌
    • 公式ページのルールセットの作り方の劣化版
  • 独自ルールセットの実行方法
    • PHPMDがインストールされていることが前提です。

独自ルールセットの作り方

公式ページのルールセットの作り方を参考につくっていく。やり方は次の通り。

  1. テンプレートファイルをコピペして任意の場所に独自ルールセットのxmlファイルを作る
    • 名前はなんでもよいですが、説明のため以降ではruleset.xmlとします
  2. テンプレートに利用したいルールを書いていく
  3. コマンドラインで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でコードチェック!!!
自動化したくなったら次の記事も参照ください。

9
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
12