この記事では、Google Cloud の Workload Identity 連携を活用し、シークレット情報を直接 GitHub 上に置かずに GitHub Actions から Google Play Store へのアプリデプロイを実現する方法を解説します。
Table of Contents
- 今回の方法の概要
- 事前準備:Google Cloudのプロジェクトを作成する
- サービスアカウントを作成する
- サービスアカウントにアクセス権を与える
- Workload Identity 連携の設定をする
- Google Play Android Developer APIを有効化する
- プロジェクトの中身を編集する
- ワークフローを修正する
- JSON形式のサービスアカウントキーを配置するアクションを削除する
- ジョブに権限を追加
- ステップを追加
- GitHubでリポジトリの設定を編集する
今回の方法の概要
- 今回は、CI上でのデプロイに Fastlane を使用します。プロジェクトでAndroid用にFastlaneがセットアップされている前提となります。2025/10/24現在の最新版は Workload Identity 連携を使用した認証に対応していない ため、私がフォークして修正したバージョンを利用します。本番で利用したい場合は、自身でフォークされることを推奨します。(本家はしばらくメンテされず放置されているようです。)
- デプロイ先は 内部テストトラック となります。製品版のリリース作業はWeb上で行う想定です。
- 説明にあるGoogle CloudなどのUIは、2025年10月頃のものです。今後変更される可能性があります。
事前準備:Google Cloudのプロジェクトを作成する
まず、事前準備として、Google Cloud上にアプリ用のプロジェクトを作成します。既にFirebaseの利用やSign in with Googleなどで、そのアプリ専用のプロジェクトが存在している場合は、新規に作成せず、そちらを使っても構いません。
まず、Google Cloud Console にアクセスし、左上のプロジェクト選択をクリックします。
「新しいプロジェクト」をクリックします。
表示されたフローに従って、プロジェクト名にアプリ名を含めて、プロジェクトを作成してください。
サービスアカウントを作成する
プロジェクトができたら、ユーザーに代わってアプリのデプロイを担うサービスアカウントを作成します。メニューから「IAMと管理」→「サービス アカウント」をクリックします。
上部の「サービス アカウントを作成」をクリックします。
サービスアカウント名は「google-play-deploy」など、わかりやすい適当な名前を設定します。その少し下に メールアドレス が表示されていますが、これは後で使うため、右にある コピーボタンをクリック してコピーしておいてください。コピーし忘れても、サービスアカウントのリストから確認できます。
他は何もいじる必要はないため、「完了」をクリックして作成します。
サービスアカウントにアクセス権を与える
サービスアカウントが出来たら、新しいタブを開き、Google Play Console にアクセスします。
メニューから「ユーザーと権限」を選択し、「新しいユーザーを招待」をクリックします。
「メールアドレス」には先程コピーしたメールアドレスを入力します。少し下にスクロールし、「アプリの権限」で 今回デプロイするアプリのみ を選択します。
次に、サービスアカウントに与える権限を付与します。付与する権限は
- アプリ情報の閲覧(読み取り専用)
- テスト版トラックとしてのアプリのリリース
この2つを選択してください。
最後に、「ユーザーを招待」をクリックします。サービスアカウントにおいては、招待を承諾する必要はなく、すぐに使えるようになります。
Workload Identity 連携の設定をする
権限を付与できたら、Google Cloud Consoleに戻り、メニューから「Workload Identity 連携」をクリックします。その右にある「開始」をクリックします。
名前 を「GitHub Actions」とし*、続行 をクリックします。
* 名前は任意ですが、今後この名前に基づいて説明を行います。
以下のように入力し、続行 をクリックします。
| フィールド名 | 値 |
|---|---|
| プロバイダの選択 | OpenID Connect (OIDC) |
| プロバイダ名 | GitHub |
| 発行元(URL) | https://token.actions.githubusercontent.com |
| オーディエンス | 許可するオーディエンス |
| 対象1 | リポジトリのあるGitHub プロフィールのURL(https://github.com/<username>の形式) |
以下のように入力します。
| フィールド名 | 値 |
|---|---|
| OIDC 1 | assertion.sub |
| マッピングを追加 | |
| Google 2 | attribute.repository |
| OIDC 2 | assertion.repository |
最後に 保存 をクリックします。
すると、プールの詳細画面に移動すると思います。少し下にある「IAMプリンシパル」の文字列のうち、下の画像で選択されている部分は後で使うため、コピーしておいてください。「projects」から「actions」までです。
次に、画面上部の アクセスを許可 をクリックします。
サービス アカウントの権限借用を使用してアクセス権を付与する を選択し、先程作成したサービスアカウントを選択します。プリンシパルの属性名を repository を選択し、属性値には <GitHubユーザー名>/<リポジトリ名>の形式で入力します。そして 保存 をクリックします。
Google Play Android Developer APIを有効化する
https://console.cloud.google.com/marketplace/product/google/androidpublisher.googleapis.com
こちらにアクセスし、Google Cloudからアプリの管理を行うための API を有効化します。これをやらないと失敗します。
プロジェクトの中身を編集する
次に、デプロイしたいアプリのプロジェクトの fastlane ディレクトリを確認します。Appfile の中身を以下のようにしてください。
json_key_file(ENV["GOOGLE_GHA_CREDS_PATH"])
package_name("<package name>")
現在、Fastlaneで、Workload Identity連携を用いて作成されたサービスアカウントキーを使用して認証を行おうとすると、エラーが発生するようです。この問題を修正したフォークを用意したので、Fastlaneをこちらに差し替えます。Gemfileを編集します。
source "https://rubygems.org"
gem "fastlane", git: "https://github.com/chika3742/fastlane-workload-support.git", branch: "support-workload"
ワークフローを修正する
次に、GitHub Actionsのワークフローを修正していきます。既にFastlaneを用いた自動化は実装が完了していると仮定し、変更が必要な箇所のみ説明します。
JSON形式のサービスアカウントキーを配置するアクションを削除する
JSON形式のサービスアカウントキーをsecretsなどから読み取って配置するアクションを削除します。同様に、GitHub上でリポジトリの設定から該当するリポジトリシークレットも削除してください。
ジョブに権限を追加
ジョブの設定に、permissionsを追加します。
jobs:
play-store-deploy:
# ...
permissions:
contents: read
id-token: write
ステップを追加
Google Cloudの認証用のステップを Fastlaneを実行するステップより上 (checkoutよりは下)に追加します。
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v3
with:
workload_identity_provider: ${{ secrets.WIF_PROVIDER }}
service_account: ${{ secrets.WIF_SERVICE_ACCOUNT }}
audience: ${{ vars.WIF_AUDIENCE }}
GitHubでリポジトリの設定を編集する
次に、リポジトリシークレットに「Workload Identity プロバイダーID」「サービスアカウントID」の2つを追加します。これらは機密情報ではありませんが、公開するのはあまり好ましい部類の情報ではありませんので、シークレットとすることを推奨します。
| 変数名 | 値 |
|---|---|
| WIF_PROVIDER | Workload Identity プロバイダーID(詳細は下記) |
| WIF_SERVICE_ACCOUNT | 先程コピーした、サービスアカウントのメールアドレス |
Workload Identity プロバイダーIDは、以下の形式で構成されます。
projects/123456789/locations/global/workloadIdentityPools/my-pool/providers/my-provider
この中の123456789はGCPプロジェクト番号、my-poolはWIFプールID、my-providerはWIFプロバイダーIDです。先程「IAMプリンシパル」からコピーした文字列の末尾に/providers/githubを追加すると、この形式になります。
続いて、オーディエンス、つまりユーザープロフィールのURLをリポジトリ変数に追加します。これはあまり秘匿すべき情報ではないので、シークレットでなくても構わないかと思います。Variablesから同様に追加してください。
| 変数名 | 値 |
|---|---|
| WIF_AUDIENCE | https://github.com/<ユーザー名> |
















