eas credentials――クレデンシャル管理の革命(1)
ここからは、筆者が「EASに触れて最初に感動したコマンド」として推したいeas credentialsを紹介します。モバイルアプリのリリースで最も手間のかかる「クレデンシャル管理」を、Expoが運用するクラウドに丸ごと引き取ってもらえる、非常に強力なコマンドです。
モバイルアプリの署名に必要なクレデンシャル
まず前提として、iOS/Androidアプリをビルドしてストアに提出するには、プラットフォームごとに異なるクレデンシャル(署名用の鍵類)を揃える必要があります(図3)。
iOS側で必要になる主なものは次の3種類です。
- Distribution Certificate:Apple Developer Programの有効な開発者であることを証明する証明書
- Provisioning Profile:アプリID・証明書・配布形態(Ad Hoc/App Store/Enterprise)を紐付けるプロファイル
- Push Notification Key(任意):プッシュ通知を送るための認証キー
一方、Android側はシンプルで、基本的にはキーストア(Keystore)ファイル一種類で完結します。ただしキーストアはアプリのアイデンティティそのものなので、紛失するとそのアプリの更新ができなくなる、非常に重要なファイルです。Play Consoleへのデプロイに必要なアップロード鍵とストア配信時の署名に使用されるアプリ署名鍵のうち、署名鍵はPlay Consoleに保存しておけますが、アップロード鍵はリリースビルドを行うマシンで扱う必要があります。
EASなしの世界
eas credentialsのありがたみを実感してもらうために、EASを使わなかった場合に何をすることになるかを軽く振り返ります。
iOSなら、Apple Developer Programのダッシュボード(developer.apple.com)にブラウザでログインし、Certificates, Identifiers & Profilesのページで証明書を発行し、App IDを登録し、Provisioning Profileを作ってダウンロードする……という手順を踏みます。
チームメンバーに共有するには、生成した.p12ファイルや.mobileprovisionファイルをGit 管理するか、何らかのセキュアストレージ経由で渡すか、といった運用を自分たちで設計する必要があります。Fastlaneのmatchを使えば暗号化Gitリポジトリを経由した共有の仕組みに乗れますが、そのためにはまた別途Matchfileの設定を書き、チームで運用ルールを決める必要があります。
Androidのキーストアもkeytoolコマンドで生成した.keystoreファイルの保管・共有をどうするかをチームで決めることになります。うっかりGitに平文でコミットされた日には、リポジトリのアクセス権がある全員にリリース署名権限が流出することになります。
こうした作業がアプリの数やチームの数だけ発生します。面倒な上に、ミスが即インシデントにつながります。
eas credentials の対話的UIをウォークスルーする
前置きが長くなりましたが、EASを使う世界ではこれらをすべてeas credentialsコマンドの対話的UIに任せられます。サンプルプロジェクトのルートで次のコマンドを叩いたとします(リスト1。easコマンドのインストール方法は後述します)。
eas credentials
プラットフォーム(iOS/Android)を選ぶと、そのプロジェクトに紐づくクレデンシャルのメニュー画面に入ります。図4はiOSでメニューに入った直後、まだ何もクレデンシャルが登録されていない状態の表示例、図5はAndroidでビルドを走らせた後にキーストアが登録済みになっている状態の表示例です。
ここでは次の操作が、すべてコマンドラインの対話だけで完結します。
- クレデンシャルの新規生成:Distribution CertificateやProvisioning Profile、Androidキーストアを EAS 側で自動生成し、クラウドに保管
-
既存クレデンシャルの登録:すでに手元にある
.p12/.keystoreをEASにアップロードして、以降クラウドで一元管理 - 現在の設定の確認・ダウンロード:登録済みクレデンシャルの一覧表示、ローカルへのダウンロード
- クレデンシャルの差し替え:プッシュキーを差し替えたい、証明書を再発行したい、といった更新操作
特に強力なのが、iOSの証明書やProvisioning ProfileをEAS側がApple Developer ProgramのAPI経由で直接発行してくれる点です。Apple IDでのログインを求められ、二要素認証を通過した後は、EASがバックグラウンドで必要な証明書類をApple側に発行登録し、そのままクラウドに保管してくれます。開発者がAppleのダッシュボードを開く必要はありません。
なお、iOSのクレデンシャル管理を始める前にはapp.jsonのios.bundleIdentifierを設定しておく必要があります(後述のAndroidパッケージ名と同じくio.github.<アカウント名>.<アプリ名>形式が無難です)。
チームで共有するときも、eas credentialsでクレデンシャルをEAS上のプロジェクトに紐付けておけば、他のメンバーはeas buildを叩くだけで同じクレデンシャルを使ってビルドできます。.p12ファイルをSlackで送り合う運用は過去のものになります。
