Dockerを通してPHP-CS-Fixerを使う

PHP-CS-FixerでPHPのコードを規約に沿って整形する。
Macに色々と入れたくないしDockerの方がさくっと環境作れるし、ということでDockerでやる。

1. Dockerの準備

以下の通りファイルを準備してイメージをビルドする。コンテナは常時立ち上げる必要はない。

  • Dockerfile
  • docker-compose.yml

Dockerfile

WordPress公式のイメージにPHPUnitとWP-CLIを追加したもの。

FROM php:latest

RUN curl -L http://cs.sensiolabs.org/download/php-cs-fixer-v2.phar -o php-cs-fixer && \
    chmod a+x php-cs-fixer && \
    mv php-cs-fixer /usr/local/bin/php-cs-fixer

docker-compose.yml

version: "2"
services:
    php:
        build:
            context: .
            dockerfile: Dockerfile
        volumes:
          - .:/var/www/html

ボリュームのコンテナ側のパスは適当。

2. イメージのビルド

$ docker-compose build

これで実行準備はOK。

3. PHP-CS-Fixerの実行

dry-run

まずはdry-run。–diffオプションを付けることで整形される箇所が分かる。

$ docker-compose run --rm php bash -c "cd /var/www/html; php-cs-fixer fix . --diff --dry-run" 

整形の実行

–dry-runを外せば実際に書き換えが行われる。

$ docker-compose run --rm php bash -c "cd /var/www/html; php-cs-fixer fix . --diff" 

整形により変更された箇所を確認したいので–diffを付けているが、気にならないなら付けなくてもよい。
実際のところGitのdiffでも確認できるだろうし。

整形内容のカスタム

整形内容を好みに合わせてカスタムすることができるので、以下のように。

  • クラスや関数定義の開きブレースをクラス名や関数名と同じ行に置く
  • インデントを半角スペース2個に

開きブレースだけで独立した行にするのは、単純に行が増えて見通しが悪くなるので好きではない。
インデントもなるべく多くのコードを画面に表示できるように短く。

ということで。
他人と一緒に回すプロジェクトならPHPの標準に完全に従うのもやぶさかでないが、個人でやるものに関しては無駄な気遣いなく行きたい。

この内容でカスタムするには.php_cs.distというファイルを以下の内容で作成し

<?php
return PhpCsFixer\Config::create()
  ->setRules([
    'braces' => ['position_after_functions_and_oop_constructs'  => 'same']
  ])
  ->setIndent("  ")
;

–configオプションで指定してコマンドを実行。

$ docker-compose run --rm php bash -c "cd /var/www/html; php-cs-fixer fix . --config=.php_cs.dist --diff" 

やったぜ。

今時IDE使え?ごもっともでございます。

参考

サンプル