令和最新版 Google Play Console アプリアップロード自動化のための設定フロー

2022年6月時点の Google Play Console へのアプリバイナリ (apk, aab) アップロード自動化のための、主に Google Play Console や Google Cloud Platform の設定のやりかたです。

## ステップ

1. Google Play Developer API 用の鍵の発行
2. 適切な権限を設定する
3. リリース用のツールをセットアップ


## 1. Google Play Developer API 用の鍵の発行

リリース用のツールで API を触るために鍵の発行が必要です。すでに鍵がある人はこのステップをスキップできます。

### 1-1. Google Cloud プロジェクトと紐づける

まず Google Play Console にログインして 「設定」 > 「API アクセス」を開きます:

![API_アクセス-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/bd359d90-7db1-d50b-47c3-45e0500428c7.png)

そうすると 一番最初は Google Cloud プロジェクトが紐づいてないので
「新しい Google Cloud プロジェクトを作成する」か「既存の Google Cloud プロジェクトをリンクする」のどちらかを選びます。
今回はこれ用に Google Cloud プロジェクトを作成します。
(あとで外してこの状態に戻すこともできます)

したらば、権限がない場合は必要な権限を有効にするか訊かれるので OK を押すと、
しばらくしたのちに表示が変わってリンクされたダッシュボードになります:

![API_アクセス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/b980434c-bbc9-ecb1-f621-cc9cc790d6fb.png)


### 1-2. サービスアカウントを作成

サービスアカウントを使って自動化を行いますが、今はなにも作成されていないので作成します。

「サービスアカウント」の節の右端の `Learn how to create service accounts` を押します。

![API_アクセス-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/901b6a9e-4c86-6802-4625-e4d41f022fa2.png)

そうするとモーダルが出て作成手順が紹介されるので、
手順にそって Google Cloud Platform 側で作業を行いましょう。
(1) の `Google Cloud Platform` のリンクを別タブあたりで開き
こちらで作業を継続します。

![サービス_アカウント_–_IAM_と管理_–_Google_Play_Console…_–_Google_Cloud_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/8349c441-bd02-4273-ac38-02852718f7f8.png)

先ほど新規作成されたプロジェクトのサービスアカウント画面が表示されます。
「＋サービスアカウントを作成」のボタンからサービスアカウントを作成しましょう。

![サービス_アカウントの作成_–_IAM_と管理_–_Google_Play_Console…_–_Google_Cloud_Console-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/4eb74cb1-0363-bf0d-e1db-03ccab632d7a.png)

サービスアカウント名は任意です。いい感じになったら「作成して続行」ボタンを押して次のステップに移動します。

![サービス_アカウントの作成_–_IAM_と管理_–_Google_Play_Console…_–_Google_Cloud_Console-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/6dbfc5f7-ac0f-9d49-5a10-85750a492068.png)

ロールを指定できるので「サービスアカウントユーザー」のロールを指定します。

次のステップはスキップで完了してサービスアカウントを作成できました。

![サービス_アカウント_–_IAM_と管理_–_Google_Play_Console…_–_Google_Cloud_Console-2-3-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/1232193c-023e-1042-441f-1e13b30ec072.png)


### 1-3. サービスアカウントの鍵を作成

作成したサービスアカウントをツールから API 経由で操作するための鍵のファイルを作成します。

![サービス_アカウント_–_IAM_と管理_–_Google_Play_Console…_–_Google_Cloud_Console-3-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/f37885ca-a5ea-718a-8aba-44ffd86ec89e.png)

右端の「操作」メニューの「鍵を管理」を選択します。

![google-play-deploy_–_IAM_と管理_–_Google_Play_Console…_–_Google_Cloud_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/9bf556f9-50af-1656-4cf3-408087cbc066.png)

そうすると、いかにも鍵を管理しそうな画面が表示されるので、
「鍵を追加」ボタンから「新しい鍵を作成」を選択して鍵を作成します。

