Google I/O 2019のKeynote、Develoer KeynoteそしてWhat’s new in Android Qではモバイル分野の新機能が発表されました。Android Qではプライバシーを筆頭に数多くの機能が追加されています。これらの技術的背景に触れながら今年の鍵となるテクノロジーを本記事では解説します。
キーノートのまとめも更新が完了したので合わせて読んでみてください。本記事の更新は5月8日 14:00(日本時間)に完了しました!(本日中ぐらいはちょこちょこ見てもらえると嬉しいです)
記事の動画はこちらからどうぞ。またセッションも続々と動画があがっています。セッション動画のリストへのリンクも合わせて紹介します。
- Developer Keynote https://www.youtube.com/watch?v=LoLqSbV1ELU
- What’s new in Android https://www.youtube.com/watch?v=td3Kd7fOROw
- All Sessions List https://www.youtube.com/playlist?list=PLOU2XLYxmsILVTiOlMJdo7RQS55jYhsMi
KeynoteのなかでAndroid QのバージョンはAndroid 10となることが明らかになりました。Pixel 3a / 3a XLなど低価格な新Pixelも本日より予約開始しています。
3年間のセキュリティアップデートも保証されたPixel 3a / 3a XLは海外では399ドルから、日本では48,600円から提供しています。
プライバシーとオンデバイス
Google I/O 2019でのキーワードはプライバシーとオンデバイスです。Googleのサービスが現実に進出するなか、ユーザーのプライバシーは欠かせない視点です。これは社会的な責任を果たすためにも重要な考え方で、Facebookなどでのユーザー情報の無秩序な利用は強い批判を受けています。Googleに限らず、企業はより厳格にプライバシーを考えていかなければならない時期に差し掛かりました。
Android QではDigital Wellbeingの標語のもと「人々を助け、良い生活をおくる」ための機能設計がなされています。
Degital Wellbeingでは技術を使って生活を豊かにする(いいかえると情報教育などリテラシーの整ってない段階でもデジタル機器に安心して触れられる)機能も含まれており、ペアレンタルコントロールもその一環です。ここでもプライバシーは重要な関心事です。
プライバシーと並んで、重要なトピックに「オンデバイス」があります。これらローカルデバイスでのコンピューティング資源活用は一見、クラウドから後退しているようにみえますが、ネットワークの到達しないところだけではなくて応答性の問題も解決できる手法です。KeynoteではGoogle Assistantの速度が10倍になったことを挙げ、できることの質や体験そのものが変わることを示していました。
機械学習のような高度な処理をデバイスで完結できるということはプライバシーをセキュアに扱えることに繋がり、「オンデバイス」は今年を占う重要な技術キーワードです。
ML Kitでは70種類を超える言語翻訳をローカルで提供していますが、学習モデルは数百KBに抑えられており、オンデバイス実行時の懸念であるストレージとパフォーマンスを両立させています。TensorFlow Liteもローカル実行をサポートし、オンデバイスに対応しました。
Androidの新機能 Overview
Android Qでもプライバシーとセキュリティーはメインテーマで、セッションの50%ぐらいを関連した話題に当てられていました。
生産性についてはKotlinの存在が取り上げられています。開発者のうち50%がKotlinを利用し、言語の成長率も1位と存在感を示しています。
開発を改善する取り組み
開発を助ける特徴的な機能として次の3つが紹介されました。
- Play Storeを介さずに更新できるInAppUpdate
- Jetpack ComposeやGesture NavigationなどAACの改良
- Reactive UI Tool Kit Jetpack Compose https://developer.android.com/jetpack/compose/
- 半年かけて安定性を向上させたAndroid Studio 3.5
In App Updateはアプリ更新の訴求に最適です。詳細は未確認ですがGoogle Playの支援を受けてアプリの更新情報を受け取っているとみられます。AACの変更は後述しますが、Android Studio 3.5では開発に半年間かけて安定性の確保、パフォーマンス向上を行ったとのことです。新規開発を止めてまでの改善は目をみはるものがありました。
What’s New in Android Q
Google I/O 2019に合わせてAndroid Q Beta 3の提供が始まりました。アップデート内容の詳細は公式ブログにまとまっています。
https://android-developers.googleblog.com/2019/05/whats-new-in-android-q-beta-3-more.html
新しいコミュニケーション方法 Chat Bubbles
Bubblesとは画面上に表示される丸いUIコンポーネントです。FacebookのMessangerアプリのように他のアプリケーションの上位レイヤーに表示します。
これまでアプリの上にオーバーレイする場合、System Alert Window(SAW)レイヤーを使ってきました。しかしパフォーマンスやセキュリティの関係から今後は非推奨化されるため開発者はSAWの利用をやめてBubblesをつかった表示を求められます。
ダークモードに対応する
マテリアルデザインのダークモード対応も発表されました。
同時に発表されたデザインガイドラインに沿って実装することでMaterial Themingに準拠したDark-themingを作れます。Android Qではユーザーの利用シーンに合わせた(たとえばベッドのなかでアプリを触るには白い画面はギラギラとしてみえるでしょう)ダークテーマ対応を推奨しています。
新しいUIと変更点
Android Qではこれまでの共有UIから変わってShare Sheetを採用しています。最新のSharing shortcut APIに対応した新しいUIです。
Gesture navigationはiPhoneのようにエッジからのジェスチャーを実現する機能です。左右および下側のふちよりジェスチャーを開始できます(上部はBarがあるため利用できない領域が設定されています)。
Backキーの有効/無効とあわせて使うことでジェスチャーによる直感的な操作ができるでしょうが、UI表示されるわけではないため、機能そのものに気づくことが難しいかもしれません。使うには開発者の力量が試されそうです。
Android Qでは上記やブログの紹介内容以外にも、いくつか振る舞いが変更されています。Textはハイフネーション(文字の折返しをハイフンで繋ぐ表示)のコストが高いため、デフォルトがOFFに戻りました(API Level 23〜28の間でデフォルトONとなり、以降でOFFに戻ったことになります。パフォーマンスを優先した変更です)。
Private API(非公開API)についても以前から非推奨であることが明確に示されていましたが、今回も利用停止を呼びかけています。使っているアプリがあれば対策を急いで下さい。
セキュリティの観点からも今後規制がゆるくなることはないでしょう。グレーリストによる暫定的対応も将来のAndroidバージョンでは利用できなくなると表明しています。
バックグラウンドからのActivity起動も許可されなくなりました。基本的にフォアグラウンドであることが求められます。位置情報の取得がフォアグラウンドに限定される事実からも、バックグランド動作は限定的になります。WorkManagerの利用を推奨しており、起動タイミングや非同期処理の設計は新しい設計思想への対応が求められます。
ユーザーの気づかない動作を行わないこと(プライバシー観点での保護を前提としており、あわせてバッテリ保護のため)定期的な実行、バックグラウンドでの位置測位は難しくなります。ノーティフィケーションを使うなど工夫が必要です。
Reactive UI Tool Kit: Jetpack Compose
Jetpack ComposeはUIをプログラマブルに構成するArchitecture Componentです。似た機構としてはAnkoやFlutterでのUI記述方法を想起するかもしれません。XMLを使わずにUIを制御できるUI支援が特徴です。
- Jetpack Compose https://developer.android.com/jetpack/compose/
Jetpack Composeでは@ComposableアノテーションでUIを記述します。すべてをKotlin上で記述することとなりますが、Androidの動作原理を無視するわけではありません。対応するXMLやバインディング機構を自動で生成しています。
XMLで記述したUIは再利用性の議論を横においてもView(UI単位での構成単位)の状態管理を複雑にしがちでした。Jetpack ComposeはKotlinのもつ言語機能を活用し、コードからアプリに必要なコードを自動生成して(メタっぽいですね)。開発効率を上げようとするアプローチです。
現時点のJetpack ComposeはGoogleの推奨するスタンダードな開発手法を置き換えることを目的とはしていません。実際の利用にはいくつかのハードルがあるはずです。たとえばUIライブラリ(の一部)エコシステムは対応を待たなければスムーズな連携は難しいでしょう。既存のデータバインディングを活用したアプリとどのように組み合わせるのかも戦略がいります(混ぜて利用するのは難しいのでどこかで区切りを設ける必要がありますが、高い理解を開発者に求めるはずです)。
しかしKotlinのような強力な言語があるからこそ出来るアプローチで、これまでとは前提が異なる点も事実です。プログラマブルなUIは状態管理を自動化し、再利用性の高いUI設計を可能にします(デザイナーと開発者の連携も大変になると思いますが新しいアーキテクチャの導入はアプリが持つ現在の課題を明確に、開発効率を改善します)。生産性を大きく変えるチャレンジといえるでしょう。
もちろんGoogleはデータバインディングとJetpack Composeの両方を提供しており、開発者が好きな手法を選択できる点は、とても大事だと感じています。筆者も新しい選択肢の誕生について議論が進み、よりよい改善が生み出されることを期待しています。
※随時更新を一旦終了しました。おつかれさまでした!