Slide 1

Slide 1 text

PHPで始めるGitHub Actions ゆるはち.it #27 吉⽥あひる (@strtyuu)

Slide 2

Slide 2 text

話すこと GitHub Actionsのいいところ QAツールの活⽤ よく使うアクションの紹介 ローカルでGitHub Actionsを実⾏する⽅法

Slide 3

Slide 3 text

話さないこと GitHub Actionsの使い⽅ 公式ドキュメントがわかりやすいので 他のCIとの⽐較 ⽐較できるほど詳しくないので

Slide 4

Slide 4 text

GitHub Actionsとは 2019年11⽉にGitHubがリリースしたソフトウェア開発ライフサイクル内のタスクを⾃動化す るツール。 任意のイベントをきっかけにタスクを実⾏することができ、commitがpushされた時などgit 周りのイベントだけでなく、issueやPRが作成/更新/削除された時やcronによるスケジューリ ングなど、様々なイベントに対してタスクを紐づけることができる。 主にCI/CDによく使われ、似たようなものとしてはCircleCIやTravis CIなどがある。

Slide 5

Slide 5 text

GitHub Actionsのいいところ 安い! ⼿軽! GitHub との連携が充実! 便利なActionも充実!

Slide 6

Slide 6 text

安い! 従量課⾦だけど無料枠があるので、個⼈使⽤であればだいたい無料枠におさまる。

Slide 7

Slide 7 text

⼿軽! .github/workflows ディレクトリにymlファイルを置くだけ! skeleton projectなどを予め⽤意しておけば、新しいリポジトリを作った直後にはCIの構築が 終わってるということもありえる

Slide 8

Slide 8 text

skeleton project? プロジェクトのよくあるセッティングを予めしておいたもの。 参考 https://github.com/koriym/Koriym.PhpSkeleton

Slide 9

Slide 9 text

(僕は最近こんな感じでPHPプロジェクトを作成していま すというデモ)

Slide 10

Slide 10 text

僕がよく使うアクションの紹介

Slide 11

Slide 11 text

shivammathur/setup-php マシン上にPHPの動作環境を構築をしてくれるやつ。 extensionやCIでしか使わないようなツールを簡単に⼊れることができてとても便利。 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: 8.0 extensions: mbstring, mysql tools: cs2pr

Slide 12

Slide 12 text

dorny/paths-filter gitのdiffを正規表現ベースで簡単に取得できるアクション。 「差分のあったファイルにだけlintをかけたい」とか on.push.paths とかだと対応がちょっ と⾯倒な時に便利。

Slide 13

Slide 13 text

- uses: dorny/[email protected] id: changed with: list-files: shell filters: | php: # 正規表現が使える - '**/*.php' without_delete: # 新規作成/ 編集されたファイルのみみたいな指定もできる - added|modified: '*.php' - name: Run php-cs-fixer run: | vendor/bin/php-cs-fixer fix \ --dry-run \ ${{ steps.changed.outputs.without_delete_files }}

Slide 14

Slide 14 text

actions/cache 任意のファイル/ディレクトリをキャッシュして、ジョブ間で使い回しができるやつ。 CIを⾼速化したいときに役に⽴つ。 - name: Get Composer Cache Directory id: composer-cache-dir run: | echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Restore composer cache id: composer-cache uses: actions/cache@v2 with: path: ${{ steps.composer-cache-dir.outputs.dir }} key: ${{ runner.os }}-composer-${{ hashFiles('composer.lock') }} restore-keys: | ${{ runner.os }}-composer-

Slide 15

Slide 15 text

styfle/cancel-workflow-action 同じPRで連続してpushしたときとかに既に⾛ってるジョブをキャンセルしてくれるやつ。 ⼀回のCIがとても⻑いなど、CIが終わるのを待つのが⾯倒なプロジェクトとかで便利。 - name: Cancel previous runs uses: styfle/[email protected] with: access_token: ${{ github.token }}

Slide 16

Slide 16 text

QAツールとProblem Matcher

Slide 17

Slide 17 text

Problem Matcher とは GitHub Actionsで特定 のフォーマットの⽂字 列を出⼒すると、発⽣ したエラーなどがこん な感じでみれるように なる奴

Slide 18

Slide 18 text

PHPUnit デファクトスタンダードなテスティングフレームワーク shivammathur/setup-php を使っている場合 - name: Setup problem matchers for PHPUnit run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" - name: Run PHPUnit tests run: vendor/bin/phpunit shivammathur/setup-php を使っていない場合は mheap/phpunit-matcher-action@v1 を使う - name: Configure phpunit-matcher uses: mheap/phpunit-matcher-action@v1 - name: Run PHPUnit tests run: vendor/bin/phpunit

Slide 19

Slide 19 text

PHPStan 0.12.32 以上の場合 何もしなくてもOK。明⽰的にやる場合は --error-format=github を⾜してあげる - name: Run phpstan run: vendor/bin/phpstan analyse --error-format=github 0.12.32 未満の場合 staabm/annotate-pull-request-from-checkstyle を使う - name: Run phpstan run: vendor/bin/phpstan analyse --error-format=checkstyle --no-progress | cs2pr

Slide 20

Slide 20 text

psalm 3.8.4 以上の場合 --output-format=github を⾜してあげる - name: Run psalm run: vendor/bin/psalm --output-format=github 3.8.4 未満の場合 staabm/annotate-pull-request-from-checkstyle を使う - name: Run psalm run: vendor/bin/psalm --output-format=checkstyle --no-progress | cs2pr

Slide 21

Slide 21 text

infection --logger-github を⾜してあげる - name: Run Infection run: vendor/bin/infection --logger-github

Slide 22

Slide 22 text

php-cs-fixer staabm/annotate-pull-request-from-checkstyle を使う - name: Run php-cs-fixer run: vendor/bin/php-cs-fixer fix --dry-run --format=checkstyle | cs2pr

Slide 23

Slide 23 text

(おまけ)ローカルでGitHub Actionを実⾏する⽅法

Slide 24

Slide 24 text

nektos/act を使う $ brew install act $ act pull_request

Slide 25

Slide 25 text

まとめ GitHub Actionsはいいぞ Actionという発明は偉⼤ QAツールを適切に設定してあげることでレビューの体験が向上するかも