Androidアプリ開発のキーストアとエイリアスについて

Monacaを使いAndroidアプリを開発している際、アプリのビルドに必要なキーストア(keystore)とエイリアス(alias)の仕組みがよくわからず悩んだのでメモしておきます。

APKビルド時の署名

まずはGoogle Playの署名システムについておさらいします。

Google Playにアプリを登録するにはAPKファイルをアップロードしますが、このAPKファイルをビルドする際に行うのが署名作業です。Googleはこの署名によって「誰がこのアプリを開発したか」を識別し、アップデート用APKファイルがアップロードされる度に同じ署名がついているかどうかで正規のAPKファイルだと認識します。

署名作業はアプリのビルド時に行われますが、その際には「キーストアファイル」と「キーストアのパスワード」、「エイリアスのパスワード」が必要です。このうちひとつでも紛失するとアプリを二度とアップデートできなくなりますので、これらのファイル・パスワードは厳重に管理しないといけません。

キーストア(Keystore)とエイリアス(alias)について

署名作業を行うには、事前にキーストアとエイリアスを作成しておかなければなりません。
Monacaのドキュメントでは以下のように紹介されています。

キーストアは、バイナリーファイルです。単数または複数の秘密鍵と証明書のセットを格納するために使用します。秘密鍵は、組織または個人を表す 「 判子 」 の役割をします。

エイリアス : アプリの署名時に使用する秘密鍵の名前です。1 つのキーストア内に、複数のエイリアスを格納できます。

だいぶわかりにくいですが、イメージとしてはキーストアが「証明書を保管する金庫」で、エイリアスが「証明書」です。キーストア(金庫)の中には複数のエイリアス(証明書)を保管することができ、最低ひとつのエイリアスがあれば複数のアプリを署名しビルドすることができます。

Monacaではダッシュボードの「Androidキーストア設定」でキーストアとエイリアスを作成します。
「Androidアプリのビルド」 -Monaca Docs-

その他の開発環境や、Monacaで作成したキーストアやエイリアスのパスワードなどを変更したい場合には、「Java SDK」の「keytool」を利用します。
keytool – 鍵と証明書の管理ツール -Oracle Help Center-

複数のアプリを開発する際のキーストア設定

キーストアはアプリ毎に個別に作成するべきか

複数のアプリを開発する際には「ひとつのキーストアを複数のアプリで共有」します。キーストアというのは証明書を保管するための単なる入れ物なので、複数の入れ物を持っておく必要はありません。もし証明書が複数必要でも、入れ物(キーストア)はひとつで十分です。

エイリアスはアプリ毎に変えるべきか

エイリアス(証明書)も「ひとつのエイリアスを複数のアプリで共有する」ことが一般的なようです。これは、そもそも証明書の考え方が「開発をする法人や個人を表す印」なので、開発者が複数の証明書を使い分けるのは好ましくないという発想なのだと思います。

Googleの「Android Developers」公式ドキュメントでも、開発者(個人も法人も)は唯一の証明書(エイリアス)を使ったほうが良いと解説されています。

一般に、すべてのデベロッパーに推奨される戦略は、アプリケーションの予期される使用期間を通じて同じ証明書ですべてのアプリケーションに署名することです。このようにするには、複数の理由があります:

アプリケーションへの署名 -Android Developers-

上記のドキュメントで説明されている「同じ証明書を使う理由」をざっくりまとめると、「証明書が同じアプリ間ではさまざまなアプリ間連携機能を行うことができる」ということみたいです。どのような便利さがあるのかは自分の知識では不明なのですが、とりあえず特に理由がなければエイリアスは共有しましょう、というのがGoogleのスタンスなようです。

がしかし、自分は以下の理由からアプリごとにエイリアスを分けることにしました。

アプリごとにエイリアスを作って署名を行うと、

  1. グループで開発を行っている場合、特定のアプリのアップデート権限のみを担当の開発者に与えることができる
  2. アプリを譲渡したい場合、譲渡したいアプリの証明書のみを譲渡先に渡すことができる

という利点があるのではと思います。

「アプリ連携」をとるか「アプリのビルト権限分割」をとるかでエイリアスの運用方法を決めるといいのではないでしょうか。