PMDの紹介

PMDの概要

1. 概要

簡単に言えば、PMDは、未使用の変数、空のcatchブロック、不要なオブジェクトの作成など、一般的なプログラミングの欠陥を見つけるためのソースコードアナライザーです。

Java、JavaScript、Salesforce.com Apex、PLSQL、Apache Velocity、XML、XSLをサポートしています。

この記事では、PMDを使用してJavaプロジェクトで静的分析を実行する方法に焦点を当てます。

2. 前提条件

PMDをMavenプロジェクトにセットアップすることから始めましょう–maven-pmd-pluginを使用して構成します。


    ...
    
        
            
                org.apache.maven.plugins
                maven-pmd-plugin
                3.7
                
                    
                        /rulesets/java/braces.xml
                        /rulesets/java/naming.xml
                    
                
            
        
    

maven-pmd-pluginhereの最新バージョンを見つけることができます。

ここで構成にルールセットを追加していることに注目してください。これらは、PMDコアライブラリからすでにルールを定義するための相対パスです。

最後に、すべてを実行する前に、いくつかの明白な問題を含む単純なJavaクラスを作成しましょう。これは、PMDが問題の報告を開始できるものです。

public class Ct {

    public int d(int a, int b) {
        if (b == 0)
            return Integer.MAX_VALUE;
        else
            return a / b;
    }
}

3. PMDを実行する

簡単なPMD構成とサンプルコードを使用して、ビルドターゲットフォルダーにレポートを生成しましょう。

mvn site

生成されたレポートはpmd.htmlと呼ばれ、target/siteフォルダーにあります。

Files

com/example/pmd/Cnt.java

Violation                                                                             Line

Avoid short class names like Cnt                                   1–10
Avoid using short method names                                  3
Avoid variables with short names like b                        3
Avoid variables with short names like a                        3
Avoid using if...else statements without curly braces 5
Avoid using if...else statements without curly braces 7

As you can see – we’re not getting results.レポートには、PMDによると、Javaコードの違反と行番号が表示されます。

4. ルールセット

PMDプラグインは、5つのデフォルトルールセットを使用します。

  • basic.xml

  • empty.xml

  • imports.xml

  • unnecessary.xml

  • unusedcode.xml

他のルールセットを使用するか、独自のルールセットを作成して、プラグインでこれらを設定できます。


    ...
    
        
            
                org.apache.maven.plugins
                maven-pmd-plugin
                3.7
                
                    
                        /rulesets/java/braces.xml
                        /rulesets/java/naming.xml
                        /usr/pmd/rulesets/strings.xml
                        http://localhost/design.xml
                    
                
            
        
    

構成の「ルールセット」値の値として、相対アドレス、絶対アドレス、またはURLのいずれかを使用していることに注意してください。

プロジェクトに使用するルールをカスタマイズするためのクリーンな戦略は、write a custom ruleset fileです。 このファイルでは、使用するルールを定義し、カスタムルールを追加し、公式ルールセットに含める/除外するルールをカスタマイズできます。

5. カスタムルールセット

次に、PMDの既存のルールセットから使用する特定のルールを選択し、それらをカスタマイズしてみましょう。

まず、新しいruleset.xmlファイルを作成します。 もちろん、既存のルールセットファイルの1つを例として使用し、それをコピーして新しいファイルに貼り付け、そこから古いルールをすべて削除し、名前と説明を変更できます。



    
        This ruleset checks my code for bad stuff
    

次に、いくつかのルール参照を追加しましょう。


または、いくつかの特定のルールを追加します。




ルールのメッセージと優先度をカスタマイズできます。


    2

また、次のようにルールのプロパティ値をカスタマイズすることもできます。


    
        
    

個々の参照ルールをカスタマイズできることに注意してください。 ルールのクラス以外はすべて、カスタムルールセットでオーバーライドできます。

次に、ルールセットからルールを除外することもできます。


    
    

Next – you can also exclude files from a rulesetは除外パターンを使用し、オプションで包含パターンをオーバーライドします。

一致する除外パターンがあるが、一致する包含パターンがない場合、ファイルは処理から除外されます。

ソースファイルパスのパス区切り文字は「/」文字に正規化されているため、複数のプラットフォームで同じルールセットを透過的に使用できます。

さらに、このexclude / includeテクニックは、PMDの使用方法に関係なく機能します(例: コマンドライン、IDE、Ant)、環境全体で一貫したPMDルールの適用を維持しやすくします。

以下に簡単な例を示します。



    My ruleset
    .*/some/package/.*
    
       .*/some/other/package/FunkyClassNamePrefix.*
    
    .*/some/package/ButNotThisClass.*
    ...

6. 結論

この簡単な記事では、Javaコードの静的分析に焦点を合わせた柔軟で高度に構成可能なツールであるPMDを紹介しました。

いつものように、このチュートリアルで提示される完全なコードはover on Githubで利用できます。