This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

EAS Workflows でプルリクエスト向けのプレビュービルドを作成する

ページを編集

EAS Workflows を使って、Slack 通知や PR プレビューのためのプレビュービルドワークフローを作成する方法を学びます。


作業中のモバイルの変更をチームメイトやプルリクエスト(PR)のレビュアーに共有しようとすると、ブランチをチェックアウトしてローカルで開発サーバーを起動してもらう必要が生じがちです。

この章で学べること

  • 内部配布向けのプレビュービルドを、フィンガープリントを使って自動化する
  • ビルドが完了したときに Slack へ通知を投稿する
  • プルリクエストのたびに OTA アップデートを公開し、テスト用のリンクを PR にコメントする

前提条件

3

1.

expo-updates のインストール

expo-updates ライブラリをインストールします。

Terminal
npx expo install expo-updates

2.

EAS Update の設定

EAS Update を設定するには、次のコマンドを実行します。

Terminal
eas update:configure

上のコマンドは、app.json にアップデートの URL とランタイムバージョンを追加し、eas.json の各ビルドプロファイルに channel フィールドを追加します。

3.

プレビュービルドの作成

PR プレビューアップデートを受け取るには、レビュアーのデバイスに expo-updates と EAS Update のチャンネルが組み込まれたプレビュービルドがインストールされている必要があります。作成するには次のコマンドを実行します。

Terminal
eas build --profile preview --platform all

expo-updates はネイティブライブラリなので、このビルドにはそのネイティブコードと eas.json のチャンネルの両方が埋め込まれます。また、上のコマンドを実行することで、初回のプレビュービルド時に EAS CLI が認証情報を生成できます。

プレビュービルド向けの build ジョブタイプ

チームは、ステークホルダーによるテストのためにプレビュービルドを使用します。メンバーは内部配布を通じて、そのビルドを自分のデバイス/エミュレーター/シミュレーターにインストールします。変更をテストするために開発サーバーを起動したり、ブランチをチェックアウトしたりする必要はありません。

開発ビルドのときと同じように、ネイティブコードに変更がないときの不要な再ビルドを避けるためにフィンガープリントを追加します。

1

preview.yml を追加する

.eas/workflows/ の中に preview.yml という新しいファイルを追加しましょう。このワークフローファイルでは preview プロファイルを使用します。

.eas/workflows/preview.yml
name: Preview builds jobs: fingerprint: name: Fingerprint type: fingerprint environment: preview get_android_build: name: Check for existing Android build needs: [fingerprint] type: get-build params: fingerprint_hash: ${{ needs.fingerprint.outputs.android_fingerprint_hash }} profile: preview get_ios_build: name: Check for existing iOS build needs: [fingerprint] type: get-build params: fingerprint_hash: ${{ needs.fingerprint.outputs.ios_fingerprint_hash }} profile: preview build_android: name: Build Android needs: [get_android_build] if: ${{ !needs.get_android_build.outputs.build_id }} type: build params: platform: android profile: preview build_ios: name: Build iOS needs: [get_ios_build] if: ${{ !needs.get_ios_build.outputs.build_id }} type: build params: platform: ios profile: preview

2

ワークフローを実行する

次のコマンドでワークフローを手動で実行します。

Terminal
eas workflow:run .eas/workflows/preview.yml

EAS ダッシュボードでは、このワークフローが開発ビルドで実装したものと同じフィンガープリントのパターンをたどっていることが分かります。プレビュービルドを作成するのは初めてなので、Android と iOS のビルドジョブが実行されます。ネイティブコードを変更せずに main ブランチへ別のコミットをプッシュした場合は、互換性のあるビルドがすでに存在するため、ワークフローはビルドジョブをスキップします。

Slack 通知

多くのチームは、EAS ダッシュボードを確認しなくてもビルドの状況が分かるように、ビルド通知に Slack を使っています。ビルドが完了(またはスキップ)したとき、事前パッケージ済みの slack ジョブがステータスをチャンネルに投稿します。

1

Slack の Webhook URL を作成する

EAS Workflows から Slack のチャンネルにメッセージを送るには、Slack の設定から Webhook URL を取得する必要があります。

  1. api.slack.com/apps にアクセスして、新しい Slack アプリを作成します(既存のものを使ってもかまいません)。
  2. Features の下にある Incoming Webhooks を選択し、有効に切り替えます。
  3. Add New Webhook をクリックし、通知を投稿するチャンネルを選択します。
  4. Webhook URL をコピーします。https://hooks.slack.com/services/TD000/B000/XXXXXXXXXX のような形式です。
  5. この Webhook URL を SLACK_WEBHOOK_URL という名前の EAS 環境変数として追加します。EAS ダッシュボードでプロジェクトの Environment variables ページを開き、preview 環境用の変数を作成して、可視性secret に設定します。この値を読み取る必要があるのは EAS のサーバーだけだからです。EAS CLI で作成することもできます。
