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 リモートキャッシングを使用するには、次の手順でこれらの変数の値を取得します。
- Vercel ダッシュボード (新しいタブで開きます) でアカウントにスコープ付きアクセストークンを作成します。
値を安全な場所にコピーします。後で必要になります。
- GitHub リポジトリの設定に移動し、「シークレット」をクリックしてから「Actions」タブをクリックします。
TURBO_TOKEN
という名前の新しいシークレットを作成し、スコープ付きアクセストークンの値を入力します。
TURBO_TEAM
という名前の新しいリポジトリ変数を作成し(「変数」タブをクリック)、チームの Vercel URL の値をvercel.com/
を除いて入力します。シークレットではなくリポジトリ変数を使用すると、GitHub Actions がログ出力でチーム名を検閲することがなくなります。
チームの URL は、ダッシュボードからチームの一般的なプロジェクト設定で見つけることができます。無料プランを使用している場合は、ユーザー名を使用できます。ユーザー名は、Vercel パーソナルアカウント設定 (新しいタブで開きます) で見つけることができます。
- 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上のモノレポ成果物をキャッシュする方法の例です。
--cache-dir
フラグをturbo build
コマンドに指定して、目的のキャッシュ出力場所を指定します。
- 目的の出力ディレクトリとして
.turbo
を使用したpackage.json
の例
{
"name": "my-turborepo",
"scripts": {
"build": "turbo run build --cache-dir=.turbo",
},
"devDependencies": {
"turbo": "1.2.5"
}
}
- 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 # ...