"BOKU"のITな日常

還暦越えの文系システムエンジニアの”BOKU”は新しいことが大好きです。

PHPの規約チェックのため、Brakets1.14で「PHP_CodeSniffer」を使う/Windows10

PHPのコードも「標準規約」に従って書くのは当然・・ですが・・手作業・目検査では不可能ですから、「PHP_CodeSniffer」+Brakets1.14で環境を作ります。

Windows10環境+XAMPP環境です。

f:id:arakan_no_boku:20190922143447p:plain

 

はじめに

 

PHPのコードの書き方にも「標準規約」ができつつあります。 

PHP The Right Wayの「コーディングスタイル」の章によれば、

ja.phptherightway.com

PSR-1、PSR-2、そしてPSR-4はコーディングスタイルを扱っている。

これって要するに、 Drupal や Zend、Symfony、Laravel、CakePHPphpBBAWS SDKFuelPHPLithium などのプロジェクトが採用しつつある規約をまとめただけのものなんだ。

とあります。

今や、オープンソースで個人が書いたソースでも、GitHubなんかを通じて、誰が見るかわからない時代ですから、いい加減なコーディングスタイルで書いていると、ちょっと恥ずかしいのは間違いないです。

だから、

PHP のコードを書くときには、よく知られた何らかの標準規約に従うべきだ。

ということなのでしょうね。

まあ、自分もPythonなら標準規約(PEP8)にそって書くために、チェッカーや自動整形ツールを使うのは、もう意識するまでもないくらい普通のことです。

当然、PHPでも・・ですね。

PHPは標準規約の候補がいくつかあってややこしいけど、デファクトスタンダードになりつつある「PSR-1、PSR-2、そしてPSR-4」にしようと思います。

といっても。

  • PSR-1: Basic Coding Standard
  • PSR-2: Coding Style Guide
  • PSR-4: Autoloader

 なので、エディタで編集中にチェックするのはPSR1とPSR2ということになりますが。

 

ツールは「PHP_CodeSniffer」を使う

 

やりたいことは。

  • 標準規約に従っているかのチェックを、エディタで編集中タイムリーにする
  • ソースコードを一括して標準規約にあわせて整形する

の2つです。

PHP The Right Wayに

PHP_CodeSnifferを使えば、 自分のコードがこれらの標準のどれかひとつに準拠しているかどうかを確認できる。

 とあるので、PHP_CodeSnifferを使うことにしました。

そして、コードを自動的に修復するツールには2つの選択肢が書かれています。

PHP Coding Standards Fixerがそのひとつで、これはきちんとテストされているコードだ。
もうひとつの選択肢は PHP Code Beautifier and Fixer で、これはPHP_CodeSnifferに含まれている。これを使って、コードのレイアウトを適切に調整できる。

実のところ「PHP Coding Standards Fixer」の方が新しくて人気があるみたいなのですが、今回はあえて  PHP Code Beautifier and Fixerを使うことにします。

PHP_CodeSnifferに含まれていて、別途インストールする必要がないから・・という理由だですけどね。

まあ。

それで具合が悪ければ、いつでも「PHP Coding Standards Fixer」は試せますしね。

 

PHP_CodeSnifferのインストール

 

さて。

Composerを使って、上記のツールをインストールして、Editer側の設定をします。。

コーディング規約のチェックと、レイアウトの自動修正を行うツールは、PHP_CodeSnifferと、それに含まれているPHP Code Beautifier and Fixerです。

github.com 

CMDを立ち上げて、下記を実行します。

composer global require "squizlabs/php_codesniffer=*"

f:id:arakan_no_boku:20190922233359p:plain

Globalでのインストールです。

正常終了しました。 

Globalのインストール先は以下です。

C:\Users\xxxxxxx\AppData\Roaming\Composer

ここに、composer.jsonとcomposer.lockもあります。

 ここのvendorフォルダの下に本体はインストールされてます。

 

Braketsの「PHP Code Quality Tools」導入

 

やっぱり、Editerで編集しながら、タイムリーにチェックできないと嫌なので、Editer側も設定しておきます。

PHP開発エディタには、Brakets 1.14以降を使います。

arakan-pgm-ai.hatenablog.com

 Braketsの拡張機能に、「PHP Code Quality Tools」があります。

f:id:arakan_no_boku:20190923080456p:plain

これは以下を含んでいる拡張機能です。

  • PHP syntax check (php -l)
  • PHP CodeSniffer
  • PHP Copy/Paste Detector
  • PHP Mess Detector

 

PHP Code Quality Toolsに含まれる機能について、ちょっと補足

 

PHP Mess Detector

以下の4つを静的解析した結果メッセージを表示してくれます。

  • 潜在バグ
  • 次善コード
  • 複雑過ぎる問題
  • 未使用のパラメータ、メソッド、プロパティ

phpmd.org

 

PHP Copy/Paste Detector

ソース中のコピペを検出してます。

確かにコピペで重複記述したソースがあると、保守性が極端に落ちますから。

これもいいですね。

github.com

 

PHP Code Quality Toolsの設定

 

インストールすると、表示メニューに「PHP Code Quality Tools」が追加されるので、それを開いて、動作設定を確認できます。

(もちろん、変更もできます)

f:id:arakan_no_boku:20190923085728p:plain

 

ソースコードを開いてエラーになるか確認する

 

でエラーになりそうな適当なソースを開くと、いろいろチェックされてエラーが自動表示されます。

f:id:arakan_no_boku:20190923090056p:plain

 

今度は自動修復をためします。

 

エディタ上でのAuto Fixのメニューは見つけられなかったので、CMDで以下のように「PHP Code Beautifier and Fixer」を動かしてみました。

とりあえず、確認用のソースをpracフォルダの下に「src」フォルダがあるとした場合は、こんな感じ

phpcbf --standard=PSR1,PSR2 src

です。

これで「src」以下のphpソースを全部修復してくれます。

f:id:arakan_no_boku:20190923090651p:plain

少なくとも、上記ででていたエラーはでなくなりました。

使ってみてわかったのですが。

PHP Code Quality Tools」をいれて、Windows環境で使っていると毎回「改行コードがLFじゃないよ」とエラーじゃないよとエラーになります。

設定で改行コードをチェックしないようにもできるみたいですが、極力、デフォルトで使いたい自分としては本意ではないので、そこは放っておいて、後で「PHP Code Beautifier and Fixer」ってやってます。

なので、完全にセットですね。

チェックと自動修復は。

今回はこんなところで。 

ではでは。