LIFULL Creators Blog

「株式会社LIFULL(ライフル)」の社員によるブログです。

Google I/O 2018 Day Two

こんにちは。
デバイスソリューションユニット開発グループの衛藤です。
本日はGoogle I/O 2018の2日目です!
疲れが徐々に溜まってきていますが、毎日新鮮な技術情報により浄化されていくようです!
でも肩が痛いです!

f:id:LIFULL-etotake:20180510124711j:plain

今回はAndroidやFirebaseの他にGCPやMachine Learning関連など分野を広げて見てみました。
本日メインで参加したセッションをメインに、レポートをお届けします!!

Machine learning and medicine

今年のKeynoteはほぼAIが絡んだ話が多く、以前にも増して身近な存在になってきました。
既にAIの存在は当たり前のものになっているようです。

私もMachine Learningには興味があり、いろいろと勉強しています。
Keynoteでも、医療やヘルスケア分野でAIが活躍しているとのことで、今回はどのように薬剤の分野に応用したかという話でした。

内容は超専門的でかなりハイレベルな内容でした。
専門的にな部分は分かりませんが、共通した話題もあると思い参加をしてみました。

新薬開発の流れ

新薬開発の話し(おそらく・・・)と思われます。

  • 薬の開発は効率が悪く、3.5億ドル以上のコストがかかっている
  • 人間のDNAに含まれる情報をベクトル化し、どの薬が効くのかを学習させる
  • 予測により病気が治りそうな新薬となる分子を発見する

ちなみに・・・人間のDNAというのか良く分かりませんが、図にするとこんな感じになっているらしいです(複雑・・・!)
このような分野はやはりAIが強いのかもしれません。
f:id:LIFULL-etotake:20180510125138j:plain

つまり・・・

かなり高難度な話題でほぼついていけていません笑
ただ、これまで私が機械学習で取り組んで来たのは人間の作業を効率化させるというものでした。
今回の話はそれよりももっと進んでおり、人間でも発見出来ないものを見つけるというところが面白かったです。
違う分野ですが、画像認識の世界でも現在は人間のエラー率よりもAIのエラー率の方が低いらしく、確実に人間を超えていってる感じが伝わってきて少し恐ろしくも思います。

Microservices in the Cloud with Kubernetes and Istio

Dockerは少しだけ触ったことがありますが、最近話題になっているKubernetesに関しては全く未経験なのですが、参加してみました。

youtu.be

マイクロサービス

マイクロサービスにより独立した機能を持つと、不要な依存が断ち切れます。
しかし、以下のようにサービスが大きくなってくると非常に複雑な構成となり運用が大変になります。
f:id:LIFULL-etotake:20180510140737j:plain

スケーリングさせると更に複雑に
f:id:LIFULL-etotake:20180510140754j:plain Dockerを使ってPackagingすることで管理が楽になり、環境依存も減ります。
さらに、Kubernetesを導入することでさらにスケーリングやデプロイなどを容易に実現しましょう。

Demo

詳しくは動画のデモを見ていただくのがわかりやすいと思いますが、コマンドの反応が非常に早く、サクサクと動いている印象を受けます。

