GitHub ActionsでのBuild Cache for React Nativeの設定
Bitrise Build Cache を使用すると、CI を Bitrise に移行することなく、GitHub Actions ワークフローで React Native のビルドを高速化できます。GitHub ホストランナーでも、Bitrise Build Hub ランナーでも、同じように動作します。
1 回のアクティベーションで、React Native ビルドが使用する 3 つのバックエンドをすべてカバーします。Android 向けの Gradle、iOS 向けの Xcode Compilation Cache、C++ 向けの ccache です。
手順を手動で実行する代わりに、AIコーディングエージェントを使ってセットアップすることもできます。AI を使ったはじめ方を参照してください。
要件Click to copy link
Bitrise Build Cache CLI v1.0.0 以降が必要です。それより前のバージョンは React Native をサポートしていません。
認証Click to copy link
GitHub Actions で Bitrise Build Cache CLI を認証する方法は3つあります。最適な方法は、ジョブの実行場所によって異なります。
- Build Hub runners
- Workspace API token
- Personal access token
Bitrise Build Hub ランナーでは、設定は不要です。マシンはすでに Bitrise Workspace に接続されているため、CLI がマシンから認証情報を取得します。トークンを作成する必要はなく、ワークフロー にシークレット、変数、環境変数を追加する必要もありません。
マシンプールは、使用する Build Cache と同じ Workspace に属している必要があります。
Build Hub ランナーでの自動認証には、Bitrise Build Cache CLI v3.10.0 以降が必要です。このページのインストールコマンドは常に最新リリースを取得するため、CLI を古いバージョンに固定している場合にのみ関係します。古い CLI はマシンの認証情報を認識できず、トークンがないというエラーで停止します。
CLI が Bitrise に接続してトークンを取得できない場合は、このページの他の方法にフォールバックします。BITRISE_BUILD_CACHE_AUTH_TOKEN と BITRISE_BUILD_CACHE_WORKSPACE_ID も設定しているジョブは引き続き動作し、それらの値がマシン自体の認証情報よりも優先されます。
GitHub ホストのランナーでは、workspace API トークン の使用を推奨します。このトークンは個人ではなく workspace に属するため、担当者のロールが変わったり退職したりしても引き続き使用できます。
トークンには、少なくとも viewer workspace ロールを付与してください。これは Build Cache にアクセスできる最も低いロールです。
ジョブには2つの値が必要です。
- トークン。機密情報のため、GitHub のシークレットに保存します。
- workspace スラッグ。機密情報ではないため、GitHub の変数として設定できます。どちらも単一のリポジトリに追加することも、組織に追加してすべてのリポジトリで使用できるようにすることもできます。
-
GitHub で、追加先のリポジトリまたは組織を開き、Settings を選択します。
-
サイドバーの Security で、Secrets and variables、Actions の順に選択します。
-
Secrets タブで New repository secret をクリックします。組織の設定を開いている場合は New organization secret をクリックします。
-
名前に
BITRISE_BUILD_CACHE_AUTH_TOKENを設定し、値に Workspace API トークンを貼り付けて、Add secret をクリックします。組織のシークレットでは、使用を許可するリポジトリも選択します。
-
Variable タブに切り替えて New repository variable をクリックします。組織の場合は New organization variable をクリックします。
-
名 前に
BITRISE_BUILD_CACHE_WORKSPACE_IDを設定し、値に Bitrise Workspace のスラッグを設定して、Add variable をクリックします。スラッグは、Bitrise Workspace の Workspace settings ページの General settings で確認できます。
-
GitHub Actions のワークフローで、両方を environment variables としてジョブに渡します。
jobs:build:env:BITRISE_BUILD_CACHE_AUTH_TOKEN: ${{ secrets.BITRISE_BUILD_CACHE_AUTH_TOKEN }}BITRISE_BUILD_CACHE_WORKSPACE_ID: ${{ vars.BITRISE_BUILD_CACHE_WORKSPACE_ID }}
Personal Access Token は、作成したユーザーと同じロールを持ちます。そのユーザーのロールが変わるとアクセス権も変わり、ユーザーが Workspace を離れると使用できなくなります。共有の CI 構成では、代わりに Workspace API トークンを使用してください。
ジョブには2つの値が必要です。
- トークン。機密情報のため、GitHub のシークレットに保存します。
- workspace スラッグ。機密情報ではないため、GitHub の変数として設定できます。どちらも単一のリポジトリに追加することも、組織に追加してすべてのリポジトリで使用できるようにすることもできます。
-
GitHub で、追加先のリポジトリまたは組織を開き、Settings を選択します。
-
サイドバーの Security で、Secrets and variables、Actions の順に選択します。
-
Secrets タブで New repository secret をクリックします。組織の設定を開いている場合は New organization secret をクリックします。
-
名前に
BITRISE_BUILD_CACHE_AUTH_TOKENを設定し、値に Personal Access Token を貼り付けて、Add secret をクリックします。組織のシークレットでは、使用を許可するリポジトリも選択します。
-
Variable タブに切り替えて New repository variable をクリックします。組織の場合は New organization variable をクリックします。
-
名前に
BITRISE_BUILD_CACHE_WORKSPACE_IDを設定し、値に Bitrise Workspace のスラッグを設定して、Add variable をクリックします。スラッグは、Bitrise Workspace の Workspace settings ページの General settings で確認できます。
-
GitHub Actions のワークフローで、両方を environment variables としてジョブに渡します。
jobs:build:env:BITRISE_BUILD_CACHE_AUTH_TOKEN: ${{ secrets.BITRISE_BUILD_CACHE_AUTH_TOKEN }}BITRISE_BUILD_CACHE_WORKSPACE_ID: ${{ vars.BITRISE_BUILD_CACHE_WORKSPACE_ID }}
ワークフローへの Build Cache の追加Click to copy link
-
Bitrise Build Cache CLI をインストールするステップを追加します。
- name: Install the Bitrise Build Cache CLIrun: curl --retry 5 -sSfL 'https://raw.githubusercontent.com/bitrise-io/bitrise-build-cache-cli/main/install/installer.sh' | sh -s -- -b /tmp/bin -d -
ビルドを実行するステップの前に、Build Cache for React Native をアクティブにするステップを追加します。
- name: Activate Bitrise Build Cache for React Nativerun: /tmp/bin/bitrise-build-cache activate react-native --cache-pushデフォルトでは、3 つのバックエンドすべてが有効です。いずれかを無効にするには、対応するフラグを指定します。
/tmp/bin/bitrise-build-cache activate react-native --gradle=true --xcode=true --cpp=falseCI は通常、キャッシュを作成する環境であるため、
--cache-pushを有効のままにしてください。 -
ネイティブビ ルドを実行するすべてのコマンドの先頭に
bitrise-build-cache react-native runを付けます。- name: Build iOSrun: /tmp/bin/bitrise-build-cache react-native run npx react-native run-ios --configuration=Release詳細については、ネイティブビルドコマンドのラップを参照してください。
ワークフローの例Click to copy link
- GitHub-hosted runners
- Build Hub runners
name: build-rn
on: [push, pull_request]
jobs:
build:
runs-on: macos-latest
env:
BITRISE_BUILD_CACHE_AUTH_TOKEN: ${{ secrets.BITRISE_BUILD_CACHE_AUTH_TOKEN }}
BITRISE_BUILD_CACHE_WORKSPACE_ID: ${{ vars.BITRISE_BUILD_CACHE_WORKSPACE_ID }}
steps:
- uses: actions/checkout@v4
- name: Install the Bitrise Build Cache CLI
run: curl --retry 5 -sSfL 'https://raw.githubusercontent.com/bitrise-io/bitrise-build-cache-cli/main/install/installer.sh' | sh -s -- -b /tmp/bin -d
- name: Activate Bitrise Build Cache for React Native
run: /tmp/bin/bitrise-build-cache activate react-native --cache-push
- name: Install JavaScript dependencies
run: yarn install
- name: Build iOS
run: /tmp/bin/bitrise-build-cache react-native run npx react-native run-ios --configuration=Release
- name: Build Android
run: /tmp/bin/bitrise-build-cache react-native run npx react-native run-android --mode=release
このジョブにトークンや environment variables は不要です。runs-on ラベルは、使用するプールを指定します。Bitrise はマシンプールごとに bitrise-runner-<pool name> ラベルを作成するため、rn-builds という名前のプールは bitrise-runner-rn-builds で指定します。
name: build-rn
on: [push, pull_request]
jobs:
build:
runs-on: bitrise-runner-rn-builds
steps:
- uses: actions/checkout@v4
- name: Install the Bitrise Build Cache CLI
run: curl --retry 5 -sSfL 'https://raw.githubusercontent.com/bitrise-io/bitrise-build-cache-cli/main/install/installer.sh' | sh -s -- -b /tmp/bin -d
- name: Activate Bitrise Build Cache for React Native
run: /tmp/bin/bitrise-build-cache activate react-native --cache-push
- name: Install JavaScript dependencies
run: yarn install
- name: Build iOS
run: /tmp/bin/bitrise-build-cache react-native run npx react-native run-ios --configuration=Release
プールのカスタムラベルを使用することもできます。詳細については、GitHub Actions ワークフローの設定を参照してください。
ベストプラクティスと制限事項Click to copy link
アクティベーションは独立したステップとして実行するClick to copy link
CLIは、$GITHUB_ENVを通じて設定を公開します。GitHub Actions は、この設定をジョブの後続のステップに適用します。Build Cacheのアクティベーションとビルドの実行を同じrun:ブロック内で行うと、ビルドは設定を認識しません。
アクティベーションは、ビルドを実行するステップより前の独立したステップで行ってください。
Workflows:フォークからトリガーされた実行にはシークレットがありませんClick to copy link
GitHubは、フォークからトリガーされたワークフローの実行に、リポジトリや Organization のシークレットを渡しません。そのような実行ではBITRISE_BUILD_CACHE_AUTH_TOKENが空になるため、CLIは認証できず、ビルドはキャッシュなしで実行されます。
依存関係のキャッシュとBuild Cacheを分けて考えるClick to copy link
actions/cacheは依存関係のキャッシュを行います。GradleやCocoaPodsのキャッシュな ど、ビルドがダウンロードするパッケージを保存し、次回の実行時に復元することで、再度取得する必要をなくします。Bitrise CIでは、キーベースのキャッシュStepsが同じ役割を果たします。詳細については、Dependencies and caching overviewを参照してください。
これは、ビルド自体の出力(コンパイル済みクラス、コンパイル済みソース、タスクの結果)を再利用するBitrise Build Cacheとは別の役割です。この2つは組み合わせて効果を発揮するため、引き続き依存関係をキャッシュしてください。
やってはいけないのは、ビルドの出力をdependency cacheに含めることです。たとえば、actions/cacheがGradleのローカルのbuild cacheディレクトリ(~/.gradle/caches/build-cache-1)を復元すると、復元されたローカルコピーが、Bitrise Build Cacheが提供するはずの結果を返してしまい、リモートキャッシュのヒット率がほぼゼロまで低下します。キャッシュするのは依存関係のディレクトリであり、ビルド出力のディレクトリではありません。
セットアップの確認Click to copy link
- ワークフローを実行します。アクティベーションStepが正常に完了し、接続したキャッシュエンドポイントがログに記録されるはずです。
- WorkspaceのBuild Cacheページを開きます。実行したビルドが、ビルドのキャッシュ統計とともにinvocation listに表示されます。
- 最初の実行では、キャッシュヒット率は0%と報告されます。この時点ではキャッシュが空のためで、想定どおりの動作です。
- キャッシュをウォームアップするため、ワークフローをさらに1~3回実行してください。ヒット率が0%を超えるはずです。