本稿ではPHPのコード解析ツールPsalm(サーム /sάːm/)について紹介する。
本稿の内容
本稿では次の内容を説明する。
- Psalmがしてくれること
- Psalmの導入手順
- Psalmの設定
- Psalmの実行方法
Psalmがしてくれること
PsalmはPHPの静的コード解析(static code analysis)ツールで、PHPコードを解析して問題点をあぶり出してくれる。Psalmで発見できる問題は主に次のものがある:
- 廃止予定(deprecated)の関数、メソッド、クラスの利用。
- 配列キーの重複。
- 型の不整合。戻り値の型宣言と異なる型の
return
など。 - アクセスできないメンバ変数やメソッドへのアクセス。
private
や@internal
など。
コンパイル型言語であれば、こうした解析はコンパイラの仕事だったりするが、PHPはスクリプト言語なのでコンパイラが存在しない。こうした開発ツールの欠如を補うのがPsalmの役割と考えられる。
Psalmで見つけた問題点はPsalterというツールで自動修正できるものもあるが、Psalterの説明は本稿では取り上げない。
なお、このツールはvimeoが作っている。
Psalmの導入手順
PsalmはComposerでインストールする:
composer require --dev vimeo/psalm
インストールできたら設定ファイルpsalm.xmlを作るために初期化コマンドを実行する:
./vendor/bin/psalm --init src 3
srcは解析対象のコードがあるディレクトリ、3は設定レベル。1〜8の値を渡す。1は最も厳密な解析を行う。8は最もゆるい。
解析を実行する:
./vendor/bin/psalm
Psalmの設定
Psalmはデフォルトの設定でもさまざまな問題を検出してくれるが、設定ファイルpsalm.xml
に設定を加えることで検査の厳密さを上げたり、振る舞いを変えたりすることができる。
<psalm />
の設定
totallyTyped
totallyTyped
にtrue
をセットすると、Psalmが型を推測できないコードをエラーとして扱うようになる。
<psalm
totallyTyped="true"
/>
strictBinaryOperands
文字列結合と数値の足し算を厳密にチェックする。つまり、文字列に対する+
と、数値に対する.
の使用をエラーとして扱うようになる。
<psalm
strictBinaryOperands="true"
>
allowPhpStormGenerics
PhpStormのために配列の型の情報をdocblockにArrayIterator|string[]
などと書くことがあるが、allowPhpStormGenerics
をtrue
にするとその情報を尊重するようになる。
<psalm
allowPhpStormGenerics="true"
>
まとめ
本稿では、PHPのコード解析ツールについて紹介した。
- PsalmはPHPコードを解析して問題点をあぶり出す。
- 設定することでより厳格にチェックすることができる。
質問があればコメントください。