GitHub Actions で Larastan を自動化!
目次
こんにちは!
システム開発部の松木です。
今回の記事では、GitHub Actions で Larastan を自動で回す設定について説明していきたいと思います。
GitHub Actions とは
GitHub Actions とは、あらかじめ定義した処理を自動化する、GitHub 公式の機能です。
GitHub Actions では、リポジトリに対するプッシュやプルリクエストの作成を、Actions実行の条件として、専用のファイルに定義しておいた処理を自動で実行します。
GitHub Actions の使い方
GitHub Actions を使用するには「/.github/workflows」というディレクトリの配下に、.ymlファイルを作成することで使用できます。
こちらのディレクトリの作り方としては、GitHub上から作成する方法と、自身で直接ディレクトリとファイルを作成して使用する方法があります。
今回は自身で直接作成を行ったため、GitHub上の作成方法は割愛いたします。
Larastan とは
Larastan とは、Laravel に特化した静的解析ツールのことを指しています。
元々PHPには、PHPStan という静的解析ツールが存在し、PHP のコードを実行せずにコード内の問題を見つけることや、
変数や関数の型(int型やstring型等)をチェックし、プログラムの安全性を確認してくれます。
コード内で見つけたエラーに関しては詳細なエラーメッセージを出力し。どこで問題が発生しているか特定できるようになっております。
この PHPStan を、Laravel 向けに設計された PHPStan の拡張が Larastanです。
行う内容は PHPStan と基本変わりませんが、Laravel プロジェクト固有の機能や依存関係・型を理解し、ソースコードの品質を向上させることができます。
環境
PHP: 8.2
Laravel: 10.x
注意点
GitHub Actions を記載しているのは、yaml(yml)ファイルとなっています。
記述の仕方として、ツリー構造で記述を行うので、
記載している部分がどの階層にあたるのかを意識しながら記述を行いましょう。
例えば、下記コードの1行目の「jobs」というキーと同一の階層に、2行目の「phpstan」があると上手く動作を行いません。
「jobs」より一つ深い階層に「phpstan」と記載することで、正常に動作させることができます。
jobs: phpstan: // これでは同一階層なので動かせない。 jobs: phpstan: // 一つ深い階層の為、ツリー構造となり正常に動かせる
使用するコード
今回使用するコードは下記となります。
下記コードは「/.github/workflows/larastan.yml」に記載しております。
name: Larastan on: push: jobs: phpstan: runs-on: ubuntu-latest steps: - uses: actions/[email protected] with: fetch-depth: 0 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: 8.2 tools: composer, cs2pr coverage: none - name: Composer install run: composer install working-directory: ./src - name: Larastan install run: composer require nunomaduro/larastan --dev - name: Run PHPStan run: vendor/bin/phpstan analyze -c ./phpstan.neon working-directory: ./src
上記のコードを元に、GitHub Actions と Larastan が自動で回るようになっている仕組みを分割して説明していきます。
name:
GitHub Actions に登録するワークフローの名前を記載する項目です。
こちらを記載することで、GitHub の Actions の画面内で表示されるようになります。
ここでは「Larastan」という名前を登録しています。
もし登録しなかった場合はファイルの相対パスが登録されます。
今回の場合では「./.github/workflows/larastan.yml」という名前で登録されることになります。
on:
ワークフローをどの動作を引き金に実行するかを決定できます。
こちらを「トリガー」と呼びます。
今回使用するコードでは「GitHubにプッシュを行う」をトリガーにし、Larastan を実行するようにしております。
こちらプッシュのタイミングだけでなく、プルリクエストの作成をトリガーにしたり、指定したブランチがプッシュされたときのみといった形で、細かくトリガーを決めることができます。
jobs:
ワークフロー内で動かす処理を書いていく項目になります。
例えば Larastan を動かすために、php のインストールや composer のインストール、Larastan のインストールと実行コマンドが必要になります。
そういった動作を記載していく項目となっております。
phpstan:
job の作成と job の名前です。
job の中でnameキーを使用すれば、GitHub のUIに表示される名前を設定できますが、設定を行わなかった時は、job の名前に置き換わります。
runs-on:
仮想マシンの種類を定義します。
仮想マシンの設定には
・GitHub ホステッドランナー
・GitHub ホステッドランナーより大きいランナー
・セルフホステッドランナー
の「3つ」を選択することができます。
こちら今回使用するのは、1番目の GitHub ホステッドランナー(以下ランナー)を使用します。
ランナーの中にもいくつか種類が存在し、Linux・Windows・macOSの3つから選択できます。
基本的には Linux を使用する形で問題ないと思いますが、それぞれの環境に合わせて選択してください。
今回は最新の ubuntu を仮想マシンとして利用しています。
steps:
実行していくコマンドを記述します。
こちらで記載したコマンドは上から順に実行される為、順番を間違えるとエラーのもとになりますので、注意しながら記述していきましょう。
uses:
実行するアクションを指定します。
ここで使用しているアクションは「actions/checkout」というモジュールです。
役割としては、リポジトリのコードを使用するために使います。
また、チェックアウト時は指定したブランチの先頭のコミットのコードしか取得しないため、with: の項目で補足情報としてfetch-depth: 0
を指定することにより、全ブランチの全履歴を取得するようにしています。
name:
ここでの name: はGitHub Actionsで表示されるステップの名前になります。
「shivammathur/setup-php」はGitHub Actionsで使用するphpセットアップのモジュールです。
with:
記述することで補足の情報を記述できます。
今回使用するphpはバージョン8.2を指定しています。
tools:
「shivammathur/setup-php」で用意されているツールのことを指しています。
使用するツールとしては、ライブラリ管理ツールのcomposerを使用するように指定します。
coverage:
こちらではカバレッジの指定を行えます。
カバレッジとはコードの網羅率のことをいい、
使用できるツールは「Xdebug」と「PCOV」の2つがあります。
こちら詳しい説明は割愛しますが、簡単に説明すると、
Xdebug は、PHP のデバッグツールであり、カバレッジの取得もできます。
PCOV は、PHP のカバレッジ解析専用ツールです。
また、何も指定しない場合は「none」を指定することで無効化ができます。
例えば、Xdebug からカバレッジを取得したい場合には、下記のように指定をすることで可能となります。
coverage: xdebug
今回はlarastanの実行のため、カバレッジが必要ではないので無効にしています。
run:
ターミナル等で実行するコマンドを記述します。
インストール先を working-directory で指定することができ、プロジェクトルート配下のsrcディレクトリにインストールをするようにしています。
こちらを実行しているのは、setup-php に larastan はまだインストールされていない為、直接 larastan のライブラリをインストールしています。
最後はいよいよ larastan の実行です。
vendor/bin/phpstan analyze
までは通常通りの larastan 実行コマンドですが、-c ./phpstan.neon
は larastan を実行する構成をカレントディレクトリ配下の phpstan.neon を参照するように指定しています。
phpstan.neon でレベルなどの設定を行うことができ、今回使用している phpstan.neon の内容は下記となっております。
includes: - ./vendor/nunomaduro/larastan/extension.neon parameters: paths: - src level: 1
上記の項目を踏まえて自動でLarastanを実行することが可能になります。
まとめ
いかがでしたでしょうか。
今回コードに関係のない部分は割愛しての説明になりましたので、
興味がございましたら、GitHub Actions のドキュメントをご参照ください。
ありがとうございました。
最後に
私が所属するシステム開発部のサービスサイト「SEKARAKU Lab(セカラク ラボ)」を開設しました。
ビヨンドは、サーバーの設計・構築から運用までをワンストップでお任せいただけますので、サーバーサイド開発でお困りの方はお気軽にお問い合わせください。
● SEKARAKU Lab:https://sekarakulab.beyondjapan.com