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");
再度、解析するとエラーがなくなっています。