はじめに
普段 WSL2 上に PHP と Composer、 PHPStan、 PHP CodeSniffer をインストールし、 VSCode の settings.json でそれらの実行ファイルを指定して静的解析エラーを表示していました。
・・・が、 PC 入れ替えのタイミングで、 WSL2 をキレイに保ちたい ( = PHP 等ほかソフトをインストールしたくない) と思い、 Docker コンテナ上の PHP で静的解析エラーを VSCode 上に表示できないかと調査を始めました。
結論
以下の設定で可能。
1. VSCode 張機能をインストール
- PHPStan
- PHP Sniffer & Beautifier Docker
2. VSCode settings.json 設定追加
{
// PHPStan の設定
"phpstan.singleFileMode": true,
"phpstan.binPath": "backend/vendor/bin/phpstan", // VSCode のワークスペースルートから見た実行ファイルのパス
"phpstan.binCommand": [],
"phpstan.configFile": "backend/phpstan.neon",
"phpstan.paths": {
"backend": "/src" // VSCode のワークスペースルートから見た、 Docker コンテナとマウントしているパス
},
"phpstan.dockerContainerName": "backend-php", // Docker コンテナ名
"phpstan.rootDir": "",
"phpstan.options": [],
"phpstan.enableStatusBar": true,
"phpstan.memoryLimit": "1G",
"phpstan.enabled": true,
"phpstan.projectTimeout": 300000,
"phpstan.timeout": 300000,
"phpstan.suppressTimeoutMessage": false,
"phpstan.showProgress": false,
"phpstan.showTypeOnHover": false,
"phpstan.enableLanguageServer": false,
"phpstan.ignoreErrors": [
"Xdebug: .*"
],
"phpstan.suppressWorkspaceMessage": false,
"phpstan.pro": false,
"phpstan.tmpDir": "",
"phpstan.checkValidity": false,
// PHP CodeSniffer の設定
"phpsab.docker.dockerEnabled": true,
"phpsab.docker.dockerContainer": "backend-php", // Docker コンテナ名
"phpsab.docker.dockerWorkspaceRoot": "/src", // Docker コンテナとマウントしているパス
"phpsab.docker.dockerExecutablePathCBF": "/src/vendor/bin/phpcbf", // Docker コンテナ内から見た実行ファイルのパス
"phpsab.docker.dockerExecutablePathCS": "/src/vendor/bin/phpcs",
"phpsab.docker.autoRulesetSearch": false,
"phpsab.docker.standard": "CakePHP" // WordPress のフォーマッターで見る時は WordPress に書き換える
}
前提
- Docker コンテナ内に PHP、 Composer、 PHPStan、 PHP CodeSniffer がインストールされている。
- VSCode ワークスペースルート配下の PHP ファイルすべてに Linux 読み取り・書き込み権限がある。
sudo chmod -R ogu+rw ./
- VSCode に PHPStan、 PHP CodeSniffer の実行権限がある。
sudo chmod -R 777 backend/vendor
確認したリポジトリ
※ 注意点
Docker コンテナ上で VSCode が静的解析を実行する都合上、VSCode のターミナルにて docker compose up -d
した後に Ctrl + Shift + p
した後、「開発者: ウィンドウの再読み込み」を選択する必要がある。
さいごに
これで WSL2 には PHP をインストールせずとも PHP の静的解析を実行できるようになりました!
この記事が他のエンジニアの助けになれば幸いです。