PHPの世界では、バグは避けられない課題です。
しかし、「バグゼロ」はもはや夢物語ではありません。
Psalmを武器に、PHPの静的解析を駆使してコードの質を劇的に向上させることが可能になります。
この記事では、そんなPsalmについて解説しています。
本記事の内容
- Psalmとは?
- Psalmのインストール
- Psalmの動作確認
それでは、上記に沿って解説していきます。
Psalmとは?
PsalmはPHP用の静的解析ツールです。
コードの型安全性を中心に検証し、バグの発見やコード品質の向上を目的としています。
Psalmは、PHPコード内の次のような潜在的な問題を検出する能力があります。
- 型の不一致
- 未定義のメソッド呼び出し
- 配列の不適切な使用
Psalmを使用することで、開発者はコードの問題を早期に特定し、修正することができます。
これにより、開発プロセスが円滑になり、より信頼性の高いアプリケーションを構築することが可能になります。
Psalmは高度に設定可能であり、プロジェクトの特定のニーズに合わせて分析の厳格さのレベルを調整できます。
Psalmの主な特徴は以下。
- 型推論: PsalmはPHPDocコメントや型宣言を利用して、変数や戻り値の型を推論します。
- レベル別の分析: Psalmはエラーを異なる深刻度のレベルで報告し、プロジェクトに合わせて分析の厳格さを調整できます。
- 自動修正の提案: 一部の問題については、Psalmは修正を自動的に提案することがあります。
- プラグイン機能: 追加の検出ルールを提供するため、カスタムプラグインを統合できます。
- 継続的インテグレーション: CIツールと連携して、コード変更時に自動で解析を行えます。
静的解析は、コードベースの品質を維持するための重要なプラクティスです。
Psalmを活用することで、エラーを事前に発見し修正でき、より堅牢で安全なPHPアプリケーションの開発を支援します。
Psalmのインストール
Psalmの最新バージョンは、5.23.1となります。
最新版をインストールするには、PHP 7.4以降が必要です。
インストールには、Composerを利用します。
一般的には、以下のコマンドを利用してインストールすることになります。
composer require --dev vimeo/psalm
ただ、既存の環境へのインストールは簡単ではないかもしれません。
既存プロジェクトの依存パッケージと衝突することがあり得るからです。
そのような場合は、Pharを利用すれば解決できます。
wget https://github.com/vimeo/psalm/releases/latest/download/psalm.phar chmod +x psalm.phar ./psalm.phar --version
Windowsであれば、次のようなコマンドとなります。
wget https://github.com/vimeo/psalm/releases/latest/download/psalm.phar -o psalm.phar php ./psalm.phar --version
インストールできたら、確認しましょう。
Composerでインストールした場合は、以下コマンドで確認できます。
> .\vendor\bin\psalm --version Psalm 5.23.1@8471a896ccea3526b26d082f4461eeea467f10a4
Pharを利用する場合は、以下。
> php ./psalm.phar --version Psalm 5.23.1@8471a896ccea3526b26d082f4461eeea467f10a4
Psalmの動作確認
Psalmを利用するためには、まず初期化の処理が必要です。
./vendor/bin/psalm --init
初期化により、psalm.xmlファイルが作成されます。
psalm.xml
<?xml version="1.0"?>
<psalm
errorLevel="1"
resolveFromConfigFile="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
findUnusedBaselineEntry="true"
findUnusedCode="true"
>
<projectFiles>
<file name="vendor/autoload.php" />
<file name="vendor/composer/autoload_classmap.php" />
<file name="vendor/composer/autoload_files.php" />
<file name="vendor/composer/autoload_namespaces.php" />
<file name="vendor/composer/autoload_psr4.php" />
<file name="vendor/composer/autoload_real.php" />
<file name="vendor/composer/autoload_static.php" />
<file name="vendor/composer/ClassLoader.php" />
<file name="vendor/composer/installed.php" />
<file name="vendor/composer/InstalledVersions.php" />
<ignoreFiles>
<directory name="vendor" />
</ignoreFiles>
</projectFiles>
</psalm>
このファイルは、自分で作成することも可能です。
<?xml version="1.0"?>
<psalm>
<projectFiles>
<directory name="src" />
</projectFiles>
</psalm>
対象のディレクトリやファイルは、に記入します。
今回は、「 <directory name=”src” /> 」を追加しましょう。
実際にsrcディレクトリを作成して、そこにPHPのファイルを保存します。

test.php
<?php
function sayHello(string $name): string {
return "Hello, " . $name;
}
echo sayHello(42);
?>
準備ができたので、解析してみましょう。
./vendor/bin/psalm
そうすると、以下のようなエラーが表示されます。

型の不一致が原因となっています。
test.phpを修正します。
文字型に変更です。
echo sayHello("42");
再度、解析するとエラーがなくなっています。



