PHP

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

hebishima.shogo

はい、hebiです。
PHPコードの静的解析ツール「PHPStan」を使ってみましたので記事にしたいと思います。

スポンサーリンク

静的解析ツールとは

静的解析ツールは、プログラムのコードを実行せずにその品質や潜在的な問題を検出するツールです。実行せずにソースコードを解析するため、「静的」という名前が付けられています。静的解析ツールは、コードの構文エラーや型の不一致、論理的なバグなどを検出します。

静的解析ツールは、コードの実行時に発生するエラーを予測したり、潜在的なバグを事前に検出したりするのに役立ちます。これにより、ソフトウェアの品質向上や開発効率の向上を図ることができます。

今回は「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の解析を行ってみます。

解析対象の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のコードに潜む問題を事前に検出する強力な静的解析ツールですバグの早期発見やコード品質の維持が可能になり、チーム全体の開発効率が向上すると感じました。ぜひ使っていきたいと思います。

最後までお読みいただきありがとうございました(^^♪

スポンサーリンク
ABOUT ME
hebi
hebi
エンジニア
フルスタックエンジニアとして活躍中。
HTML5プロフェッショナル認定Level1、Level2所持者です。

未経験の方でも簡単にプログラミングを学べるようにと情報を発信しております。
記事URLをコピーしました