PhpStorm

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) 設定画面から、言語フレームワーク > PHP > 品質ツール を選択する。

Phpstorm 品質ツール

(2) Code Sniffer欄の...をクリックし、Code Sniffer設定画面を開く

Phpstorm Quality Tools 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) 設定画面から、エディター > インスペクション を選択する。

Phpstorm インスペクション設定画面

(7) 中央の選択欄から、PHP > Quality Tools を開き、「PHP Code Sniffer 検証」にチェックを入れる。

Phpstorm Code Sniffer 検証

(8) オプションのCoding stabdardから、WordPressを選択する。(Wordpressの規約チェックを行う場合)

Phpstorm Code Sniffer WordPress

 

使ってみる

ここまでの設定を行うと、Code Snifferが自動で検証してくれます。

そして表示された、悲しいメッセージ…

クライアント

phpcs:Too many messages per file,only first 50 errors/warnings are shown

ファイルごとのメッセージが多すぎる、最初の50個のエラー/警告のみが表示されます

自動で修正する

手作業での修正は時間がかかってしまうので、Code Snifferのphpcbfを使って、自動整形を行います。

phpcbfコマンドは、Code Sniffer設定画面で、設定してあります。
確認してみてください。

自動整形は、コードのクリーンアップで行います。

メニュー:コード(C) > コードのクリーンアップ(C)

PhpStorm コードのクリーンアップ

どの範囲でクリーンアップするか指定する画面がでるので、指定して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. ツールの編集画面

PhpStorm ツールの編集 CodeSniffer整形設定

名前、説明:適当に!

プログラム: pre_phpcbf.bat

引数:--standard=WordPress --encoding=utf-8 --extensions=php,js,css,inc "$FilePath$"

作業ディレクトーリー:作成した作業フォルダ

(3) メニュー:ツール > External Tools > 作成したツールを実行

PhpStorm 外部ツール 実行

(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

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。