閉じる

PHP_CodeSniffer & WordPressコーディングスタンダードで効率よくコードをチェック


今回はPHP CodeSnifferを使ってWordPressのコーディングチェックと修正を効率良く行う方法をご紹介します。

コーディング規則に従っているかチェックするのを目視で確認していくのはけっこう大変です。PHP CodeSnifferを使えば誤っている箇所を指摘してくれるので効率よくコードを修正することができます。
ちなみに「Sniffer」とは嗅覚探知機の意味だそうです。名前の通りPHP Codeのエラーを探索してくれます。

Home Brewのインストール

PHPのパッケージ管理システムComposerをHome Brewを使ってインストールします。

まずはBrewのインストールからやっていきましょう。以下のコマンドでインストールできます。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Composerのインストール

続いてComposerのインストールを行います。以下のコマンドを実行します。

Composerのインストール

brew install homebrew/php/composer

完了しました。

PHP_CodeSnifferのインストール

続いてPHP_CodeSnifferをインストールしていきます。以下のコマンドを実行してみましたがエラーが出力されてしまいました

composer global require 'squizlabs/php_codesniffer=*'

エラー内容は以下のとおり。

Installation failed, deleting ./composer.json.

[Composer\Downloader\TransportException]  
Content-Length mismatch

「composer diag」コマンドで原因を調査します。

composer diag

「pub key(公開鍵)がないからcomposer self-update 実行して設定してください」とのことです。

Checking pubkeys: FAIL
Missing pubkey for tags verification
Missing pubkey for dev verification
Run composer self-update --update-keys to set them up
Checking composer version: FAIL

以下のサイトからcompserの公開鍵を取得します。

Composer Public Keys / Signatures

「Dev / Snapshot Public Key」と「Tags Public Key」がありますので両方共コピーしておきましょう。

取得後以下のコマンドを実行します。

composer self-update --update-keys

Dev / Snapshot Public Keyを求められるので先ほどのページからコピーして入力します。

※「—–BEGIN PUBLIC KEY—–」から「—–END PUBLIC KEY—–」まで全て含めて入力します。

Enter Dev / Snapshot Public Key (including lines with -----): Dev / Snapshot Public Keyを入力

Tags Public Keyを求められるので先ほどコピーしておいたTags Public Keyを入力します。

※「—–BEGIN PUBLIC KEY—–」から「—–END PUBLIC KEY—–」まで全て含めて入力します。

Enter Tags Public Key (including lines with -----):  Tags Public Keyを入力

設定ができたので、再度以下のコマンドを実行します。実行すると成功しました。

composer global require 'squizlabs/php_codesniffer=*'

GitHubからWordPress コーディングスタンダードを取得し、インストール

次にWordPressコーディングスタンダードでチェックできるように、GitHubからWordPress コーディングスタンダードを取得し、インストールしていきます。

GitHubにSSHで接続するための設定が必要になります。
詳しくはこちらの記事を参考にして下さい。

GitHubからWordPress コーディングスタンダードを取得し、~/wpcsに保存します。

sudo git clone git@github.com:WordPress-Coding-Standards/WordPress-Coding-Standards.git ~/wpcs

取得したWordPress コーディングスタンダードをPHP CodeSnifferで使えるように設定していきます。

以下のコマンドを実行してPHP Codesnifferに先ほど取得したWordPressコーディングスタンダードをインストールします。

phpcs --config-set installed_paths ~/wpcs

パスを通すため、環境変数 PATHを設定

Compserのコマンド群は.composer/vendor/bin に配置されるので、パスを通すため .bash_profileに環境変数を設定します。

.bash_profileを編集します。

vi ~/.bash_profile

.bash_profileに以下の行を追加して保存し、一旦ログアウトし、再度ログインします。

export PATH=~/.composer/vendor/bin:$PATH

以下のコマンドで確認します。

phpcs -i

以下の様に表示されればインストール成功です。

The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz, Zend, WordPress, WordPress-Core, WordPress-Docs, WordPress-Extra and WordPress-VIP

PHP CodeSniffer使い方

以下のコマンドでWordPressコーディングスタンダードに準拠しているかをチェックできます。ディレクトリも指定でき、何も指定しないとカレントディレクトリ内が対象になります

ファイル数が多いとかなり時間がかかるので、そういった場合は特定のファイルを指定したほうが良さそうです。

phpcs -p -s -v --standard=WordPress ファイル名やディレクトリ

実行結果を見てみると該当の行番号とエラー内容が表示されます。エラー内容に従ってコードを修正することでWordPressコーディングスタンダードに準拠したコードになります。

----------------------------------------------------------------------
FOUND 34 ERRORS AND 1 WARNING AFFECTING 13 LINES
----------------------------------------------------------------------
  2 | ERROR   | [ ] You must use "/**" style comments for a file
    |         |     comment (Squiz.Commenting.FileComment.WrongStyle)
  2 | ERROR   | [ ] Empty line required before block comment
    |         |     (Squiz.Commenting.BlockComment.NoEmptyLineBefore)
 32 | ERROR   | [x] Expected 1 spaces after opening bracket; 0 found
    |         |     (PEAR.Functions.FunctionCallSignature.SpaceAfterOpenBracket)
 32 | ERROR   | [x] Expected 1 spaces before closing bracket; 0 found
    |         |     (PEAR.Functions.FunctionCallSignature.SpaceBeforeCloseBracket)
 32 | ERROR   | [x] PHP keywords must be lowercase; expected "or" but
    |         |     found "OR" (Generic.PHP.LowerCaseKeyword.Found)
 36 | ERROR   | [x] Expected 1 spaces after opening bracket; 0 found
    |         |     (PEAR.Functions.FunctionCallSignature.SpaceAfterOpenBracket)

中略
----------------------------------------------------------------------
PHPCBF CAN FIX THE 30 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------

phpcbfコマンドで自動整形

PHP CodeSnifferのバージョン2からphpcbfというツールが追加されました。こちらのコマンドを実行するとエラー内容を修正し保存してくれます

ファイルが保存されてしまうので実行の際は注意しましょう

先ほどのファイルで実行してみます。

phpcbf -p -s -v --standard=WordPress ファイル名

実行した後にもう一度PHP CodeSnifferでチェックします。

実行前

----------------------------------------------------------------------
FOUND 34 ERRORS AND 1 WARNING AFFECTING 13 LINES
----------------------------------------------------------------------

実行後

----------------------------------------------------------------------
FOUND 4 ERRORS AND 1 WARNING AFFECTING 3 LINES
----------------------------------------------------------------------

エラーが34個から4個に大幅に減っているのがわかります。

しかし、変な場所で改行したりなど、うまく調整してくれない場合もあるので、実行後に確認しましょう。

まとめ

これでPHPのコードを効率的にチェックができるようになります。さらに便利にPHP CodeSnifferを使うため、次回はSublimeTextでリアルタイムにチェックする方法をご紹介します

参考サイト

PHP_CodeSnifferを使ってWordPressのプラグインやテーマがコーディングスタンダードに準拠しているかチェックする
パッケージ管理システム Homebrew
Home Brew
MacにHomebrewでComposerをインストールしました
【PHP】Composer がupdating dependencies あたりでフリーズする

コメントを残す