GitHub Actions+PHP CS FixerでPHPをコードフォーマットする3例

こんにちは、小國です。久しぶりの投稿になります。

今回はGitHub Actions+PHP CS FixerでPHPをコードフォーマットする3例を紹介したいと思います。

  • 例1.composer require –devでphp-cs-fixerをインストールしていて、なるべく同じ環境でコードフォーマットしたい(composer+shivammathur/setup-phpを利用)
  • 例2.PHPのバージョンは合わせてコードフォーマットしたい(shivammathur/setup-phpのtoolsを利用)
  • 例3.手軽にコードフォーマットしたい(dockerを利用)

今回のコードフォーマットはpush時と手動でできるようにしています。また、PHP CS Fixerのバージョンは諸事情があって2.xとしています。

例1.composer require –devでphp-cs-fixerをインストールしていて、なるべく同じ環境でコードフォーマットしたい

shivammathur/setup-phpでPHPのバージョンを指定し、composer require –devでインストールしたphp-cs-fixerを利用してコードフォーマットするサンプルになります。なお、gitにcomposer.pharが含まれているものとしています。

.github/workflows/php-cs-fixer.yml

name: Check & fix styling

on: [push, workflow_dispatch]

jobs:
  php-cs-fixer:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          ref: ${{ github.head_ref }}

      - name: Setup PHP, with composer and extensions
        uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
        with:
          php-version: '7.4'

      - name: Install Dependencies
        run: php composer.phar install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist

      - name: Run PHP CS Fixer
        run: ./vendor/bin/php-cs-fixer fix

      - name: Commit changes
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: Fix styling

例2.PHPのバージョンは合わせてコードフォーマットしたい

shivammathur/setup-phpは、toolsオプションでphp-cs-fixerが使えバージョンも指定できます。その他にもいろいろなtoolsがあり、shivammathur/setup-phpだけである程度のことができそうです。

参考:https://github.com/shivammathur/setup-php#wrench-tools-support

.github/workflows/php-cs-fixer.yml

name: Check & fix styling

on: [push, workflow_dispatch]

jobs:
  php-cs-fixer:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          ref: ${{ github.head_ref }}

      - name: Setup PHP, with composer and extensions
        uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
        with:
          php-version: '7.4'
          tools: php-cs-fixer:2

      - name: Run PHP CS Fixer
        run: php-cs-fixer fix

      - name: Commit changes
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: Fix styling

例3.手軽にコードフォーマットしたい

最後に、docker(docker://oskarstark/php-cs-fixer-ga)を使ったサンプルです。PHPやphp-cs-fixerのバージョンなどの細かい指定はできないようですが、composerがない環境でも手軽に適応できます。

.github/workflows/php-cs-fixer.yml

name: Check & fix styling

on: [push, workflow_dispatch]

jobs:
  php-cs-fixer:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          ref: ${{ github.head_ref }}

      - name: Run PHP CS Fixer
        uses: docker://oskarstark/php-cs-fixer-ga:2.19.0

      - name: Commit changes
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: Fix styling

※docker://oskarstark/php-cs-fixer-ga:2.19.0は、php-cs-fixerのバージョンではなく、dockerのタグになります。


実行時間ってどうなの?

気になる実行時間ですが、約 900のPHPファイルのコードフォーマット時間の結果は以下の通りでした。

docker(docker://oskarstark/php-cs-fixer-ga)が早い!

php-cs-fixer fix時間トータル実行時間
例1.composer+shivammathur/setup-phpを利用3m 23s4m 31s
例2.shivammathur/setup-phpのtoolsを利用2m 54s3m 37s
例3.dockerを利用1m 29s2m 10s