0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloud Run functions × TypeScript 開発をしよう!Advent Calendar 2024

Day 17

Cloud Run 関数 × TypeScript 開発をしよう!【CI/CD:GitHub Actionsで CI/CD を実現する】

Last updated at Posted at 2024-12-21

はじめに

この記事では以下のことについて説明しています。

  • GitHub ActionsでCI/CDを実現する方法
  • CI/CDを実現する上で考えておきたいこと

CI/CDについてさらっと説明しましょう。

CI/CDとは

CIとは「Continuous Integration: 継続的インテグレーション」のことで、コミットのたびにテストやビルドなどを諸々を自動で実行されるようにして、品質を保ちつつ開発スピードを上げる という開発プロセスです。

CDとは「Continuous Delivery: 継続的デリバリー」のことで、変更がメインブランチにマージされたら自動でテストとビルドを行い、プロダクトをいつでもデプロイ(リリース)できる状態まで自動で整えるプロセスのことです。 実際に本番デプロイするのは自動で行わず、手動で行います。だいたいCIだけ or CDだけをやることはなく一緒にやるので「CI/CD」とまとめて呼ばれます。

また、CI/CDと合わせて語られる「継続的デプロイメント」はコードをできるだけ頻繁にデプロイして常にプロダクトを新しい状態に保つようにする 開発プロセスです。継続的デリバリーが手動でデプロイするのに対して、こちらはデプロイまで自動で行われます。

CI/CDの範囲の考え方は色々あるみたいで、継続的デリバリーと継続的デプロイメントをまとめて「CD」としたり、CIの範囲を「継続的インテグレーションと継続的デリバリー」として、CDを「継続的デプロイメント」と定義していたりします。

参考

定義はなんだってよくって、要するに品質を担保する部分(テスト)だったり本番環境への反映の準備(ビルド)などの実際の開発作業以外の部分を自動化して、開発スピードを上げていこうという考え方です。

cicd.drawio.png

GitHub Actions を利用した CI では、リポジトリ中のコードをビルドしてテストを実行できるワークフローが利用できます。本記事では「ワークフローで自動テストを実行する」テンプレートについて紹介していきます。

GitHub Actionsのワークフローを使う

  1. .github/workflows ディレクトリをプロジェクトルートに作る
  2. ワークフローファイルを構成する
  3. トリガー条件を起こす

と言う流れです。

.github/workflows ディレクトリを作成

.
├── .github
│   └── workflows
├── src
│   ├── hoge
│   └── index.ts
├── test
│   └── hoge.test.ts
└── tsconfig.json

ワークフローファイルを構成する

作成した .github/workflows にワークフローを記述する test.yml を置きます。

├── .github
│   └── workflows
│         └── test.yml # ワークフローファイル
├── src
│   ├── hoge
│   └── index.ts
├── test
│   └── hoge.test.ts
└── tsconfig.json

書き方は以下を見てください。

ビルドとテストのテンプレートが以下にあるので、Node.js用のものを見てみましょう。

テストとビルドのワークフロー
name: Node.js CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
            node-version: '20.11.0'
      - run: npm ci
      - run: npm run build
      - run: npm test

このワークフローでは、push イベントがトリガーとなって以下のアクションが順に実行されます。

  1. コードのチェックアウト: リポジトリの最新のコードを取得
  2. Node.js のセットアップ: 指定されたバージョン(20.11.0)の Node.js をセットアップ
  3. 依存関係のインストール: npm ci コマンドで依存関係をインストール
  4. ビルドの実行: npm run build コマンドでプロジェクトをビルド
  5. テストの実行: npm test コマンドでテストを実行

変更をcommitしてpushすると、ワークフローが実行されます。GitHub の Actions のタブでその結果が確認できます。

スクリーンショット 2024-12-21 15.56.17.png

おまけ: mainブランチへのPRが作成された時にワークフローを実行する

commitのたびにトリガーを発動させたくないよって言う方におすすめです。
トリガー条件を以下のように書き換えましょう。

on:
  pull_request:
    types: [opened, synchronize]
    branches: [ main ]

CDの部分は?

本カレンダーにおいてはTerraformをデプロイで使用しており、matser へのマージとそのワークフローの成功が確認できた時に terraform apply を行います。手動デプロイということで一旦これにてCD(継続的デリバリー)を達成しているとみなします(合っている?)。

CI/CDを実現する上で考えておきたいこと

チェック項目はバランスよく

今回は雑に必要最低限の機能を用意しましたが、型チェック, Lintなども追加で行っておきたいです。とはいえチェック項目を増やしすぎると実行時間が増えて無料枠をはみ出してしまうので注意です。

ワークフローのエラーには気づけるようにする

メールとかにはエラーメッセージは来ているかもですが、気付けなければ意味がありません。気付けるような通知もGitHub上で設定するなりWorkflowで設定するなりしましょう。

無料枠にできるだけ抑える

公開レポジトリであれば無料です。プライベートレポジトリであれば以下の料金になっています。無料プランであればおよそ33時間, 有料プランであれば50時間の実行時間の無料枠があります。

プラン Storage 分(月あたり)
GitHub Free 500 MB 2,000
GitHub Pro 1 GB 3,000

そんなガッツリ使うこともないでしょうが、永遠に終わらないジョブを走らせっぱなしにしてしまい、ソッコーで無料枠を使い切ってしまうなんてことがないように気をつけましょう。

おわりに

今回は簡単にCI/CDを実現する方法について説明しました。次回はなんか説明します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?