3
0

More than 1 year has passed since last update.

GitHub ActionsでPHPの静的解析を行ってみる

Last updated at Posted at 2023-05-26

はじめに

チーム内の方のコードレビューでGitHub Actionsをレビューを行ったの際に得た知識からGHA触ってみたりしたので、記事に起こそうと思いますー:smiley:

前提条件

チームではGitHub Enterprise(以下GHE)でGitHub Actionsを利用するため、セルフホステッド ランナーを使用していますが、今回はphpの静的解析ツール(phpstan)をGitHub Actionsでインストールなど試みたかった(※)のでGitHubのGitHub ホステッド ランナーで動かしていきます。

※セルフホステッド ランナーではgithub公式が提供しているアクションのみ使用できるため、php関連のアクションはサードパーティーのものしかなく、そちらを使うにはGitHub ホステッド ランナーのみ使用可能

GitHub Actionsとは

GitHub Actions は、ビルド、テスト、デプロイのパイプラインを自動化できる継続的インテグレーションと継続的デリバリー (CI/CD) のプラットフォームです。 リポジトリに対するすべての pull request をビルドしてテストしたり、マージされた pull request を運用環境にデプロイしたりするワークフローを作成できます。

GitHub Docs/GitHub Actions について
というものになり、2019年11月にリリースされたのでもので割と新しい技術になるみたいです。

フォルダ構成

action
   ┣━ .github
   ┃     ┗━ workflows
   ┃            ┗━ PhpCheckTest.yml
   ┣━ test
   ┃     ┗━ test.php
   ┗━ composer.json
  • 今回はactionがリポジトリになり、リポジトリ配下にある.githubがあると思うのでそこにworkflowsとymlファイルPhpCheckTest.ymlを設置
  • test/test.phpが今回チェックされるphpファイルになる。
  • composer.jsonはphpstanをインストールする際に使うのでaction直下に設置

各ファイルの中身

PhpCheckTest.yml

name: PHPStanTest
# Github Actionsが動く際のトリガー、ここではプルリクエスト[opened, synchronize, reopend]の際に発火
on: [pull_request]
jobs:
  phpstantest:
    runs-on: ubuntu-latest
    steps:
      #こちらはGithub謹製のアクション
      - uses: actions/checkout@v3
      - name: Setup PHP
        #こちらはサードパーティ製のアクションのアクション
        uses: shivammathur/setup-php@v2
        with:
          php-version: '7.2.34'
      #こちらもサードパーティ製のアクションのアクション
      - uses: reviewdog/action-setup@v1
        with:
          reviewdog_version: latest
      - name: Composer install
        run: composer install
      #Phpstanをインストール
      - name: phpstan install
        run: composer require phpstan/phpstan
      - name: run phpstan and reviewdog
        env:
          #Githubにコメントを書きこむため、トークンが必要
          REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: vendor/bin/phpstan analyse test --level max --memory-limit=-1 --error-format=raw --no-progress | reviewdog -reporter=github-pr-review -f=phpstan

test.php

<?php

class RegularEmployee2
{
    /**
     * @var int
     */
    private $employee_id;
    /**
     * @var string
     */
    private $name;
    /**
     * @param $employee_id
     * @param $name
     */
    public function __construct($employee_id, $name)
    {
        $this->employee_id = $employee_id;
        $this->name = $name;
    }
    /**
     * @return int
     */
    public function getEmployeeId(): int
    {
        return $this->employee_id;
    }
    /**
     * @return mixed
     */
    public function getName(): mixed
    {
        return $this->name;
    }
}
$employee = new RegularEmployee("1","山田");
echo $employee->getEmployeeId();
echo $employee->getName();

composer.json

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

動かしてみるでー

準備はできたので、こちらをプルリクにプッシュ、、、、

image.png

Method RegularEmployee::__construct() has parameter $employee_id with no type specified.

Method RegularEmployee::__construct() has parameter $name with no type specified.

image.png

Parameter #1 (mixed) of echo cannot be converted to string.

ちゃんと怒られましたね :smile:
コメントもちゃんとできているのでOKそうですね :smile:

はまったとこ

まとめ

今回はGitHub Actionsの実行ファイルのyaml上でphpstanを動かしたりしたっかたので、
GHEではなくGithub.comで行いましたが、あらかじめphpstanを落としたりしておけば、
GHEでも解析を行う方法もあるのでまた、機会があればGHEでも挑戦したいと思います :smiley:
見て頂いてありがとうございますー

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0