こんにちは、小國です。久しぶりの投稿になります。
今回は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 23s | 4m 31s |
例2.shivammathur/setup-phpのtoolsを利用 | 2m 54s | 3m 37s |
例3.dockerを利用 | 1m 29s | 2m 10s |