PHPコードの静的解析ツール

はい、hebiです。
PHPコードの静的解析ツール「PHPStan」を使ってみましたので記事にしたいと思います。
静的解析ツールとは
静的解析ツールは、プログラムのコードを実行せずにその品質や潜在的な問題を検出するツールです。実行せずにソースコードを解析するため、「静的」という名前が付けられています。静的解析ツールは、コードの構文エラーや型の不一致、論理的なバグなどを検出します。
静的解析ツールは、コードの実行時に発生するエラーを予測したり、潜在的なバグを事前に検出したりするのに役立ちます。これにより、ソフトウェアの品質向上や開発効率の向上を図ることができます。
今回は「PHPStan」という静的解析ツールを利用しました。
PHPStanのインストール
プロジェクトのフォルダへカレントディレクトリを変更します。
今回はXAMPPで動作確認を行ったため、以下にディレクトリを作成してディレクトリを移動しました。
mkdir C:\xampp\htdocs\my_php_project
cd C:\xampp\htdocs\my_php_project
以下のコマンドでインストールを行います。
composer require --dev phpstan/phpstan
これで、PHPStanがvendor
ディレクトリにインストールされます。
解析実行
実際にphpの解析を行ってみます。
C:\xampp\htdocs\my_php_projectに解析対象のtest.phpを準備します。
<?php
class Person {
public string $name;
public int $age;
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
public function getGreeting(): string {
return "Hello, my name is " . $this->name . " and I am " . $this->age . " years old.";
}
}
$person = new Person('John', 'a'); // 注意: ここで型の不一致があります
echo $person->getGreeting();
17行目のPersonコンストラクタの第2引数に文字列を渡すようにします。
以下のコマンドを実行して解析を行います。
C:\xampp\htdocs\my_php_project\vendor\bin\phpstan analyse --level=7 C:\xampp\htdocs\my_php_project\test.php

上記のように17行目でエラーが発生していることが分かります。
aを数値の10に変更して再解析を行うと正常となることを確認にできます。

色々なパターン
色々なパターンで確認してみます!
未定義の変数を使用
<?php
function greet() {
echo $name; // $nameは未定義ですが使用されています
}
greet();

存在しないメソッドを呼び出す
<?php
class Person {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$person = new Person('Alice');
$person->getAge(); // getAgeメソッドは存在しません

関数の引数の不足
<?php
function greet($name, $age) {
echo "Hello, $name. You are $age years old.";
}
greet('Alice'); // 引数$ageが足りません

まとめ
PHPStanは、PHPのコードに潜む問題を事前に検出する強力な静的解析ツールですバグの早期発見やコード品質の維持が可能になり、チーム全体の開発効率が向上すると感じました。ぜひ使っていきたいと思います。
最後までお読みいただきありがとうございました(^^♪