PhpStormでファイル更新時にphp-cs-fixerを使って自動整形する

コンテンツ開発事業部の田畑です。
現在はPHPでゲームアプリのサーバー開発を行っております。
私からはコード整形ツールを導入した時のお話をさせて頂きます。

この記事を書こうと思った経緯

私が昔所属していたプロジェクトではコードレビューやコーディング規約等は特になく、
ソースによってコーディングがまちまちだったりしました。
私としてはコーディングに強いこだわりがあるわけではないですが、
規約が決まっていた方がコーディングで迷う事もなくありがたいなと思っていました。
さらに機械的にやってくれるのであれば特に意識する必要もなく楽だなと思い当時整形ツールのphp-cs-fixerを導入しました。

また弊社では希望者に対してPhpStromのライセンスが支給されています。
PhpStromではファイルの更新を監視する事も簡単に設定出来たので今回は表題の件をお話させて頂きます。

前提

・Windows10
・PHP 7.3
・PhpStorm
・Composer

上記はインストール済みとして進行します。
PHPは7以上推奨ですが5.6でも最新機能以外は問題なく使えます。

php-cs-fixerのインストール

PhpStorm上からComposerを使ってインストールします。

Tools→Composer→Manage dependencies
f:id:teco_tabata:20200225130749j:plain

検索バーに'friendsofphp/php-cs-fixer'と入力
リストに出てきた'friendsofphp/php-cs-fixer'を選択しInstall
f:id:teco_tabata:20200225124053j:plain

これでインストールは完了です。

php-cs-fixerをツールに登録する

php-cs-fixerをツールとして登録し実行出来る様にします。

  1. File→Settingsウィンドウを開く
  2. SettingsウィンドウからTools→External Toolsを選択
  3. 左上「+」ボタンを押す
  4. Nameにphp-cs-fixer等何かわかりやすい名前を入力
  5. ProgramにComposerでインストールしたphp-cs-fixer.batのパスを入力
  6. Argumentsに--rules=@PSR2 --verbose fix "$FilePath$"を入力
  7. Working directoryに$ProjectFileDir$を入力しOK
  8. SettingsウィンドウでApply
    f:id:teco_tabata:20200225131038j:plain

これで準備が出来たので実行します。
1. Projectタブから整形をかけたいファイルを選択
※ファイルを未選択状態で実行するとプロジェクトフォルダ以下すべてに整形が実行されるので注意
2. Tools→External Tools→先程登録したツールのNameを押し実行

実行するとRunタブが立ち上がり実行ログが出ますのでエラー等出ていなければ完了です。

ファイル保存時に強制的にphp-cs-fixerを実行する

File Watchersにphp-cs-fixerを登録し、ファイルを保存した際に強制的にphp-cs-fixerを実行する設定を行います。
また自動保存設定になっていた場合は編集する度に整形が実行されますので、注意して下さい。

  1. File→Settingsウィンドウを開く
  2. SettingsウィンドウからTools→File Watchersを選択
  3. 右上「+」ボタン→を選択
  4. NameにPHP CS Fixer (PSR-2)等何かわかりやすい名前を入力
  5. File typeをPHPに変更
  6. ProgramにComposerでインストールしたphp-cs-fixer.batのパスを入力
  7. Argumentsに--rules=@PSR2 --verbose fix "$FilePath$"を入力しOK
  8. SettingsウィンドウでApplyを押す
    f:id:teco_tabata:20200225124545j:plain

ファイルを保存時に同様にRunタブが立ち上がり実行ログが出れば完了です。

コード整形規約を指定する

php-cs-fixerではpsr0,psr1,psr2,symfonyの4つのルールセットが用意されています。
symfonyはsymfonyが推奨するコーディング規約でpsr0からpsr2まで含まれており、デフォルトではsymfonyが指定されます。
使い方は--rulesオプションにルールセットを指定します。

php-cs-fixer --rules=@PSR2 fix ./app/Services/Api/Test.php

他には自分で整形ルールを作る事も出来ます。
.php_csファイルを作成し実行時にオプションで指定します。
.php_csの記述に関しては長くなるので割愛させて頂きますが私は下記のサイトを参考にさせて頂き作成致しました。

qiita.com

.php_csを作成したら実行時に--configオプションで指定します。

php-cs-fixer --config=.php_cs fix ./app/Services/Api/Test.php

ツールに登録して使う場合はExternal ToolsのArgumentsを以下に変更します。

--config=$ProjectFileDir$/.php_cs --verbose fix $FilePath$

おわりに

php-cs-fixer自体インストールするだけで使えますし、PhpStormの設定も難しい事はないかと思います。
既存のプロジェクトに導入する場合、自分が編集していない所で差分が出てしまい本来の編集箇所がわからなくなってしまうので、コミットを分けるなりされるとよいかと思います。
tecotec.co.jp