このデモでは、Istio(https://istio.io/docs/tasks/traffic-management/egress.html)というものも使われており、Loadbarancing等のトラフィックを管理出来るようです。
このあたり全然知らず、解釈が合っているのか若干不安ですが・・・

大変便利そうではありますが、正直一度自分で触ってみないとなんとも言えないので、こちらについては後日じっくり触ってみたいと思います。(お恥ずかしい・・・)

What's new in AR

Keynoteで発表されていた、Cloud Anchorsについてのセッションです。

youtu.be

セッションのなかでARは大きなパラダイム・シフトであるのようなことを言っていました。
今回発表されたCloud Anchorsは確かにARの世界を大きく進歩させる技術だと感じています。

Cloud Anchors

Cloud Anchorsとは、Cloudを通じて複数のユーザー間で同じAR体験ができるようにする仕組みです。
これにより、一人がAR空間で物体を設置した場合、違うユーザーのデバイスの中でも同じ物体が同じ位置・向きで共有されるようになります。
ユースケースとしては、教育現場やARゲームなどで大きく活躍しそうです。

Augmented Images

Augmented Imagesは二次元の画像から3次元のAR空間を作成するものです。
詳しくは動画のなかにデモが上がっていますが、商品のパッケージの絵から立体的なアニメーションが出現したりと、見ていて楽しいものでした。
ユースケースとしては、こちらも教育現場や商品プロモーション等に最適なようです。

ARCore

これらの技術はARCoreを使うことで実現できます。

ARCore - Google Developer  |  ARCore  |  Google Developers

クロスプラットフォームのため、Android/iOSで実現出来ます。かなり実用的なのではないでしょうか。

Android Jetpack: what's new in Architecture Components

youtu.be

Android Jetpackは、Android開発をより高速にするために用意された様々なライブラリのセットです。
これまでのSupport LibraryやArchitecture Components、UIなどのライブラリをandrodx.xxxのような形でgradleに記載します。

現在までに

  • 26回のリリースを行う
  • 700を超える機能リクエスト

その辺りを一度整理して出てきたのがAndroid Jetpackです。

developer.android.com

以前までは、複雑なLifecycle等を理解して正しく使う必要があったのですが、開発を容易に加速させる目的で様々な便利なライブラリが出ています。

昨年既に発表があったものも含まれますが、代表的なものとして

  • LiveData
  • Databinding
    • InstantAppで使うにはv2を使う必要があり
  • Room
    • ORマッパ
  • Paging
    • ページングを容易に実装
  • Navigation
    • 面倒なFragmentTransactionはもういらない
    • GUIで直感的に操作
  • WorkManager
    • Job Scheduler / Firebase JobDispatcher / Alarmなど、バックグラウンド処理を管理してくれる
    • beginWith thenの書き方により待ち合わせ処理も容易に

個人的にはNavigationでFragmentTransactionが不要になるのがありがたいですね!
また、Deeplink起動の場合にFragmentをBackstackに積む操作も出来るためかなり開発が捗りそうです。

Pick the right tools to grow your app on Google Cloud Platform

youtu.be

最近は弊社のプロジェクトでもGCPを使うことが多くなってきました。
GCPには様々なツールが用意されており、どんな場合に何を使えばよいのか迷ってしまいます。

API作るときにやりたくないこと

  • Process Management
  • Security Patches
  • Upgrades
  • Scaling
  • Back Ups
  • Disaster Recovery
  • Provision
  • Database Replication

たしかに、日々の運用からは解放されたいですよね。

f:id:LIFULL-etotake:20180510130259j:plain

出ましたGAE!最近非常にお世話になっております。
Full Managedなので比較的楽にサーバー構築できて非常に便利です。

Emailを送る機能がある場合は、sendgrid(https://sendgrid.com/)が良いらしいです。
このあたりもNodeはライブラリが充実していて良いですよね。

Kubernetes

最近よく聞くKubernetesですが、DockerサービスをOrchestrate、Scalingを行ってくれるサービスのようです。
なんと読めば良いのか分かりませんでしたが、聞いてる限りだと「キューバニーティーズ」みたいに聞こえます。
deployment.ymlというファイルに設定を記述してきます。
詳細は公式ドキュメントをご参照ください。

https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

Demo

詳しくは動画内のDemoを見ていただくのが早いと思いますが、スケーリングやデプロイなど非常に高速にコマンド実行が出来ています。

こちらについても同様に、一度実際に触り倒して感覚を見てみたいと思います。

What's new with the Google Assistant SDK for devices

youtu.be

Assistant SDK for Devicesの紹介です。

Neural Beamforming

少し前にOfficial Blogで紹介がされていましたが、Neural Beamformingという技術により複数のマイクで正確性をあげることが出来るというものです。

https://india.googleblog.com/2018/04/google-home-and-google-home-mini.html 人間の耳が2つあるように、マイクを2つ設置することでノイズが混じっていたとしても正確に音声を拾うことができるそうです。

Broadcasting

動画の25分前後のところで説明がされています。
例えば、自宅の各部屋にAssistant搭載デバイスを設置している場合、リビングから「夕食よ!」をそれぞれのデバイスにBroadcastすることで、
全部の部屋にメッセージを伝えることが出来るという技術です。
3階建ての家の各部屋にあると便利ですね!

Custom Device Actions

デモにもありますが、入力音声をトリガーとしてAssistant側にIntentを飛ばすことで、色を変えたり、ロボットの向きを変えたりを実現しています。 入力音声の一部をパラメータとして渡すことで実現出来るようで、実装自体は比較的単純にできそうです。
おそらく入力の想定を設計するのが一番大変なのでは、と感じます。

動画の最後の方に、ロボットにダンスを躍らせるパフォーマンスがありますので、是非見て頂ければと思います。
このロボット開発して遊ぶの楽しそうですね!

Android Jetpack: what’s new in Android Support Library

先程あげた、Android JetpackのSupportLibraryに関するセッションです。

youtu.be

Versioningの変更

サポートライブラリに関しては、
support-v4
support-v7
support-v13
などのライブラリがありますが、対象のSDKバージョンはAPI Level 14以降でしか使えないため混乱を招くバージョニングになっていました。

今回からAndroidX(Android Extension)に変更となり、

implementation 'androidx.{feature}.@'

のようのように変更となります。
わかりやすくなりました。
なお、このタイミングでバージョンは1.0.0にリセットされるようです。
またセマンティック・バージョニングも導入するとのことでした。

Migrating

現在のプロジェクトを全てandroidxに変えるのは大変な作業になりそうです。
AndroidStudio 3.2 Canary14から、一括で変換出来るオプションがあるのでそちらを利用するのが良さそうです。
ただ、Canary14はバグがあるとのことなので安定するまで待ったほうが良いとのこと。
詳しくは動画をご参照ください。

新しいAPI

今回追加になった新しいAPIもあります。

  • RecyclerView Selection
    • Itemの選択状態を簡単に実装出来るように
  • RecyclerView ListAdapter
    • シンプルなAdapter。簡単なリストならすぐに実装可能
  • WebKit
    • CustomTabsはBrowserに変更
    • Browser Actionsでリンク押した際の選択オプション表示が可能
  • HeifWrite
    • Heifフォーマットのサポート
  • Slice
    • インタラクティブな検索結果表示が可能
  • MaterialComponents
    • Materialの新しいButton等が追加になりました。

今回の変更はかなり大きなものになると思いますが、わかりやすさや導入がしやすそうで早く試してみたいです!

ML Kit: Machine Learning SDK for mobile developers

ML KitはFirebase上で利用可能なMachine Learning SDKです。
個人的に一番好きなセッションでした。

youtu.be

簡単にMLアプリケーションを

学習済みのモデルを、サーバー上にホスティングすることなくデバイス上で動作させることが出来るようです。(一部はCloud上でも可能)
また、独自のTensorFlow LiteモデルもFirebaseにアップロードさせるだけで簡単に利用できるようになります。
現在のβ版では以下のようなモデルが利用可能です。

  • Text recognition
  • Face detection
  • Barcode scanning
  • Image labeling
  • Landmark recognition
  • Custom model inference

RemoteConfigでA/Bテストも

さすがFirebaseに乗っかっているだけあって、RemoteConfigと組み合わせることが出来ます。
ユースケースとしては異なるモデル名をRemoteConfigで指定して動的に予測モデルを変更する、
または、A/B Testingによりモデル別のConversionを測ることも出来ます。

今後出てくるもの

今後のロードマップに以下のものが含まれています。

  • Smart Reply
    • Gmail等で導入されていますが、リプライの予測提案APIが利用可能に
  • Model Compression Service
    • TensorFlowで構築したモデルをML Kitに読み込ませることでTensorFlow Lite用のモデルに圧縮・変換を行ってくれる

特にCompression Serviceについては、800Mサイズ/Accuracy 91.8%のものが860K/92.8%のTensorFlow Liteモデルになった例があがっていました。

最適化処理により精度は逆に良くなっているようです。これが使えれば面倒な変換作業や最適化作業を気にすることなくMachine Learningの導入ができそうです。

Beyond single page apps: alternative architectures for your PWA

youtu.be

PWA、非常に興味があります。
このセッションでは、PWAでSingle Page Applicationを作るというものでした。
はじめは設計の話から導入が始まりました。
とあるWebアプリがあり、画面遷移後に同じページに戻ることを考える。 そんな場合、PWAは解決する1つの可能性ではないでしょうか。

Multi-Page Application と PWA

MPAは従来から存在するWebアプリです。
DOMの再利用がなく、ページ全体のリフレッシュが必要になってしまう。
それに対しPWAは「FIRE」という考え方があり、以下の頭文字から成り立ちます。

  • Fast
  • Integrated
  • Reliable
  • Engaging

初期読み込みは少ないネットワーク量で、オフラインでも利用可能、高速に動作するWebアプリケーションです。

Service Workers + Cache

Service Workersはアプリケーションのバックグラウンドで動作するスクリプトです。
一度通信したものはローカルにCacheし、Cacheにない場合のみ通信を行うことで高速化を図ります。
余計な通信を発生させないよう、Cache出来るものはやっておくと良いようです。

SPAを作る

SPAを実現するために、Express Styleな実装が紹介されていました。
Expressのように、Routingを定義するためroute.mjsというファイルにパスを記載しています。
見ていると、本当にExpressで開発をしているかのような間隔に陥ります。
.mjsでhtmlテンプレート化し、titleタグ等を動的に生成することでテンプレートの役割を実現していました。

動画で使われていたライブラリ

最後の締めとして、「Don't cache full HTML」と言っています。
Cacheは便利だけど不要なものまでやらないで、ということでしょうか。

とりあえず、PWAで何か作ってみたいですね。

お土産(Android Things Developer Kit)

今年のおみやげの中にAndroid Things Develper Kitがありますが、こちらはタダで貰えるわけではありません!
10問のクイズに答えた人が受け取れます。
f:id:LIFULL-etotake:20180510135107p:plain

会場内を地図のヒントにしたがい情報を集め、お土産ゲットしました!
f:id:LIFULL-etotake:20180510135337j:plain これでしばらく遊んでみたいですね。
例年通り普通のお土産もありました、Google Home Miniです!(昨年は普通のGoogle Homeもらった&技適問題で起動出来ていない・・・)

Concert

2日目無事に終わり、締めはライブです!
美味しいビールを飲みながら良い音楽で一休み。Google I/Oは毎年After Hoursも妥協がないですね!

Office Hours

明日の予定ですが、本国のGoogle Expertと直接話せる貴重な機会です。
緊張しますが、悩んでいる事を全部伝えてみようと思っています!

Sandbox

今年も様々な展示がされていました!
いつ行っても賑わっています。

絵を書くロボット
f:id:LIFULL-etotake:20180510135947j:plain

TPU v3の実物
f:id:LIFULL-etotake:20180510135923j:plain

Fireabase TestLab サーバーが動く様子
f:id:LIFULL-etotake:20180510135901j:plain

様々な最新技術に触れられるGoogle I/Oもついに明日が最終日です!!
悔いのないように楽しもうと思います!

Google I/O Day Threeへと続く...