Github Actionsを使用してJestを自動で実行する

11261 ワード

はじめに

現在関わっているプロジェクトにて、jestで書かれたテストケースの総数が増えてきたということもあり、
ソースコードに変更を加えるたびに、ローカル環境で全てのテストを手動で実行していてると、全テストの実行完了までに少し時間がかかってしまったり、現在自分が改修を行なっているソースコードとは直接関係のないテストの実行を忘れてしまうという事態がちらほら発生し始めました。

そこで、Githubにソースコードをpushした際に自動でテストを実行できればマージ前に全テストの実行を忘れることなく安全にマージを行えると思いCI環境の整備を進めようと考えました。

自動テストを行うためのCI環境を整備するにあたって、私自身が業務で今まで使用したことのないGithub Actionsを使用して設定を行うことになりました。
(既に社内の別プロジェクトではGithub Actionsの導入実績がある & 既に安定して運用を行なっている。)
以前に業務で使用したことのあるCIツールとの違いなどの軽くみていきながら、Github Actionsで自動テストを実行するための設定を解説していきたいと思います。

使用した技術スタック

  • 言語:Typescript
  • ORM:Prisma
  • サービス間通信:gRPC
  • テストフレームワーク:Jest

プロジェクトの現状を簡単に説明すると、
モノリスで書かれた既存プロジェクトのリプレイス作業を行っており、リプレイス後のソースコードに関しては、同一リポジトリ内にて、monorepoに移行される想定になっています。

設定ファイル

test-grpc.yml
name: Typescript gRPC Test

on:
  push:
    paths:
      - "src/backend/**"

defaults:
  run:
    shell: bash
    working-directory: src/backend

jobs:
  typescript-gRPC:
    name: Typescript gRPC Test
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:5.7
        ports: ["3306:3306"]
        env:
          MYSQL_ROOT_PASSWORD: pass
          MYSQL_DATABASE: test

    steps:
      - uses: actions/checkout@v3

      - name: Set up Node
        uses: actions/setup-node@v3
        with:
          node-version: "16"

      - name: Install dependencies
        run: yarn

      - name: Run tests
        env:
          DATABASE_URL: mysql://root:pass@localhost:3306/test
        run: |
          yarn proto
          yarn prisma migrate dev
          yarn test

他のCIツールとの比較

Github Actions

GithubでCI環境を整備する際の、デファクトスタンダードになってきている印象です。
CIの実行結果(CI上でのコマンド処理の成否など)をGIthub内の対象リポジトリのプルリクのページからタブを切り替えてすぐに閲覧できるのはなかなか使い勝手が良いのではないかと思います。