30
23

More than 5 years have passed since last update.

PHPのコード解析「Psalm」の使い方

Last updated at Posted at 2019-03-05

本稿では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

totallyTypedtrueをセットすると、Psalmが型を推測できないコードをエラーとして扱うようになる。

psalm.xml
<psalm
  totallyTyped="true"
/>

strictBinaryOperands

文字列結合と数値の足し算を厳密にチェックする。つまり、文字列に対する+と、数値に対する.の使用をエラーとして扱うようになる。

psalm.xml
<psalm
  strictBinaryOperands="true"
>

allowPhpStormGenerics

PhpStormのために配列の型の情報をdocblockにArrayIterator|string[]などと書くことがあるが、allowPhpStormGenericstrueにするとその情報を尊重するようになる。

psalm.xml
<psalm
  allowPhpStormGenerics="true"
>

まとめ

本稿では、PHPのコード解析ツールについて紹介した。

  • PsalmはPHPコードを解析して問題点をあぶり出す。
  • 設定することでより厳格にチェックすることができる。

質問があればコメントください。

30
23
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
30
23