スマートフォンのディスプレイが高解像度化するのに伴ってリソースファイルがどんどん大きくなっています。その結果、アプリのサイズが肥大化してしまいます。アプリのサイズが1GBなどとなるとインストールするだけで何十分も待ちますし、スマートフォン本体やネットワークリソースも大幅に消費します。その間、ユーザは待ってくるでしょうか。
アプリのサイズを小さくすれば、それだけインストールから起動までにかかる時間が短縮できます。今回はそんなテクニックや技術を紹介します。
Instant Apps
Google、つまりAndroidが取り組んでいるのがInstant Appsです。アプリの一部を先にダウンロード、実行できるようにする技術です。アプリが必要なタイミングで素早く起動し、使い終わったらすぐに破棄するような、Webのような使い方をアプリに提案できるようになります。
Blackstorm
ゲームを瞬時に起動できるようにする技術とのことです。ゲームはHTML5で作られています。Facebookメッセンジャーの中で遊べるインスタントゲームと呼ばれる技術で使われています。
アプリリソースをクラウドに
本来アプリ内にある画像、動画などのリソースをクラウド上に保存しておくことでインストールを高速化します。そして初回起動時に必要なファイルをダウンロードしてアプリ内に展開します。
この場合、ダウンロードするファイルは必要に応じて必要なタイミングで行うのが大事です。初回起動時にすべてをダウンロードするのではアプリ内に保存しておくのと変わりません。ゲーム内のステージに応じてダウンロードするのが理想で、バックグラウンドで処理するようにすればユーザストレスは軽減されます。
リソースを画像からベクターベースに
画像などのバイナリファイルはディスプレイの高画質化に合わせてどんどん肥大化する傾向にあります。このまま肥大化を続けるのは現実的ではなくなってきてます。そこでSVGなどのフォーマットを活用する方法があります。
SVGはベクターベースなので拡大、縮小しても画質が落ちたりしません。将来的なことを考えるとSVGベースのがファイルの種類が増えずに済みます。ただしドローに合わないコンテンツ(写真など)では使えないでしょう。
リサイズ・圧縮する
高画質なのは良いことですが実際にアプリを使っているユーザとしては画質の差がそこまで分からないことがあります。拡大すると違いは分かるのですが、アプリの場合は拡大を禁止することもできます。その状態では殆ど違いは分からないはずです。
PNGにおいては可逆圧縮なので、なるべく圧縮率を高くすることでサイズを小さくできます。○のようなツールもあり、一括して圧縮できます。
ファイルフォーマットを変える
リソースの種類によって適切なファイルフォーマットを選択しましょう。JPEGは小さくなりますが、不可逆圧縮です。写真リソースには向いていますが、アイコンには不向きでしょう。色数が限られる場合はPNG8であったりGIFを選択しても良いでしょう。
色数が多いPNG画像はサイズが大きくなる傾向があります。逆にいろ数が少ない場合は画像幅や高さが大きくてもPNGのサイズはあまり変わりません。画像の種類や目的に合わせて適切なフォーマットを選びましょう。
アプリの作り手としてはなるべくいいものを提供したいと考えるはずで、最高のリソースを選択しがちです。しかしユーザ視点に立つと、速くインストールできて速く試せる方が利点としては大きいと言えます。
ダウンロードのインジケータが常に回転し続けるようなアプリは問題です。平行してダウンロードし、すぐにアプリを使える環境を整えましょう。