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

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

2022/01/24

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

今回は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

1name: Check & fix styling
2
3on: [push, workflow_dispatch]
4
5jobs:
6  php-cs-fixer:
7    runs-on: ubuntu-latest
8
9    steps:
10      - name: Checkout code
11        uses: actions/checkout@v2
12        with:
13          ref: ${{ github.head_ref }}
14
15      - name: Setup PHP, with composer and extensions
16        uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
17        with:
18          php-version: '7.4'
19
20      - name: Install Dependencies
21        run: php composer.phar install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
22
23      - name: Run PHP CS Fixer
24        run: ./vendor/bin/php-cs-fixer fix
25
26      - name: Commit changes
27        uses: stefanzweifel/git-auto-commit-action@v4
28        with:
29          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

1name: Check & fix styling
2
3on: [push, workflow_dispatch]
4
5jobs:
6  php-cs-fixer:
7    runs-on: ubuntu-latest
8
9    steps:
10      - name: Checkout code
11        uses: actions/checkout@v2
12        with:
13          ref: ${{ github.head_ref }}
14
15      - name: Setup PHP, with composer and extensions
16        uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
17        with:
18          php-version: '7.4'
19          tools: php-cs-fixer:2
20
21      - name: Run PHP CS Fixer
22        run: php-cs-fixer fix
23
24      - name: Commit changes
25        uses: stefanzweifel/git-auto-commit-action@v4
26        with:
27          commit_message: Fix styling

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

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

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

1name: Check & fix styling
2
3on: [push, workflow_dispatch]
4
5jobs:
6  php-cs-fixer:
7    runs-on: ubuntu-latest
8
9    steps:
10      - name: Checkout code
11        uses: actions/checkout@v2
12        with:
13          ref: ${{ github.head_ref }}
14
15      - name: Run PHP CS Fixer
16        uses: docker://oskarstark/php-cs-fixer-ga:2.19.0
17
18      - name: Commit changes
19        uses: stefanzweifel/git-auto-commit-action@v4
20        with:
21          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