PHP
Emacs

emacs で PHP CodeSniffer を使う (Windows)

More than 3 years have passed since last update.

概要

「emacs で PHP_CodeSniffer を使って CakePHP のコーディング規約の逐次チェックをする方法」なんていくらでも載ってるだろうと思ったら、意外と日本語の情報が少なかったのでメモします。

Windows 7 での設定方法を書きますが、後半の emacs 周りの設定は他の OS でも同じだと思います。

手順

PHP のインストール

それすらまだだったので、そこから書きます。

  1. http://windows.php.net/download/ から zip をダウンロード
    • 安定してそうなので VC11 x86 Thread Safe 版を落とした
  2. zip ファイルを好きな場所に解凍
    • 参考サイトの例にならってCドライブ直下に展開 & C:\php にリネームした
  3. 環境変数 PATH に今配置したフォルダのパスを追加
  4. 同フォルダ内にある php.ini-developmentphp.ini にリネームしてコピー
    • php.ini-development は php の設定ファイルの開発環境向けスケルトン

以上が正しくできていれば、コマンドプロンプトで % php -v が実行できるはずです。

pear のインストール

ruby でいう gem みたいなものを使えるようにします。

  1. 先の php インストールフォルダ内に pear フォルダを作る
  2. http://pear.php.net/go-pear.phar を pear フォルダにダウンロード
  3. コマンドプロンプトで pear フォルダに移動し、先のファイルを php で実行
    • % php go.pear.phar
    • 全部デフォルトのまま or YES を選択
  4. 出力結果に書いてある通りに pearPEAR_ENV.reg をダブルクリック

以上が正しくできていれば、コマンドプロンプトで pear フォルダから % pear -V が実行できるはずです。

PHP_CodeSniffer と CakePHP のコーディングルールのインストール

  • pear フォルダで以下を実行:
% pear channel-discover pear.cakephp.org
% pear install cakephp/CakePHP_CodeSniffer

この作業で PHP_CodeSniffer と CakePHP のコーディング規約 (Standard) が同時に入ります。むしろこうしないと PHP_CodeSniffer のバージョンが合わなくて詰みます。

以上が正しくできていれば、コマンドプロンプトで pear フォルダから % phpcs -i が実行できるはずです。使用できるルールとして CakePHP が含まれているはずです。

flymake-phpcs のインストール

emacs に flymake-phpcs をインストールします。package.el が入っていれば、 M-x package-list-packages を実行して、リストから flymake-phpcs を選べば簡単にインストールできます。詳しい方法やそれ以外のインストール方法はすいませんがググってください。

インストールできたら、 .emacs に以下の設定を追記します:

(require 'flymake-phpcs)
(add-hook 'php-mode-hook 'flymake-phpcs-load)
(custom-set-variables
 '(flymake-phpcs-standard "CakePHP"))

(custom-set-variables
 '(flymake-phpcs-command "C:/php/pear/phpcs"))

php をCドライブ直下以外にインストールした人や、Windows 以外の人は適宜パスを修正してください。

以上で作業完了です。設定を再読み込みして php のコードを開いてみてください。適当に規約を破ると、そのあたりが赤っぽくなるはずです。動かない場合、もしかしたら別途 php-mode を入れる必要があるかもしれません。

さらなる設定

C++でプログラミングコンテストをする時用のflymakeの設定 - Qiita を参考に、次のエラー箇所にジャンプするキーバインドを設定したり、ジャンプ時にエラーの原因をミニバッファに表示したりするととても便利です(C-e を上書きするのはさすがにキツいと思いますが・・・)。

参考