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

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

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

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

スポンサーリンク

実行環境

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

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

背景

Psalmは、PHPの静的解析ツールの一つであり、PHPコードの品質向上やバグの早期発見に役立ちます。具体的には、以下のようなメリットがあります。

  1. コード品質の向上 Psalmは、PHPコードの静的解析を行い、コード品質を向上させることができます。例えば、未定義の変数を使用した場合や、存在しないメソッドを呼び出した場合など、エラーを検出することができます。また、型の不一致や、不正な型キャストなども検出することができます。
  2. バグの早期発見 Psalmは、コード内のエラーを検出することができるため、バグを早期に発見することができます。これにより、デバッグの時間を短縮することができます。
  3. リファクタリングの支援 Psalmは、コードの解析を行うことにより、コードのリファクタリングを支援することができます。例えば、コード内で使用されていない変数やメソッドを検出することができます。また、型の不一致や、不正な型キャストなどを検出することにより、コードの安全性を向上することができます。

以上のように、Psalmを導入することで、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
    ├── mongo
    ├── mysql
    ├── mysqld-exporter
    ├── prometheus
    ├── phpstan
    │   ├── .gitignore
    │   ├── Dockerfile
    │   ├──psalm.xml
    │   └── log
    │       └── .gitkeep
    ├── redis
    ├── redis-exporter
    ├── schemaspy
    ├── web
    └── xhgui

compose.yml

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

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

psalm/Dockerfile

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

FROM ghcr.io/webfactory/psalm:latest

psalm/psalm.xml

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

<?xml version="1.0"?>
<psalm
    errorLevel="2" 
    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"
    xmlns:xi="http://www.w3.org/2001/XInclude"
>
    <projectFiles>
        <directory name="src" />
    </projectFiles>
</psalm>

設定内容については、下記の公式サイトにあります。

psalm/log/.gitkeep

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

Makefile

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

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

動作確認

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

make run_psalm

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

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

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

% make run_psalm

make: *** [run_psalm] Error 1

解説

psalmについて

Psalmは、PHPの静的解析ツールで、PHPコードの品質を向上させ、バグの発生を防止することを目的としています。以下に、Psalmの特徴や使い方について説明します。

特徴:

  • PHPDocをベースに構築された静的解析エンジンを使用しており、型の解析やコードの潜在的な問題を検出することができます。
  • エラーを返すだけでなく、解決策も提供することができます。例えば、型の不一致を検出した場合、適切な型ヒントの追加を提案することができます。
  • 設定ファイルを使用して、解析対象とするファイルやディレクトリ、除外するファイルやディレクトリなどを指定することができます。

Psalmは、PHPアプリケーションの品質を向上させるための強力なツールであり、開発効率の向上やバグの減少など、多くのメリットを提供しています。

psalm/psalm.xml

<?xml version="1.0"?>
<psalm
    errorLevel="2" 
    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"
    xmlns:xi="http://www.w3.org/2001/XInclude"
>
    <projectFiles>
        <directory name="src" />
    </projectFiles>
</psalm>

このコードは、Psalmの設定ファイル psalm.xml の例です。以下に各要素の説明を示します。

<?xml version="1.0"?> XML宣言。XMLのバージョンを指定しています。

<psalm> 設定ファイルのルート要素です。xmlns:xsixmlnsxsi:schemaLocationxmlns:xi属性があります。

errorLevel="2" エラーレベルを指定しています。ここでは、レベル2のエラーを出力するように設定しています。エラーレベルは、0から8の範囲で設定できます。0はエラーを無視することを意味し、8は全てのエラーを出力することを意味します。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 名前空間 xsi を定義しています。この名前空間は、XMLスキーマインスタンスの定義に使用されます。

xmlns="https://getpsalm.org/schema/config" 名前空間 psalm を定義しています。これにより、このファイル内のすべての要素が psalm 名前空間に属することになります。

xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" XMLスキーマ定義ファイルの場所を指定しています。ここでは、config.xsd ファイルが vimeo/psalm パッケージに含まれていることを前提に、相対パスで指定しています。

xmlns:xi="http://www.w3.org/2001/XInclude" 名前空間 xi を定義しています。これは、XInclude機能を使用するために必要です。

<projectFiles> プロジェクトのファイルを指定する要素です。ここでは、src ディレクトリ以下のファイルを対象としています。

<directory name="src" /> projectFiles 要素内の directory 要素です。name 属性に対象のディレクトリ名を指定しています。上記の例では、src ディレクトリを指定しています。

このように、設定ファイルには、エラーレベルの設定や解析対象のファイル・ディレクトリの指定など、さまざまな設定を記述することができます。

おわりに

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

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

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

よっしー
よっしー

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

コメント

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