人生リアルタイムアタック

当面はPython学習帳

MacでのPHP環境とVimでのPHP Lint環境を整える

El Capitanになったことだし、改めてPHP環境とVimでのPHP Lint環境を整える。
前提としてHomebrewはインストール済みとする。

この記事でインストールするもの。

  • PHPBrew
  • Composer
  • PHP_CodeSniffer
  • PHP Mess Detector
  • Syntastic

PHPBrew

PHPのバージョン管理の為 PHPBrew をインストールする。phpenvでもいいと思うので違いの分かる人はお好みで。

PHPBrewのインストール

$ curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
$ chmod +x phpbrew
$ sudo mv phpbrew /usr/local/bin/phpbrew
$ phpbrew init

本来はmv先は /usr/bin/ なのだが、El Capitanにアップデートしてしまったので /usr/local/bin/ にした。

.bashrc, または .zshrc にphpbrewへのPATHを追加する以下のコマンドを追加する。

source ~/.phpbrew/bashrc

PHPのインストール

$ phpbrew update # PHPバージョンリストの更新
$ phpbrew known # インストール可能なPHPバージョンリストの出力
$ phpbrew install 5.6.14 +default # PHP 5.6.14 を標準拡張モジュールのセットと共にインストールする

+defaultPHPに併せて拡張モジュールをインストール指定するオプション。phpbrew variant コマンドで拡張モジュールセットの確認が可能。
拡張モジュールがなかったり指定し忘れた場合には後述のLintツールインストール時にエラーが出る場合もある。良くわからない場合には +default を付けておく。
mysqlモジュール等が必要な場合には、+default+mysqlまたは+default+dbs などと指定するとよい。

$ phpbrew variants
Variants:
  all, apxs2, bcmath, bz2, calendar, cgi, cli, ctype, dba, debug, dom, embed,
  exif, fileinfo, filter, fpm, ftp, gcov, gd, gettext, hash, iconv, icu,
  imap, intl, ipc, ipv6, json, kerberos, mbregex, mbstring, mcrypt, mhash,
  mysql, openssl, pcntl, pcre, pdo, pgsql, phar, posix, readline, session,
  soap, sockets, sqlite, tidy, tokenizer, xml_all, xmlrpc, zip, zlib, gmp


Virtual variants:
  dbs:      sqlite, mysql, pgsql, pdo
  mb:       mbstring, mbregex
  neutral:
  default:  filter, dom, bcmath, ctype, mhash, fileinfo, pdo, posix, ipc,
            pcntl, bz2, zip, cli, json, mbstring, mbregex, calendar, sockets, readline,
            xml_all

PHPBrewでインストールしたPHPの使用

$ phpbrew use 5.6.14 # 一時的に5.6.14を利用する場合
$ phpbrew switch 5.6.14 # デフォルトで5.6.14を利用する場合
$ phpbrew list # 現在の利用バージョンを確認する

システム上のPHPを使わず、switchで最新のPHPを指定しておくといい。 各directoryでのPHPバージョン指定は開発する環境にあわせて適宜useする。

configure: error: Cannot find OpenSSL's <evp.h> が出てインストールできない場合

Yosemite以降で発生する既知の不具合の模様。El Capitanでも同様のエラーを確認。 Yosemite DP - configure: error: Cannot find OpenSSL's <evp.h> · Issue #1181 · Homebrew/homebrew-php · GitHub

下記コマンドを試す。

xcode-select --install

それでも解消されない場合には、恐らくopensslをhomebrewからインストール済みかと思うので下記を試す。

$ brew link openssl
Warning: openssl is keg-only and must be linked with --force
Note that doing so can interfere with building software.

警告の通り、

$ brew link openssl --force

を実行するとOpenSSLのエラーは解消されるはず。

configure: error: mcrypt.h not found. Please reinstall libmcrypt. が出てインストールできない場合

警告通りlibmcryptを再インストールする。

$ brew install libmcrypt

Composer

インストール

Pearはもう全く更新されてないようなのでComposerによるパッケージ管理を行う。 PHPBrewのコマンドからインストールできる。

$ phpbrew install-composer

PHP_CodeSniffer

composerからPHP_CodeSnifferをインストールする。PHP_CodeSnifferは構文チェックを中心としたLintツールとなる。 構文エラーはすべてこいつが指摘してくれるのでPHP書く人は必ず入れましょう。 Home · squizlabs/PHP_CodeSniffer Wiki · GitHub

インストール

composer global require "squizlabs/php_codesniffer=*"

PHP Mess Detector

こっちは未使用変数や、循環的複雑度が多かったり、ネストが多かったりと、構文は問題がなくてもバグの原因になりそうな箇所の警告を出してくれるLintツール。 デフォルトでは変数/クラスの名称が短かったり長かったりする場合にも警告となるが、ここはリーダブルコード的には多少長くてもよいケースもあると思うので適宜ルールをカスタマイズした方がよいかも。 PHPMD - PHP Mess Detector

インストール

composer global require "phpmd/phpmd"

Syntastic

Vimで各言語ごとにLintツールを実行してくれる Vim plugin としてSyntasticをインストールする。基本Syntasticは保存時に稼働する。

インストール

neobundleでインストールする

NeoBundle 'scrooloose/syntastic'

.vimrcへの設定

phpcsはPSR-2, phpmdは標準ルールセットでチェックするとする。

" for syntastic  -----------------------
let g:syntastic_mode_map = {
  \ 'mode': 'active',
  \ 'active_filetypes': ['php']
  \}
let g:syntastic_auto_loc_list = 1
let g:syntastic_php_checkers = ['phpcs', 'phpmd']
let g:syntastic_php_phpcs_args='--standard=psr2’

g:syntastic_php_checkers = ['phpcs', 'phpmd']phpのcheckerを配列指定している。配列の先頭から順にチェックされ、まずはphpcs。phpcsで警告が0になればphpmdと順にチェックしてくれる。

ちなみにphpcsで警告があるけれどもphpmdでチェックしたい場合には、 :Syntastic phpmd と叩けばphpmdの警告を出してくれる。

カスタムルールセットを指定する場合

それぞれXMLでの記述でルールセットを変更可能。長くなるので各ルールセットの作成は公式ドキュメントを参照。

SyntasticでのXML指定は以下のような形でパス指定する

let g:syntastic_php_phpcs_args='--standard=$HOME/.config/phpcs.xml'
let g:syntastic_php_phpmd_post_args='$HOME/.config/phpmd.xml'

これでVImで保存時に自動でLintツールが動作するようになる。

パーフェクトPHP

パーフェクトPHP