LaravelでのGitHub Actionsの導入方法

## はじめに

過去の記事でlarastanやテストの導入について記事を書きました。
今回はlarastanやテストを、GitHub Actionsを使用してgithub上で自動実行する方法について書いていこうと思います。

## 1. GitHub Actionsの設定

`.github/workflows/backend.yml`に以下の設定を追加します。
ファイル名はなんでもOKです。

```yaml
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 ジョブとステップの設定

```yaml
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
- リポジトリのコードをチェックアウトするアクションです
- このアクションがないと、リポジトリのコードにアクセスできないです

https://qiita.com/shun198/items/14cdba2d8e58ab96cf95#jobs

### 2.2 トリガーの設定
```yaml
on:
  push:
    branches: [main]
    paths:
      - "backend/**"
  pull_request:
    branches: [main]
    paths:
      - "backend/**"
```
ここではどの様なタイミングで実行するかを指定します。上記コードでは以下の様な設定になります。
- `main`ブランチへのプッシュ時とプルリクエスト時に実行
- `backend/**`パスの変更時のみ実行（フロントエンドの変更時は実行しない）

今回のリポジトリ構成が以下の様になっており、laravelはbackendの中に入っているのでbackend以下の変更時、実行する様にしてあります。
```bash
.
├── README.md
├── backend
└── frontend
```

----


### 2.3 PHPのセットアップ
```yaml
- 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インストール
```yaml
- name: Install Backend Dependencies
  run: |
    cd backend
    composer install --prefer-dist --no-progress
```
- `--prefer-dist`: パッケージをzipでダウンロード（zipの方が高速の様です）
- `--no-progress`: 進捗表示を抑制（CI上では不要なので無効化）

### 2.5 Laravelのセットアップ
```yaml
- 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 コード品質チェック
```yaml
- name: Run Pint
  run: |
    cd backend
    ./vendor/bin/pint --test

- name: Run Larastan
  run: |
    cd backend
    ./vendor/bin/phpstan analyse
```
- Pint: コードスタイルのチェック
- Larastan: 静的解析

### 2.7 テスト実行
```yaml
- name: Run Backend Tests
  run: |
    cd backend
    php artisan test
```
- ユニットテストとフィーチャーテストの実行

## 3. 実行結果の確認

上記のymlをリポジトリにあげてトリガが働くとgithub actinosが実行されます。
GitHubのリポジトリの「Actions」タブで実行結果を確認できます。

#### プルリク時![スクリーンショット 2025-06-05 13.27.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2139067/7d79b911-1fc9-4884-9add-b6ba62cc661f.png)

#### actionsタブ![スクリーンショット 2025-06-05 13.29.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2139067/ea732644-9a47-4d34-9692-2a0760891fb3.png)

## あとがき

今回はgithub actionsについて簡易的ではありますが、備忘録用の意味も込めて記事を作成しました。
CI/CDは色々奥が深い様なので使う機会があればもう少し学んで行きたいです。

今回記事では紹介しませんでしたが、キャッシュの利用やローカルでの確認ができる[act](https://github.com/nektos/act)などもあるので色々勉強になりました。
気になった方は是非使ってみて下さい。


#### 追記
github actionsはprivateリポジトリの場合、月2000分までは無料枠で使えます。
超えた場合は従量課金ですが自動で支払われる事はないので大丈夫です。

https://zenn.dev/yorifuji/articles/ed119d657fff26

## 参考リンク

https://docs.github.com/ja/actions

https://zenn.dev/the_exile/articles/41026a0b317e28