PHP
Emacs
Vim
PHPStan

PHPで開発が捗るリアルタイムエラーチェック

Pythonでも型チェックが捗ると噂をきいたのでPHPの環境構築について書きます。ちょっと眠いので簡潔に… もしわからないことがあったら回答するのでコメントで聞いて1

得られる利益

関数名を間違ってることに気付いたり
スクリーンショット 2018-07-31 01.53.12.png

変な型どうしで計算してることに気付いたり
スクリーンショット 2018-07-31 01.54.54.png

うっかり変な値をreturnしようとしたり
スクリーンショット 2018-07-31 02.01.59.png

そんな問題に編集中に気付けるよ。

画面はVimだけど、ほかのエディタでもいいよ。

事前準備

  1. PHP 7.1+
    • macOSなら brew install php とかでもいいです (システムに最初から入ってる/usr/bin/pythonは不可)
  2. Composer
  3. COMPOSER_HOMEPATHを通す
    • PATH=$HOME/.composer/vendor/bin:$PATH みたいな行をシェルの設定ファイル(~/.bashrcとか)に書く

PHPStanのインストール

composer global require phpstan/phpstan-shim
  • 既にPsySHなどのPHP-Parserを使ったパッケージがインストール済でnikic/php-parser:3.1.5などが残存してる場合はインストールに失敗しやすいので注意
  • composer global remove psy/psysh nikic/php-parser などで一旦外すとスムーズ
    • そのあとで composer global require psy/psyshのように入れ直す

プロジェクトの設定

Composerがベースのプロジェクトの場合は、こういうファイルを用意します。

phpstan.neon.dist
parameters:
  level: 3
  bootstrap: %rootDir%/vendor/autoload.php

詳しくは@HirakuさんのPHPStanで始めるPHPのための静的解析とかを読んでください。

エディタの設定

Vim

ALEで一発です。

Emacs

flycheck-phpstanパッケージを入れてinit.elとかに設定を書いてください。

init.el
(defun my-php-mode-hook ()
  "My PHP-mode hook."
  (require 'flycheck-phpstan)
  (flycheck-mode t)
  (flycheck-select-checker 'phpstan))

(add-hook 'php-mode-hook 'my-php-mode-hook)

Visual Studio Code

私は使ったことはないですがvscode-phpstanってやつがあるらしいです。 (未検証)

まとめ

PHPStanの力があれば、ハイエンドなエディタなら割と簡単にIDE(なんとかストーム)に近い領域までいけるぞ。

この記事は手抜きですが、この記事を書いた人間の睡眠不足に報いるつもりのある型は https://www.pixiv.net/fanbox/creator/105589 を購読するEmacsやPHPの記事を書くモチベーションになります。

脚注


  1. こう書いて実際に質問を受けた経験はあまりないのですが、わからないことやトラブルがあったら記事のコメントでもTwitterのDMでもSlackでもいいので質問してね