Chapter 12

CIをセットアップしよう

uki00a
uki00a
2021.05.30に更新

前章では、テストコードの書き方について解説しました。

しかし、せっかくテストコードを書いても、そもそもテストを実行し忘れていたりすると、本番環境にバグが含まれるコードがリリースされてしまう危険性が高まります。

そこで、この章では、GitHub Actionsを使用してCIをセットアップし、テストやリンタなどの実行を自動化する方法について解説します。

GitHub Actionsとは?

GitHubが提供している機能の一つで、主にCI/CDのセットアップなどに使用されます。

GitHubのpublicリポジトリであれば、基本的に無料で使用できます。[1]

GitHub Actionsのセットアップ

まず、GitHub Actionsを使用するためには、プロジェクトディレクトリにワークフローファイルを配置する必要があります。

ワークフローファイルは、.github/workflowsディレクトリにYAML形式で配置します。

.github/workflowsディレクトリに以下の内容のYAMLファイルを用意してください。(ここでは仮にci.ymlとします)

.github/workflows/ci.yml
name: ci

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - uses: denoland/setup-deno@main
        with:
          deno-version: "1.9.2"
      - name: Run fmt
        run: |
          deno fmt --check
      - name: Run lint
        run: |
          deno lint
      - name: Run tests
        run: |
          deno test -A

このファイルをGitHubリポジトリにプッシュすると、以降、プッシュやプルリクエストの作成などを行う度に、テストやリンタなどが自動で実行されるようになります。

試しに、GitHubでプルリクエストを作成してみましょう。

以下のようにGitHub Actionsの実行結果が表示されていれば、適切にセットアップができています。

CIの実行結果

解説

ワークフローのトリガ

on: [push, pull_request]

この宣言によって、プッシュまたはプルリクエストイベントが発生する度に、このワークフローが実行されます。

Denoのセットアップ

- uses: denoland/setup-deno@main
  with:
    deno-version: "1.9.2"

denoland/setup-denoアクションを使用して、Denoをセットアップしています。

ここでは、deno-versionパラメータによってDenoのv1.9.2をセットアップするように指定しています。

deno-versionパラメータを編集することで、異なるバージョンのDenoを使用することもできます。

テストやリンタの実行

- name: Run fmt
  run: |
    deno fmt --check
- name: Run lint
  run: |
    deno lint
- name: Run tests
  run: |
    deno test -A

ここでは、以下の処理を順番に実行するように定義しています。

  1. deno fmt --checkでファイルが適切にフォーマットされていることを確認する
  2. deno lintでリントを実行する
  3. deno test -Aでテストを実行する [2]

このうちどれか一つでも失敗した場合、ワークフローそのものが失敗と判断され、処理が停止します。

ポイント

  • CIをセットアップして、テストやリンタの実行を自動化しましょう。
  • GitHub ActionsでCIをセットアップする際は、denoland/setup-denoを使うと便利です。

リンク

ここでは-A(--allow-all)を指定してますが、実際には必要なパーミッションのみを指定することをおすすめします。

脚注
  1. プライベートリポジトリについては、お使いのGitHubアカウントのプランに応じて制限が異なります。詳しくはこちらのページを参照ください。 ↩︎

  2. ↩︎