PhpStormでCodeSnifferを設定し使ってみる(Windows版)
更新日:2019/08/24
最近WordPressのプラグインを作成し始めました。
最終的にはWordPressの公式ディレクトリに登録しようと思うので、WordPress コーディング規約を守らないといけません。
そこでCodeSnifferをインストールし、普段使っているPhpStormで使用できるように設定を行いました。
仕方がないけれど、Composerをインストールする
調べてみると、PHP CodeSnifferをインストールするには、Composerが必要なようです。
まじかー
Windowsではあまり使わないので入れたくないのですが、仕方がありません。
入れます。
ComposerのWindowsへのインストールは、長くなるので、こちらの記事に分けました。
CodeSnifferをインストール
ではサクッと、CodeSnifferをインストールしてみましょう。
コマンドプロンプトから、次のコマンドを実行します。
squizlabs/PHP_CodeSniffer | GitHubにある、Composerでのインストール方法をそのまま実行します。
> composer global require "squizlabs/php_codesniffer=*"
Changed current directory to C:/Users/aaaa/AppData/Roaming/Composer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing squizlabs/php_codesniffer (3.4.2): Downloading (100%)
Writing lock file
Generating autoload files
少し時間がかかります…
CodeSnifferどこにダウンロードされた?
どうやら、C:\Users\ユーザーフォルダ\AppData\Roaming\Composer\vendorにダウンロードされたようです。
実際に動作するか確認してみましょう。
>phpcs --version
PHP_CodeSniffer version 3.4.2 (stable) by Squiz (http://www.squiz.net)
バージョン情報が表示されれば、インストールされています。
WordPressプラグインやテーマを開発する場合
WordPressは独自のコーディング規約があるので、CodeSnifferもそれに合わせたチェックをする必要があります。
そのために、Wordpressのコーディング規約をインストールします。
WordPress Coding Standards for PHP_CodeSniffer
(1) コマンドプロンプトを開く
(2) ダウンロードするフォルダを作成して、その中に移動する。
d:\> mkdir wpcs
d:\> cd wpcs
(3) composerでダウンロードする
d\wpcs > composer create-project wp-coding-standards/wpcs --no-dev
Installing wp-coding-standards/wpcs (2.1.1)
- Installing wp-coding-standards/wpcs (2.1.1): Downloading (100%)
Created project in D:\wpcs\wpcs
Loading composer repositories with package information
Updating dependencies
Package operations: 1 install, 0 updates, 0 removals
- Installing squizlabs/php_codesniffer (3.4.2): Loading from cache
Writing lock file
Generating autoload files
Created project in D:\wpcs\wpcs
wpcsフォルダの中に、wpcsフォルダができてしまった…
ダウンロードしただけだと思うので、 D:\wpcs\wpcsの中身を、 D:\wpcsに移動しました。
(4) CodeSnifferに、Wordpressのコーディング規約を認識させる。
d:\wpcs>phpcs --config-set installed_paths d:\wpcs <= 規約が入っているパス
Using config file: C:\Users\aaaa\AppData\Roaming\Composer\vendor\squizlabs\php_codesniffer\CodeSniffer.conf
Config value "installed_paths" added successfully
(5) 確認
d:\wpcs>phpcs -i
The installed coding standards are MySource, PEAR, PSR1, PSR12, PSR2, Squiz, Zend, WordPress, WordPress-Core, WordPress-Docs and WordPress-Extra
WordPressが追加されていればOK
Code SnifferをPhpStormに設定する
(1) 設定画面から、
> > を選択する。(2) Code Sniffer欄の...をクリックし、Code Sniffer設定画面を開く
(3) PHP Code Sniffer pathに、「phpcs.bat」を入力
(4) 検証を押し、次のように表示されたらOK
OK, PHP_CodeSniffer version X.X.X by Squiz (http://www.squiz.net)
表示されない場合、phpcs.batへのパスが通っていない可能性が高い。
パスを通すか、フルパスで指定する。
フルパス:
C:\Users\ユーザーフォルダ\AppData\Roaming\Composer\vendor\bin\phpcs.bat
(5) Path to phpcbfに、「phpcbf.bat」または、phpcbf.batへのフルパスを指定する。
(6) 設定画面から、
> を選択する。(7) 中央の選択欄から、
> を開き、「PHP Code Sniffer 検証」にチェックを入れる。(8) オプションのCoding stabdardから、WordPressを選択する。(Wordpressの規約チェックを行う場合)
使ってみる
ここまでの設定を行うと、Code Snifferが自動で検証してくれます。
そして表示された、悲しいメッセージ…
phpcs:Too many messages per file,only first 50 errors/warnings are shown
ファイルごとのメッセージが多すぎる、最初の50個のエラー/警告のみが表示されます
自動で修正する
手作業での修正は時間がかかってしまうので、Code Snifferのphpcbfを使って、自動整形を行います。
phpcbfコマンドは、Code Sniffer設定画面で、設定してあります。
確認してみてください。
自動整形は、コードのクリーンアップで行います。
メニュー:
>どの範囲でクリーンアップするか指定する画面がでるので、指定してOKを押します。
これで自動整形される…はずです。
OneDrive管理下のフォルダはNG
私の場合、ソースをOneDrive管理下のフォルダに置き、自動でバックアップできるようにしています。
しかしPHPは、OneDrive管理下のフォルダにアクセスできないようです。
回避策として、一度別のフォルダにコピーしてからphpcbfコマンドを実行し、終わったらもとに戻します。
(1) 作業用のフォルダを作成
OneDrive外で、確実にアクセスできるフォルダを作成する
(2) 次のファイルを、パスの通っているComposer\vendor\binフォルダに作成します。
ファイル名:pre_phpcbf.bat
@echo off
set FULLPARAM=%*
set BACHTMPDIR=d:\temp\ <=作業フォルダ。適宜変更
call :getfname %*
setlocal ENABLEDELAYEDEXPANSION
set FULLPARAM=!FULLPARAM:%PHPFILEFULL%=%BACHTMPDIR%%PHPFILE%!
set PHPFILEFULL=%PHPFILEFULL:/=\%
@echo on
copy /Y %PHPFILEFULL% %BACHTMPDIR%
call phpcbf.bat %FULLPARAM%
@echo on
copy /Y %BACHTMPDIR%%PHPFILE% %PHPFILEFULL%
goto :eof
:getfname
set PHPFILEFULL=%~1
set PHPFILE=%~nx1
set PHPFILEPATH=%~dp1
shift
if not "%~1"=="" goto getfname
goto :eof
(2) 外部ツールに登録
1.
> >2.+で追加
3. ツールの編集画面
名前、説明:適当に!
プログラム: pre_phpcbf.bat
引数:--standard=WordPress --encoding=utf-8 --extensions=php,js,css,inc "$FilePath$"
作業ディレクトーリー:作成した作業フォルダ
(3) メニュー:
> > を実行(4) phpcbf.batが実行されます。
ただし、作成したバッチファイルはCode Snifferの終了コードなどをチェックしていないので、なんらかの問題がでるかもしれません。
実行後はソースを確認してください。
Code Sniffer設定画面のPHP Code Sniffer pathをpre_phpcbf.batに変更ししてもいいのですが、PhpStormが他にも何か作業をしているようで、時々めちゃくちゃ遅くなります。
外部ツールとして使用したほうが、良さそうです。
バッチファイルの解説
蛇足ですが、先ほどのバッチファイルの解説をしておきます。
@echo off
コマンドのメッセージ出力をオフにします
set FULLPARAM=%*
コマンドが呼び出された時の、全てのパラメーターを変数に保存しています。
phpcbf.bat --standard=WordPress --encoding=utf-8 --extensions=php,js,css,inc c:/user/aaa/OneDrive/xxx.php
青文字部分が保存されます。
set BACHTMPDIR=d:\temp\
作業フォルダを変数に保存しています。
適宜、変更してください。
(最後の\必須)
call :getfname %*
保存した全てのパラメーターから、最後のパラメータを取り出すサブルーチンを呼び出しています。
setlocal ENABLEDELAYEDEXPANSION
遅延環境変数(!)を有効にしています。
set FULLPARAM=!FULLPARAM:%PHPFILEFULL%=%BACHTMPDIR%%PHPFILE%!
実行時に受け取ったパラメータ列を置換しています。
変数の置換:
!環境変数:置換する文字=置換後の文字!
FULLPARAM:PhpStormから受け取った、全パラメータ
PHPFILEFULL:最後のパラメーター(c:/user/aaa/OneDrive/xxx.php)
BACHTMPDIR:作業フォルダ(d:\temp\)
PHPFILE:最後のパラメータからファイル名を抽出したもの(xxx.php)
つまり、
--standard=WordPress --encoding=utf-8 --extensions=php,js,css,inc c:/user/aaa/OneDrive/xxx.php
を
--standard=WordPress --encoding=utf-8 --extensions=php,js,css,inc d:\temp\xxx.php
に置換しています。
set PHPFILEFULL=%PHPFILEFULL:/=\%
c:/user/aaa/OneDrive/xxx.php
を
c:\user\aaa\OneDrive\xxx.php
に置換しています。
@echo on
ここから、コマンドのメッセージを出力する。
必要なければ削除
copy /Y %PHPFILEFULL% %BACHTMPDIR%
PhpStorm上のファイルを、作業フォルダにコピー
call phpcbf.bat %FULLPARAM%
作業フォルダにコピーしたファイルに対して、phpcbf.batを実行
@echo on
phpcbf.batでecho offされているので、onしておく。
copy /Y %BACHTMPDIR%%PHPFILE% %PHPFILEFULL%
処理後のファイルを、PhpStorm上にコピー
goto :eof
処理終了
:getfname
サブルーチンの開始
set PHPFILEFULL=%~1
一番目のパラメータをセット
set PHPFILE=%~nx1
一番目のファイル名をセット。
set PHPFILEPATH=%~dp1
一番目のパスをセット。
/は、\で取得される
shift
パラメーターをずらす。
(2番目のパラメーターが一番目にずれる。)
if not "%~1"=="" goto getfname
パラメーターが残っていたら、サブルーチンの最初に戻る
goto :eof
処理終了。
呼び出し元に戻る。
更新日:2019/08/24
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。