GitHub Actions で PHP_CodeSniffer を動かす

エロい人ヤれと言われたのやらかしてみました。ポロリもあるよ

PHP_CodeSnifferってなんやねん?
嫁イビリが生き甲斐の姑みたいな存在で細かいことでネチネチ嫌味を言う存在でPHP コードの品質を保つために使用されるツールで、コーディングルールを守れとかチェックしてくれる開発者泣かせのコードの品質を保ってくれるスンバラシイツールdeathね!

設計内容

  • developmentブランチにPullRequestするときに自動的にPHP_CodeSnifferを実行する
  • コーディング規約はPSR-12とする
  • チェックするファイルはsrc以下の.phpファイルが対象。ただし、vendorはチェックしない
  • developmentブランチにPullRequestするときに自動的にPHP_CodeSnifferを実行する
  • PHP_CodeSnifferの内容はactionから確認する

1 適切なブランチに.github/workflows/php-codesniffer.ymlを作成する

name: PHP_CodeSniffer によるコードチェック

#developmentブランチへのプルリクエスト時に実行
on:
  pull_request:
    branches:
      - development

jobs:
  phpcs:
    runs-on: ubuntu-latest

    steps:
      - name: リポジトリのチェックアウト
        uses: actions/checkout@v4

      - name: PHPの導入
        uses: shivammathur/setup-php@v2
        with:
          php-version: 'latest'

      - name: Composerのインストール
        run: |
          curl -sS https://getcomposer.org/installer | php
          php composer.phar global require "squizlabs/php_codesniffer=*"

      - name: PHP CodeSnifferの実行
        run: |
          phpcs --standard=PSR12 src/ --ignore=vendor/ --extensions=php
          exit_code=$?
          if [ $exit_code -ne 0 ]; then
            exit 1
          fi

2. 1で作ったブランチをmasterとdevelopmentブランチにマージする

あとはdevelopmentブランチにプルリクを出せばPHP_CodeSnifferによるコードチェックが行われます。
phpcs –standard=PSR12 src/ –ignore=vendor/ –extensions=php でオプションを変更できますので環境に合わせて調節してください

では!

おまけ

PullRequestのコメントとしてPHP_CodeSnifferの内容を出力してましたが情報量が多すぎて没にしました。

name: PHP CodeSniffer によるコードチェック
on:
  pull_request:
    branches:
      - development

jobs:
  phpcs:
    runs-on: ubuntu-latest

    permissions:
      pull-requests: write

    steps:
      - name: チェックアウト
        uses: actions/checkout@v4
        with:
          token: ${{ secrets.PHP_CS_TOKEN }}

      - name: PHPのインストール
        uses: shivammathur/setup-php@v2
        with:
          php-version: 'latest'

      - name: Goのインストール
        uses: actions/setup-go@v5
        with:
          go-version: '1.21'

      - name: php_codesnifferのインストール
        run: |
          curl -sS https://getcomposer.org/installer | php
          php composer.phar global require "squizlabs/php_codesniffer=*"

      - name: reviewdogのダウンロードとビルド
        run: |
          curl -L -o reviewdog.zip https://github.com/reviewdog/reviewdog/archive/refs/tags/v0.20.3.zip
          unzip reviewdog.zip
          cd reviewdog-0.20.3
          go build -o ../reviewdog ./cmd/reviewdog
          cd ..
          mkdir -p bin
          mv reviewdog bin/

      - name: PHP_CodeSnifferを実行して結果をxmlで出力する 
        run: |
          ~/.composer/vendor/bin/phpcs --standard=PSR12 src/ \
            --ignore=vendor/ --extensions=php \
            --report=checkstyle > /tmp/phpcs-report.xml || true

      - name: reviewdog でレビューとして出力する
        run: |
          bin/reviewdog \
          -f=checkstyle \
          -name="phpcs" \
          -reporter=github-pr-review \
          -filter-mode=diff_context \
          -fail-on-error=false \
          -level=error < /tmp/phpcs-report.xml
        env:
          REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.PHP_CS_TOKEN }}

上部へスクロール