![google-play-deploy_–_IAM_と管理_–_Google_Play_Console…_–_Google_Cloud_Console-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/6b86c9b4-c09f-8ebe-8130-4fdbdf07cc03.png)

鍵の形式は JSON を選択して「作成」します。これで鍵のファイルが自動的にダウンロードされるので、これは大事に保管します。


## 2. 適切な権限を設定する

ここでは Google Cloud Plaform のページから、さきほどの Google Play Console の API アクセスの画面に戻ります。
閉じてた人はふたたび Google Play Console の「設定」>「API アクセス」を開きます。

![API_アクセス-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/901b6a9e-4c86-6802-4625-e4d41f022fa2.png)

このモーダルは「完了」を押して閉じます。画面が更新され、サービスアカウントに作成したアカウントが追加されているのを確認します:

![API_アクセス-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/3664fa58-2275-b330-b1a0-cfc9b57915ae.png)

右端の `Manage Play Console permissions` を選択し権限の設定を行います。

![ユーザーを招待.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/03503887-077a-30a6-afc2-8b93f7ffd626.png)

すると、ユーザーを招待の画面が表示されるので、まず「アカウントの権限」タブで権限を設定します。

![ユーザーを招待-3-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/4de16d79-e220-0157-47d9-0573448c5d1f.png)

リリースだけであればこのあたりの権限があればよいので、必要に応じて選択します。

忘れてはいけないのは「アプリの権限」タブで、このシートも表示して対象のアプリを追加しましょう。

![ユーザーを招待-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/09ec2a98-3636-ad04-b241-aa381a763a36.png)

アプリに対する権限選択の画面が出るので適宜選択します。

![ユーザーと権限の詳細-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/d68f4ba1-e5a0-cfed-e106-7d59f6af1bd6.png)

すべて指定できたら右下の「ユーザーを招待」ボタンをクリックして完了です。後で変更もできます。


## 3. リリース用のツールをセットアップ

最後にリリース用のツールをセットアップしてうまくいくか確認します。
Gradle のプラグインや Fastlane などありますが、今回は Fastlane を使いましょう。

### 3-1. Fastlane のセットアップ

Fastlane は ` brew install fastlane` あたりで導入します。
対象のアプリのプロジェクトのディレクトリで `fastlane init` すれば
対話的にセットアップできるので楽ちんです。

![-zsh.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/843a2aff-542f-0144-c43b-eb2ed4cf1018.png)

途中で `Path to the json secret file:` と鍵の位置を尋ねてくるので指定します。

### 3-2. Fastfile の調整

あとは適当に作成された `fastlane` ディレクトリの `Fastfile` をいじったりします。

```ruby
  desc "Deploy a new version to the Google Play"
  lane :deploy do
    gradle(task: "clean bundleRelease")
    upload_to_play_store(
        track: "internal",
        release_status: "draft",
        skip_upload_apk: true,
        skip_upload_metadata: true,
        skip_upload_changelogs: true,
        skip_upload_images: true,
        skip_upload_screenshots: true,
    )
  end
```

AAB をアップロードできるように `bundleRelease` にしたり
お試しなので穏当に内部テスト版としてアップロードするようにしてみます。

### 3-3. Fastlane でのデプロイ

`fastlane deploy` を行いデプロイを実行します。

![-zsh-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/f140aa17-7569-bcd9-8408-eac8e7b8b793.png)

`Google Api Error: 〜` とエラーが出ず ` Successfully finished the upload to Google Play` とリリースが作成されていれば OK です。
エラーが出た場合は権限やリリース状態などをチェックします。

権限が正しく設定されてないと `The caller does not have permission` というエラーが出ます。
エラーメッセージに沿って試行錯誤する必要があります。

Google Play Console で内部テスト版にいい感じで下書きリリースが追加されていれば OK です:

![内部テスト___Test_App-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/ac629dac-1792-dc22-031f-03f80dc8e171.png)

以上です。