Dockerで作る開発環境:phpstanの導入

スポンサーリンク
Dockerで作る開発環境:phpstanの導入 ノウハウ
Dockerで作る開発環境:phpstanの導入
この記事は約7分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、dockerで構築した開発環境において、phpstanを導入した手順をご紹介します。

スポンサーリンク

実行環境

この記事は、特定の開発環境を前提として書かれています。もし興味がある場合は、その開発環境を構築するための説明が書かれている記事を参考にしてください。該当記事は下記になります。

ただ、この記事で紹介している修正内容がたくさんあるので、その修正を反映した最新版のプログラムをダウンロードして、参照することをおすすめします。該当のプログラムの詳細については、下記のページで確認できます。

背景

PHPstanは、静的解析ツールの1つであり、PHPのコードベースに対して静的解析を行い、タイプヒントの不一致や未定義のプロパティやメソッドなどのエラーを検出することができます。

そのため、Phanと同様にPHPstanを導入する背景には、以下のような理由が挙げられます。

  1. コード品質の向上:静的解析により、コードベースの品質を向上することができます。エラーを事前に検出することで、バグの発生を減らすことができます。
  2. リファクタリングの支援:コードベースのリファクタリング時に、変数名やメソッド名の変更がコード全体に影響を与えることがあるため、静的解析により、変更に伴う影響を事前に検出することができます。
  3. ドキュメントの生成:静的解析により、コードのドキュメントを自動生成することができます。また、コードの可読性も向上します。
  4. CI/CDパイプラインの自動化:PHPstanは、CI/CDパイプラインで自動的に実行できるため、コード品質の自動化に役立ちます。

以上のような理由から、PHPstanの導入は、PHPのコードベースの品質を向上させるために有用だと考えられます。

ディレクトリ構造

ディレクトリ構造は下記のようになっています。赤字の箇所が新規&更新、削除になります。

.
├── LICENSE
├── Makefile
├── README.md
└── app
    ├── apache-exporter
    ├── compose.yml
    ├── flyway
    ├── grafana
    ├── influxdb
    ├── k6
    ├── memcached
    ├── memcached-exporter
    ├── nginx
    ├── nginx-exporter
    ├── phan
    ├── php-fpm
    ├── php-fpm-exporter
    ├── phpstan
    │   ├── .gitignore
    │   ├── Dockerfile
    │   ├── phpstan.neon
    │   └── log
    │       └── .gitkeep
    ├── mongo
    ├── mysql
    ├── mysqld-exporter
    ├── prometheus
    ├── redis
    ├── redis-exporter
    ├── schemaspy
    ├── web
    └── xhgui

compose.yml

下記の内容をファイル(compose.yml) 318-326 行目に追加します。

  phpstan-cmd:
    build: ./phpstan
    container_name: phpstan
    volumes:
      - ./php-fpm/CodeIgniter-3.1.13/application:/app/src
      - ./phpstan/phpstan.neon:/app/phpstan.neon
    profiles:
      - phpstan

phpstan/Dockerfile

下記の内容で新規ファイル(phpstan/Dockerfile) を作成します。

FROM phpstan/phpstan:latest

phpstan/phpstan.neon

下記の内容で新規ファイル(phpstan/phpstan.neon) を作成します。

parameters:
    level: 0
    paths:
        - %currentWorkingDirectory%/src

phpstan/log/.gitkeep

空で新規ファイル(phpstan/log/.gitkeep) を作成します。

Makefile

下記の内容をファイル(Makefile) 72-77 行目に追加します。

# 静的解析の実施
.PHONY: run_phpstan
run_phpstan:
	cd $(WOKR_DIR) \
	&& docker compose run --rm phpstan-cmd > ./phpstan/log/analysis_$(RUN_DATETIME).log

動作確認

下記のコマンドを実行して、サービスを起動します。

make run_phpstan

下記のファイルができていることを確認します。

app/phpstan/log/analysis_(実行日時).log

ただ、makeコマンドを実行すると下記のようにエラーが表示されますが、原因解明には至っていないです。気になる方は、docker compose コマンドを実行してもらえればと思います。makeコマンドで実行した結果とdocker compose コマンドで実行した結果は同じでした。

% make run_phan   
cd ./app \
        && docker compose run --rm phpstan-cmd > ./phpstan/log/analysis_20230430_231212.log
   analyze 
make: *** [run_phan] Error 1

解説

phpstanについて

PHPstanは、PHPの静的解析ツールの1つです。PHPのコードベースに対して静的解析を行い、タイプヒントの不一致や未定義のプロパティやメソッドなどのエラーを検出することができます。

PHPstanは、コマンドラインツールとして実行され、コードベースを解析して、検出した問題をレポートします。PHPのバージョン7.1以上をサポートしており、PSR-4やComposerなどの一般的なPHPのツールやフレームワークとも互換性があります。

PHPstanは、さまざまな機能を提供しています。例えば、次のような機能があります。

  • 継承元のクラスから継承されたメソッドの実装の不一致を検出する機能
  • インターフェイスを実装していないクラスの検出
  • メソッドや関数の引数や戻り値の型の不一致の検出
  • プロパティやメソッドの存在しない変数の参照の検出

PHPstanは、PHPのコード品質を向上するために役立ちます。エラーを事前に検出することで、バグの発生を減らし、コードの品質を向上させることができます。また、ドキュメントの生成やCI/CDパイプラインの自動化にも役立ちます。

phpstan/phpstan.neon

parameters:
    level: 0
    paths:
        - %currentWorkingDirectory%/src

この設定ファイルでは、parametersキーを持つ配列が定義されており、その中にlevelpathsという2つのキーを持つ連想配列が定義されています。

  • levelキーは、値が0に設定されています。この値は、phpstanというPHPの静的解析ツールの設定ファイルで使用されるものであり、0は、エラーの検出レベルが最小であることを示しています。
  • pathsキーは、値が配列で設定されています。この値は、phpstanの解析対象とするパスを定義しており、%currentWorkingDirectory%/srcは、カレントディレクトリのsrcディレクトリを解析対象とすることを意味しています。

つまり、この設定ファイルでは、phpstanを使用して、カレントディレクトリのsrcディレクトリを最小限のエラー検出レベルで解析することが設定されています。

おわりに

今日は、dockerで構築した開発環境にphpstanを導入しました。ぜひ、品質向上等に使用してみてください。

今回使用したファイルは下記のGitHubにタグ付けしています。

もし、質問等あればコメントください。確認後、ご連絡いたします。随時、エンジニア案件も相談可能ですので、よろしくお願いいたします。

よっしー
よっしー

また明日お会いしましょう!

コメント

タイトルとURLをコピーしました