2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

React × Supabase × Vercel で TODO アプリを作ってみた③~ GitHub Actions で CI/CD 編~🤖

Last updated at Posted at 2025-04-15

React × Supabase × Vercel シリーズ

ある程度、独立した内容になっていますが、ご興味あればどうぞ 💁‍♂️

はじめに

昨今のソフトウェア開発には、開発からデプロイまでのプロセスを自動化する「CI/CD (継続的インテグレーション / 継続的デリバリー)」が取り入れられていることが多いです。

よしやってみようということで、以下の React アプリを Vitest でテストし、テストがパスしたら Vercel に自動デプロイする CI/CD パイプラインGitHub Actions で構築しました ✊

GitHub Actions の利用は、
public リポジトリ:無料
private リポジトリ:プランに応じた無料枠 + 従量課金
となっています。

詳しくは以下を確認してください 🙇‍♂️
https://docs.github.com/ja/billing/managing-billing-for-your-products/managing-billing-for-github-actions/about-billing-for-github-actions

CI/CD とは

CI (継続的インテグレーション)

リポジトリにコミットがあるたび、自動でビルドやテストが実行される仕組み

CD (継続的デリバリー)

ビルドとテストが通ったら、自動でデプロイする仕組み

手順 🧑‍🏫

前提

  • Vercel にデプロイされていること
  • テストコードが書いてあること

1. Vercel と GitHub の連携を切る ✂️

デプロイは GitHub Actions に任せるので、Vercel と GitHub の連携を切ります。

このボタンをポチッと押すと

github-disconnect.png

連携が切れます。

スクリーンショット 2025-04-13 23.11.10.png

2. GitHub の Secrets に必要な環境変数を登録する 🤫

リポジトリの Settings タブの Secrets and Variables から VERCEL_TOKEN, VERCEL_ORG_ID, VERCEL_PROJECT_ID を登録します。

env.png

VERCEL_TOKEN

Vercel の Account Settings に行って

account-settings.png

Tokens から作成します。

tokens.png

↓ これが VERCEL_TOKEN です。

vercel-token.png

VERCEL_ORG_ID

Settings に行って

project-settings.png

シュルシュルッと下に行くと Team ID という子がいます。これです。

team-id.png

VERCEL_PROJECT_ID

プロジェクトの

project.png

Settings に行くと

project-settings.png

Project ID という子がいます。これです。

project-id.png

3. GitHub Actions の設定 🤖

ワークフローファイルを書きます。

今回は main ブランチに push されたらワークフローを実行しようと思います。

ルートに .github/workflows というディレクトリを作ると、その中の YAML ファイルがワークフローファイルと認識されます。

.github/workflows/deploy.yml
name: Vitest and Deploy to Vercel

on:
  push:
    branches:
      - main

jobs:
  test-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repo
        uses: actions/checkout@v3

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: 22

      - name: Install dependencies
        run: |
          cd todo-app
          npm ci

      - name: Run Vitest
        run: npx vitest run

      - name: Deploy to Vercel
        if: success()
        run: |
          npx vercel --prod --token=$VERCEL_TOKEN
        env:
          VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
          VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
          VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}

VERCEL_ORG_ID, VERCEL_PROJECT_ID は、コマンドで指定するのではなく、vercel コマンドを叩くときに勝手に参照されるっぽい?🤔
公式の例 でも env にセットしてるだけ。

vercel コマンドの使い方はこの辺を見ました。

動作確認

成功バージョン 😊

今、タイトル部分が赤字になっているので黒字に戻してみます。

スクリーンショット 2025-04-14 0.46.55.png

src/pages/TodoHome/TodoHome.tsx
<h1>Todo</h1>
src/index.css
h1 {
  font-size: 2em;
- color: red;
}

リポジトリの Actions タブからワークフローを確認できます。

実行中のワークフローをポチッと押して詳細を見に行くと

workflows.png

こんな感じで実行されています。

スクリーンショット 2025-04-14 0.48.21.png

成功 🌟

スクリーンショット 2025-04-14 0.48.55.png

黒字になりました ✌️

スクリーンショット 2025-04-14 0.50.26.png

失敗バージョン 😢

TodoUtil をぶっこわーす 💥

todo-app/src/utils/TodoUtil.ts
export class TodoUtil {
  static filterTodoItems = (
    items: Todo[],
    keyword: string,
    showingDone: boolean
  ) => {
    return items?.filter((item) => {
      if (!showingDone && item.done) {
        return false;
      }
-     return item.text.includes(keyword);
+     return item.text;
    });
  };
}

ちゃんとテストでこけました。

スクリーンショット 2025-04-14 1.01.14.png

Vercel のデプロイ履歴を見るとデプロイされていないことがわかります 👌

↓ 最新のデプロイが 1 個前のコミット

deploy-log.png

おわりに

CI/CD 実装できました 🎊

実用的には lint やステージング環境へのデプロイなど組み込むべきものが色々とありますが、ひとまず目標達成!

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?