リポジトリ
ドキュメント
GitHub Actions

GitHub Actions で Turborepo を使用する

次の例は、GitHub Actions (新しいタブで開きます) で Turborepo を使用する手順を示しています。

ルートの package.json がある場合

{
  "name": "my-turborepo",
  "scripts": {
    "build": "turbo run build",
    "test": "turbo run test"
  },
  "devDependencies": {
    "turbo": "1.2.5"
  }
}

そして turbo.json がある場合

{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
  "pipeline": {
    "build": {
      "outputs": [".next/**", "!.next/cache/**"],
      "dependsOn": ["^build"]
    },
    "test": {
      "dependsOn": ["^build"]
    }
  },
}

リポジトリに .github/workflows/ci.yml という名前のファイルを作成し、次の内容を入力します。

name: CI
 
on:
  push:
    branches: ["main"]
  pull_request:
    types: [opened, synchronize]
 
jobs:
  build:
    name: Build and Test
    timeout-minutes: 15
    runs-on: ubuntu-latest
    # To use Remote Caching, uncomment the next lines and follow the steps below.
    # env:
    #  TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
    #  TURBO_TEAM: ${{ vars.TURBO_TEAM }}
    #  TURBO_REMOTE_ONLY: true
 
    steps:
      - name: Check out code
        uses: actions/checkout@v4
        with:
          fetch-depth: 2
 
      - name: Setup Node.js environment
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: 'npm'
 
      - name: Install dependencies
        run: npm install
 
      - name: Build
        run: npm run build
 
      - name: Test
        run: npm run test

リモートキャッシング

GitHub Actions でリモートキャッシングを使用するには、次の環境変数を GitHub Actions ワークフローに追加して、turbo コマンドで使用できるようにします。

  • TURBO_TOKEN - リモートキャッシュにアクセスするための Bearer トークン
  • TURBO_TEAM - モノレポが属するアカウント

Vercel リモートキャッシングを使用するには、次の手順でこれらの変数の値を取得します。

  1. Vercel ダッシュボード (新しいタブで開きます) でアカウントにスコープ付きアクセストークンを作成します。

Vercel Access Tokens

値を安全な場所にコピーします。後で必要になります。

  1. GitHub リポジトリの設定に移動し、「シークレット」をクリックしてから「Actions」タブをクリックします。TURBO_TOKEN という名前の新しいシークレットを作成し、スコープ付きアクセストークンの値を入力します。

GitHub Secrets GitHub Secrets Create

  1. TURBO_TEAM という名前の新しいリポジトリ変数を作成し(「変数」タブをクリック)、チームの Vercel URL の値を vercel.com/ を除いて入力します。シークレットではなくリポジトリ変数を使用すると、GitHub Actions がログ出力でチーム名を検閲することがなくなります。

GitHub Repository Variables

チームの URL は、ダッシュボードからチームの一般的なプロジェクト設定で見つけることができます。無料プランを使用している場合は、ユーザー名を使用できます。ユーザー名は、Vercel パーソナルアカウント設定 (新しいタブで開きます) で見つけることができます。

Vercel Account Slug

  1. GitHub Actions ワークフローの一番上に、turbo を使用するジョブに次の環境変数を指定します。
# ...
 
jobs:
  build:
    name: Build and Test
    timeout-minutes: 15
    runs-on: ubuntu-latest
    # To use Turborepo Remote Caching, set the following environment variables for the job.
    env:
      TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
      TURBO_TEAM: ${{ vars.TURBO_TEAM }}
 
    steps:
      - name: Check out code
        uses: actions/checkout@v4
        with:
          fetch-depth: 2
    # ...

github actions/cache を使用したキャッシング

以下の手順は、actions/cache (新しいタブで開きます) を使用してGitHub上のモノレポ成果物をキャッシュする方法の例です。

  1. --cache-dir フラグをturbo build コマンドに指定して、目的のキャッシュ出力場所を指定します。
  • 目的の出力ディレクトリとして.turbo を使用したpackage.json の例
{
  "name": "my-turborepo",
  "scripts": {
    "build": "turbo run build --cache-dir=.turbo",
  },
  "devDependencies": {
    "turbo": "1.2.5"
  }
}
  1. CIファイルのビルドステップの前に、actions/cache@v3 アクションを使用するステップで、GitHubパイプラインを構成します。
  • actions/cache アクション内で設定されたpath 属性が、上記の出力場所と一致することを確認します。

    • 以下の例では、path.turboに設定されています。
  • key 属性で、現在のランのキャッシュキーを指定します。

    • 以下の例では、ランナーのOSとGitHubのSHAの組み合わせをキャッシュキーとして使用しました。
  • restore-keys 属性で、目的のキャッシュプレフィックスパターンを指定します。このパターンは、将来のCIランでも有効なままにしておく必要があります。

    • 以下の例では、${{ runner.os }}-turbo- をキャッシュキープレフィックスパターンとして使用して検索します。これにより、github.sha が変更されても、後続のCIランでキャッシュにヒットできます。
  • 選択したキャッシュフォルダとして.turbo を使用したCI YAMLの例

      # ...
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - name: Check out code
            uses: actions/checkout@v4
     
          - name: Cache turbo build setup
            uses: actions/cache@v4
            with:
              path: .turbo
              key: ${{ runner.os }}-turbo-${{ github.sha }}
              restore-keys: |
                ${{ runner.os }}-turbo-
     
          - name: Setup Node.js environment
            uses: actions/setup-node@v4
            with:
              node-version: 20
              cache: 'npm'
     
          - name: Install dependencies
            run: npm install
     
          - name: Build
            run: npm run build
        # ...