はじめに
過去の記事でlarastanやテストの導入について記事を書きました。
今回はlarastanやテストを、GitHub Actionsを使用してgithub上で自動実行する方法について書いていこうと思います。
1. GitHub Actionsの設定
.github/workflows/backend.yml
に以下の設定を追加します。
ファイル名はなんでもOKです。
name: Backend CI
on:
push:
branches: [main]
paths:
- "backend/**"
pull_request:
branches: [main]
paths:
- "backend/**"
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: "8.1"
extensions: pdo, sqlite, pdo_sqlite
- name: Install Backend Dependencies
run: |
cd backend
composer install --prefer-dist --no-progress
- name: Setup Laravel
run: |
cd backend
cp .env.example .env
php artisan key:generate
echo "DB_CONNECTION=sqlite" >> .env
echo "DB_DATABASE=:memory:" >> .env
- name: Run Pint
run: |
cd backend
./vendor/bin/pint --test
- name: Run Larastan
run: |
cd backend
./vendor/bin/phpstan analyse
- name: Run Backend Tests
run: |
cd backend
php artisan test
2. 各ステップの説明
2.1 ジョブとステップの設定
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
jobs
- ジョブは複数を並列実行可能です
- 今回は
test
という名前のジョブを定義しています
runs-on
- ジョブを実行する環境を指定します
-
ubuntu-latest
: 最新のUbuntu環境を指定しています
steps
- ジョブ内で実行する個々の処理を定義します
- この例では
actions/checkout@v4
というアクションを使用しています
actions/checkout@v4
- リポジトリのコードをチェックアウトするアクションです
- このアクションがないと、リポジトリのコードにアクセスできないです
2.2 トリガーの設定
on:
push:
branches: [main]
paths:
- "backend/**"
pull_request:
branches: [main]
paths:
- "backend/**"
ここではどの様なタイミングで実行するかを指定します。上記コードでは以下の様な設定になります。
-
main
ブランチへのプッシュ時とプルリクエスト時に実行 -
backend/**
パスの変更時のみ実行(フロントエンドの変更時は実行しない)
今回のリポジトリ構成が以下の様になっており、laravelはbackendの中に入っているのでbackend以下の変更時、実行する様にしてあります。
.
├── README.md
├── backend
└── frontend
2.3 PHPのセットアップ
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: "8.1"
extensions: pdo, sqlite, pdo_sqlite
- PHP 8.1をインストール
- 必要な拡張機能のみを指定
DB関係のテストでsqliteを使用するのでここで設定します。
ローカルではmysqlを使っていますが、ci環境ではsqliteのセットアップが軽量で今回は問題なく動作したのでsqliteを使用しました。
2.4 composerインストール
- name: Install Backend Dependencies
run: |
cd backend
composer install --prefer-dist --no-progress
-
--prefer-dist
: パッケージをzipでダウンロード(zipの方が高速の様です) -
--no-progress
: 進捗表示を抑制(CI上では不要なので無効化)
2.5 Laravelのセットアップ
- name: Setup Laravel
run: |
cd backend
cp .env.example .env
php artisan key:generate
echo "DB_CONNECTION=sqlite" >> .env
echo "DB_DATABASE=:memory:" >> .env
- 環境設定ファイルの準備
- アプリケーションキーの生成
- テスト用のSQLite設定
2.6 コード品質チェック
- name: Run Pint
run: |
cd backend
./vendor/bin/pint --test
- name: Run Larastan
run: |
cd backend
./vendor/bin/phpstan analyse
- Pint: コードスタイルのチェック
- Larastan: 静的解析
2.7 テスト実行
- name: Run Backend Tests
run: |
cd backend
php artisan test
- ユニットテストとフィーチャーテストの実行
3. 実行結果の確認
上記のymlをリポジトリにあげてトリガが働くとgithub actinosが実行されます。
GitHubのリポジトリの「Actions」タブで実行結果を確認できます。
プルリク時
actionsタブ
あとがき
今回はgithub actionsについて簡易的ではありますが、備忘録用の意味も込めて記事を作成しました。
CI/CDは色々奥が深い様なので使う機会があればもう少し学んで行きたいです。
今回記事では紹介しませんでしたが、キャッシュの利用やローカルでの確認ができるactなどもあるので色々勉強になりました。
気になった方は是非使ってみて下さい。
追記
github actionsはprivateリポジトリの場合、月2000分までは無料枠で使えます。
超えた場合は従量課金ですが自動で支払われる事はないので大丈夫です。
参考リンク