ちょっと時間経っちゃいましたが、2019年2月20日、日本Androidの会の定例会で「PWA が Google Playに!?」と題して、今ちょっと話題になっている PWA の APK 化についてお話ししてきました。

スライドはこちらにアップしています。

聴いていただいた皆さんからの反応も上々で、まだまだリサーチ不足で試してみないとまだ回答できないような疑問もいくつかいただき、やってよかったと思いました。
追々そういった疑問点も検証して公開していけたらと思います。

ちなみにこのときの講演の動画もあります。
よかったら見てみてください。

このスライドの中でふれていることは、ほとんど該当のブログやGoogle Developersの要約を和訳したような感じで、自分の言葉で語っているところは少なめなのですが、この内容を解説する前にちょっとこの技術のもたらす影響について僕の思うところを語ってみたいと思います。

あと、この技術、PWAという部分は「Webアプリ」と表現したほうがしっくりくる気がするのですが、ここではあえて、PWAとして進めていきます。

PWAがネイティブアプリに組み込めるということ

今これを書いている最中、上記のスライドのビューが思った以上のペースで読まれていてちょっとびっくりしています。
それだけ注目度の高いトピックスってことですね。

PWAがネイティブアプリに組み込めることの意味するところは、PWAがネイティブアプリに劣る部分、ネイティブアプリでないと実現できない機能をカバーできることからくるPWAへの安心感というのが一番大きいのではないかと思っています。

PWAを作っておけば、PWAで機能が満たせないようなことが起きても、PWAを捨てて最初からアプリを開発する必要はなく、後々これをベースにネイティブアプリへの拡張をしていけます。
PWAで一応の最低要件が満たせていたとして、さらにリッチな機能を実装したい、といったことにも対応していける余地ができた、あるいは 最初からネイティブアプリの開発を視野に入れてPWAを制作することもできるようになった、ということです。

長らくPWAは「来るの?来ないの?」が議論されたり、なかなか一般化の堰が切れない技術であり続けています。
アプリのベースにもなれる、という後ろ盾はきっとPWAの普及の一助になると思います。

ビジネス的、実務的にも、PWAを推しやすくなるのではないかと期待しています。

では本題、PWAのAPK組み込みについて初歩的な部分をご紹介します。

TWA on Chrome 72

2月初旬、この記事で Twitter や Facebook のタイムラインが賑わいました。

Google Play Store now open for Progressive Web Apps 😱
https://medium.com/@firt/google-play-store-now-open-for-progressive-web-apps-ec6f3c6ff3cc

タイトルだけ見るとなんだか新しいようなそうでもないような・・・それでいて、もし簡潔に PWA そのものが載るようであれば、これは大事件だと思いました。
さて、実際のところどうなのでしょうか。

どんな技術で構成されているのか

おおまかに、PWA を APK にする(=Google Playに載せる)技術としては、このような感じで説明されています。

  • Chrome 72 for Android 公開!
  • Chrome 72 から Trusted Web Activity が実装されたよ!
  • PWA が Google Play Store に載せられるようになったよ!
  • サクッと URL 登録して完了!とはいかない、手順多い。
  • Chrome と通信する Java の API
  • Cordova みたいな Web リソースをパッケージングするようなものではない。
  • セッション、ストレージ、キャッシュなどは Chrome と共有

結局のところ、PWA はそのままで Google Play に載せられるようになったわけではありません。
PWA は Chrome が提供する機能である Trusted Web Activity = TWA 上で動くというものです。

Android アプリを開発したことがない方向けに少し解説しますと、この「Activity」というのは、Android アプリの「機能の単位」、つまり、ひとつの「画面」と捉えていただけたらと思います。
つまり、ネイティブアプリの中のひとつの画面として、Chrome の画面を呼び出してきて、その中で PWA を動かす、とイメージしていただけるとわかりやすいかと思います。

つまり、ここで言う PWA のアプリ化の概要は、

Chrome に乗った PWA (の Activity)を内包する APK

ということです。
はい解散。

うそうそ。

Google Play への URL 登録とかでサクッといけるかと思ってた人はそうなっちゃうかもしれませんが、ちょっとまって。
いいこともあります。
スライドからそのまんまひっぱると、概ねこんな感じです。

ネイティブアプリ化(APK)のメリット

  • ウィジェット
  • アイコン長押しのアプリケーションショートカットなどのOSとの密接な統合
  • wear OS や Android Auto などへの拡張
  • ハードリセットや機種変更時に再インストールされる
  • バックグラウンドサービスでネイティブ機能を利用可能
  • マネタイズ
  • PWA コンテンツとネイティブの画面が混在可能
  • 同一ホストのコンテンツから複数の PWA アプリが作れる
  • 国際化サポート

ネイティブアプリにしかない機能だったり、ネイティブをWebの連携だったり、とても魅力的に感じます。
ネイティブアプリとして作るので、当然ながらただの Web からするとちょっと敷居の高い感じは否めませんが、それでもちょっとこれあるといいな、というのは思ってもらえるのではないでしょうか。

いいことづくめなのか?

さて、この技術、いいことしかないように見えますが、ほんとにそうなのか。

今のところ、ひとつとっても気になるところがあります。
それは、Webコンテンツとネイティブアプリの連携がどこまで実現可能なのか。

呼び出すURIにパラメーターを乗せることで、それなりに連携はできるのかな?とも思いますが、Webからネイティブに戻ってくるときはどうする?
結局サーバーからデータ取らなきゃいけない、とかだとどうにもカッコ悪いような・・・。
あと行き来する方法そのものですが、アプリからPWAに行くのはまあインテント飛ばすだけだけど、逆にWebからアプリに行くときは、Webのほうにアプリに組み込まれて動くときにだけ表示される「アプリに遷移する」リンクが必要になりそうですよね。

このあたりの具体的な実装を実際に作ってみていくつかの気になるところを検証してみようと思います。

間に合えば3/20のPWA Nightでのお話しの中にでも入れられたらと思います。
PWA Night のイベントページはこちらです。
https://pwanight.connpass.com/event/121473/
このブログにもそのあたりのトピックスをあらためて紹介できたらと思います。