Terminal
eas env:set --name SLACK_WEBHOOK_URL --value https://hooks.slack.com/services/TD000/B000/XXXXXXXXXX --environment preview --visibility secret

2

Slack 通知のジョブを追加する

preview.yml を更新して、ビルドジョブのあとに notify ジョブを追加しましょう。notify ジョブでは webhook_urlmessage のパラメーター、または Slack Block Kit でリッチな装飾を行うための payload パラメーターを使用します。このジョブは、environment フィールドを通じて先ほど作成した SLACK_WEBHOOK_URL 環境変数から Webhook URL を読み取ります。ジョブはデフォルトで production 環境を使うため、ここで environment: preview を指定することでこの変数が利用可能になります。

.eas/workflows/preview.yml
name: Preview builds jobs: fingerprint: # ... get_android_build: # ... get_ios_build: # ... build_android: # ... build_ios: # ... notify: name: Notify on Slack after: [build_android, build_ios] type: slack environment: preview params: webhook_url: ${{ env.SLACK_WEBHOOK_URL }} message: 'Preview builds are ready - Android: ${{ after.build_android.status }}, iOS: ${{ after.build_ios.status }}'

after フィールドによって、結果にかかわらずビルドが終わった時点で通知が送られます。message では ${{ after.build_android.status }}${{ after.build_ios.status }} を使って、各プラットフォームの結果(成功、失敗、スキップ)を含めています。これでチームは Slack を離れずに状況を把握できます。

3

ワークフローを実行する

次のコマンドでワークフローを手動で実行します。

Terminal
eas workflow:run .eas/workflows/preview.yml

EAS ダッシュボードで、Notify on Slack ジョブが正常に実行されたことを確認できます。

アプリと連携している Slack のチャンネルでも確認できます。

EAS Update を使った PR プレビュー

PR のレビュアーは差分を読むことはできますが、変更を目で見て確かめたり、デバイス上でテストしたりはできません。

web のチームは、これをデプロイプレビューで解決しています。誰かがプルリクエストを開くと、CI/CD のワークフローがプレビューリンクを生成します。レビュアーはそのリンクを開くだけで、ブランチをチェックアウトせずに変更を確認できます。

モバイルでも、EAS Update を使って同じことができます。EAS Update は、互換性のあるビルドがすでにインストールされているデバイスへ JavaScript バンドルを配信するので、ネイティブのコンパイルの工程を省けます。PR プレビューにアップデートが向いているのは、レビュアーがすぐに開いてテストし、そのまま PR にフィードバックを残せるからです。

EAS Workflows はこのために、事前パッケージ済みの github-comment ジョブを提供しています。アップデートが公開されたあとにプルリクエストへコメントを投稿し、レビュアーが自分のデバイスでアップデートを開けるようリンクや QR コードを渡します。

1

pr-preview.yml を作成する

.eas/workflows/ の中に pr-preview.yml という新しいファイルを追加しましょう。このワークフローは on.pull_request トリガーによって、プルリクエストが作成されたときに実行されます。update ジョブタイプでアップデートを公開するだけの内容で、そのあとアップデートへのリンクを PR にコメントします。

.eas/workflows/pr-preview.yml
name: PR Preview on: pull_request: branches: ['*'] jobs: publish_preview: name: Publish PR preview update type: update environment: preview params: channel: preview comment: needs: [publish_preview] type: github-comment

2

プルリクエストでテストする

GitHub リポジトリでプルリクエストを作成して、ワークフローをテストしてみましょう。プルリクエストには main とは別のブランチが必要です。次のコマンドを実行して、新しいブランチを作成して切り替えます。

Terminal
git checkout -b test-preview

続いて、Expo プロジェクトに目に見える変更(たとえばテキストや背景色の変更)を加えます。そのうえで、コミットしてブランチをプッシュします。

Terminal
git add .
git commit -m "Test PR preview"
git push origin test-preview

GitHub で test-preview から main へのプルリクエストを開きます。プルリクエストを作成すると、ワークフローが自動的に実行されます。EAS ダッシュボードでは、まず publish_preview ジョブが実行され、それが成功したあとに comment ジョブが実行されることを確認できます。

GitHub のプルリクエストには、デバイスでアップデートをテストするためのリンクまたは QR コードを含んだコメントが表示されるはずです。

コメント内のリンクや QR コードを使えば、デバイスやエミュレーター/シミュレーターでアップデートを開いて、変更をテストできます。

まとめ

第 3 章:プレビュービルド

フィンガープリントを使ったプレビュービルドのワークフローを作成し、ビルドのステータスを知らせる Slack 通知を追加し、EAS Update による PR プレビューを設定して、レビュアーがブランチをチェックアウトせずに変更をテストできるようにしました。

次の章では、EAS Workflows のジョブで Maestro によるエンドツーエンドテストを実行する方法を学びます。

次へ:E2E テスト