Android や Google Play のツールを使って高いパフォーマンスを実現するエンジニアリング手法


ダッシュボードに表示されているデータを理解し、アプリのパフォーマンスと安定度を改善する方法については、Android Vitals のベスト プラクティスに関する記事をご覧ください。Android や Google Play のその他のツールを使って不適切な動作を見つけて修正する方法は、I/O セッションでも紹介しています。

また、Playbook アプリでは、その他の Play Console の機能や、Google Play で成功を収めるための最新ニュースや秘訣を学ぶことができます。ぜひベータ版プログラムに参加し、インストールしてください。

このブログ投稿はどのくらい役に立ちましたか?
Reviewed by Hak Matsuda - Developer Relations Team


認可を受けると、以下のようにして簡単に(Java 向けの Google API クライアント ライブラリを使って)ユーザーの連絡先を作成できます。
Person contactToCreate = new Person();

List names = new ArrayList<>();
names.add(new Name().setGivenName("John").setFamilyName("Doe"));
contactToCreate.setNames(names);

Person createdContact =
    peopleService.people().createContact(contactToCreate).execute();

アプリは、https://www.googleapis.com/auth/contacts のスコープで認可を受けている必要があります。 people.create メソッドの詳細を記述したドキュメントは、ここから参照できます。既存の連絡先は、以下のようにして更新できます。

String resourceName = "people/c12345"; // existing contact resource name
Person contactToUpdate = peopleService.people().get(resourceName)
    .setPersonFields("names,emailAddresses")
    .execute();

List emailAddresses = new ArrayList<>();
emailAddresses.add(new EmailAddress().setValue("[email protected]"));
contactToUpdate.setEmailAddresses(emailAddresses);

Person updatedContact = peopleService.people().updateContact(contactToUpdate)
    .setUpdatePersonFields("emailAddresses")
    .execute();

 people.update メソッドの詳細を記述したドキュメントは、ここから参照できます。連絡先を変更できるこの新機能を使って皆様が作るアプリを楽しみにしています。People API の詳細については、ここから公式ドキュメントを参照してください。


Reviewed by Eiji Kitamura - Developer Relations Team

本日より、Google の一連の支払いソリューションが拡張されます。Google Payment API は、ユーザーがクレジット カードやデビットカードを使って Google アカウントに保存されている口座から簡単に支払う方法を実現するもので、販売者やデベロッパーのチェックアウト コンバージョン率の急上昇に貢献します。ユーザーは、以前に Android Pay に保存したクレジット カードやデビットカード、Play ストアでの決済に使った支払いカード、Chrome に保存されている支払いフォームなど、複数の Google 支払いオプションをいつでも使うことができます。さらに、保存した支払いオプションはサードパーティアプリやモバイルサイト、そしてGoogle Assistant からも利用できるようになります。
Google を使って Google Assistant で Panera Bread に支払い

ユーザーにとって、これは購入手続きの高速化につながります。バスの中で身動きがとれないときに、見知らぬ人の前でクレジット カードを取り出したくはないものです。そのようなユーザーが購入をやめることがなくなります。ベッドに入ってクレジット カードが手元にないときに、夜中に終了するセールに出くわして困ってしまうようなこともなくなります。サポート対象のアプリやサイトに Google で支払うオプションがあれば、いつでも Google アカウントに保存してあるクレジット カードやデビットカードを使うことができるので、ユーザーは時間を節約でき、悩むこともなくなります。

この API は、デベロッパーにとって重要なイノベーションです。すばやく購入を行い、コンバージョン率や売上を増やし、カートのキャンセルを削減できます。しかも、組み込みも簡単です。Google Payment API の詳細は、こちらをご覧ください。
新しくなった AdMob でアプリの収益を上げる
人々は、買い物やコミュニケーション、エンターテイメントのために、一日中モバイル端末に向き合っています。デベロッパーにとって、アプリ内課金は収益化の 1 つの方法です。そして、もう 1 つの方法が広告です。
AdMob は、アプリのエコシステムをサポートするために構築されています。iOS と Android の 100 万以上のアプリで、AdMob は 35 億ドル以上広告収益をデベロッパーにもたらしてきました。しかし、私たちには皆さんの成功に向けてまだできることがあります。

本日は、完全に再設計された AdMob を紹介します。AdMob は 1 から再構築されています。さらに簡単に使えるようになり、ユーザーがアプリの中でどんな体験をしているのかについて、豊かなインサイトをもたらしてくれるようになっています。

さらに使いやすく: AdMob のルック アンド フィール全般にわたって、マテリアル デザインが適用されています。これによって、モバイルか PC かを問わず、プラットフォーム全体で直感的で使いやすい操作が実現され、より迅速に多くのことができるようになります。下の図から、管理するアプリの一覧や主要な指標の確認がどれほど簡単であるかわかるでしょう。そして、パフォーマンスをすばやく微調整できます。

再設計された AdMob の操作

豊かなインサイト:
再設計された AdMob のコアには Google Analytics for Firebase が組み込まれているので、もっともビジネスに影響する指標にすばやくアクセスできます。AdMob と Firebase アカウントをリンクさせると、詳しい広告収益データに加え、ユーザーがアプリを使った時間やアプリ内課金などのすべての分析を 1 か所で確認できます。

AdMob の Google Analytics for Firebase ダッシュボード
ユニバーサル アプリ キャンペーンでユーザーを知り、ユーザーを見つける
アプリで収益を上げることは、パズルのピースの 1 つです。どのようにユーザーベースを拡大するかについても考えなければなりません。

Google によるアプリのイノベーションによって、広告から 50 億以上のインストールが生まれています。現在私たちのサポートによって、デベロッパーの皆さんは 4 半期ごとに 30 億以上のアプリ内イベントを生み出しています。アプリ内イベントとは、たとえばカートに追加、ゲームのレベル 3 に到達といったイベントです。今、デベロッパーが魅力を感じているのは、「ワンストップ ショップ」型キャンペーンであるユニバーサル アプリ キャンペーン(UAC)です。これは、Google の最大の財産である Google Play、検索、YouTube、Gmail、ディスプレイ ネットワークの全体にリーチを広げ、アプリのインストールを最大化するものです。UAC は、Google の機械学習テクノロジーを活用してさまざまなシグナルをリアルタイムに評価し、もっとも興味を持つユーザーに広告を届けるように微調整します。私たちは UAC への取り組みを倍増させ続けています。UAC にはあらゆる新しいイノベーションが組み込まれつつあり、アプリの宣伝は今まで以上に効率的になります。
Google Play での新たな UAC の配置により、アプリを見つけた瞬間にユーザーを魅了 
Android の月間アクティブ端末数は 20 億台以上に達しており、Google Play は世界中の 190 以上の国で利用できます。ユーザーが新しいアプリやゲームを見つけるためにアクセスする場所が Google Play なのです。ユーザーはアプリを検索して試してみるだけではなく、Play ストアや新しいおすすめアプリを見ることに多くの時間を費やしています。 
皆さんのアプリがもっと見つけやすくなるように、Google Play ストアのホームとアプリの掲載情報ページで、広告の配置が新しくなります。この新しい配置は、UAC のみで利用可能です。これにより、「検出モード」のユーザーが次のお気に入りアプリを探してスワイプ、タップ、スクロールした際に、皆さんのアプリがユーザーの目に触れやすくなります。 
ユーザーの目に触れやすい Google Play の新たな広告の配置

UAC の新たな入札オプションでベストユーザーを増やす 
ビジネス上、他のユーザーよりも価値が高いユーザーもいます。たとえば、ゲームでレベルアップしているプレイヤーや、月に何度もフライトを予約している旅行者などです。そのため、さらなる高価値ユーザーの獲得をサポートできるように、UAC のスマート自動入札戦略が拡張されています。スマート自動入札を利用すると、独自のビジネス目標、すなわち目標コンバージョン単価(tCPA)や目標広告費用対効果(tROAS)に合わせて入札を行うことができます。UAC は、インストールやイベント、そして近日中にサポートされる価値などの目標に応じて、適切なユーザーを割り当ててくれます。このアップデートは、今後数カ月のうちに順次 iOS と Android のデベロッパーや広告主に展開されます。 
新たな計測プログラム、App Attribution Partner の導入 
多くのデベロッパーは、サードパーティの計測プロバイダを使って広告の効果を測定し、ユーザーがどのようにアプリを使っているかを分析しています。こういった分析に基づいてすばやくシームレスなアクションを起こすために、App Attribution Partner を導入します。これは、7 社から得たデータを AdWords に統合する新しいプログラムです。

adjust、Adways、AppsFlyer、Apsalar、CyberZ、Kochava、TUNE の皆さん、ようこそお越しくださいました。皆さんの参加をうれしく思います。

AdWords がこれらのパートナーと統合されることで、一貫性と信頼性のある詳細データでアプリの指標を確認できるようになるので、自信を持ってアクションを行い、ビジネスで最高のパフォーマンスを維持できます。
ユーザーがオンラインで過ごす時間は増えています。今後さらに重要になるのは、デザインするアプリから、提供する体験やユーザーが決済を行う方法に至るまで、あらゆる面でユーザー中心の体験を作り上げることです。それが簡単ではないことはわかっています。だからこそ、Google がサポートいたします。

皆さんとともにこの旅を続けることを楽しみにしています。



Posted by Rikako Katayama - AdMob Team






Google Play では、Android に関連したテクノロジーや製品の実践的知識を実際に手を動かして学ぶことができるさまざまなワークショップを集めた Workshop Day を 2017 年 8 月 4 日(金)に開催します。

数あるワークショップはエンジニアだけを対象としたものではなく、マーケッターやプロダクト マネージャー向けのものもあります。下記の詳細をご確認いただき、参加を希望される方は登録フォームよりお申し込みください。

※一部英語(通訳付き)で提供されるコースがあります。
※申し込みが定員を上回ったワークショップは募集を終了する場合があります。










Workshop Day とは別に、Google Play チームでは定期的に Android アプリの品質向上を目的としたプログラム 「Google Play APP DOJO」を実施しており、7 月 27 日(木) に説明会とセミナーを開催します。セミナーの参加にはメンバー登録が必要ですが、見学は誰でも可能です。また、本プログラムにご登録いただくと、Google for Mobile Workshop Day のようなイベントの案内をいち早く受け取ったり、配布していない資料をオンラインで閲覧できるメンバーページにアクセスできるようになります。本プログラムへのご登録は「Google Play APP DOJO」のページから可能です。

7 月のセミナーは「事例で学ぶ アプリの品質向上と成長」をテーマに株式会社 Loco Partners 様、株式会社 LIFULL 様にご登壇いただく予定です。Android アプリの成長や品質向上に興味がある方はぜひ下記リンクから詳細をご確認いただき、お申し込みください。








【Google for Mobile Workshop Day 開催概要】
日時:2017 年 8 月 4 日(金)9:00 - 18:00
   ※ワークショップにより、開始時間・終了時間は異なります。
場所:六本木ヒルズ 森タワー Google 東京オフィス



【ワークショップの詳細】



◾午前の部

9:00 - 11:30
コードラボ 「プログレッシブ ウェブ アプリ(PWA)/ AMP」
参加対象:
エンジニア(HTML や Javascript のコーディング知識が必要です)

概要:
プログレッシブ ウェブ アプリ(PWA)/ AMPのセルフペースなコードラボです。
実際に codelabs.developers.google.com 内のコードラボを実施することによって、ServiceWorkerやAMP-BINDなどの主要フィーチャーを利用したPWA/AMPページが開発できるようになります。質疑応答がその場でできるようGoogle デベロッパーリレーションチームがイベントをサポートさせていただきますので、初心者でも歓迎です。

持参していただくもの:
テキストエディター / IDE がインストールされたノートパソコン

9:00 - 12:00
コードラボ「Daydream - VR アプリを作ろう」

参加対象:
エンジニア(C++, C# or Javaのうちどれかのコーディング知識が必要ですが、Unity の経験は必要ありません)

概要:
このコードラボでは Unity を使い、2 つのモジュールに挑戦していただきます。モジュール 1 では、Daydream コントローラのモーション、タッチパッド、クリックでインタアクティブに操作できるシンプルな弓と矢を作ります。モジュール 2 では、Daydream 上でビデオを再生する様々な方法をご紹介します。そして実際に再生コントロールが可能なシンプルなビデオ UI を作ります。

持参していただくもの:
Unity (5.6以上、+Android SDK/NDK, +log-in account)、最新の Android Studio、最新のJava Development Kit (JDK) がインストールされた開発用ノートパソコン

10:00 - 12:30
コードラボ「初めての Android Instant Apps」

参加対象:
エンジニア(Java での Android アプリ開発経験が必要です)

概要:
Android Instant Apps は、 URL リンクからインストールさせることなくネイティブアプリの体験を提供することを可能にするテクノロジーです。このコードラボでは ""Topeka"" という既存の Android プロジェクトをベースに、最新の開発ツールを使って Android Instant Apps を実装する演習を行います。

持参していただくもの:
最新の Android Studio 3.0 プレビュー版がインストール済みの開発用ノートパソコン



◾午後の部

13:30 - 14:30
ワークショップ「Play Console ワークショップ:ビジネス解析」

参加対象:
プロダクトマネージャー、マーケター、エンジニア(コーディングの知識は特に必要ありません)

概要:
ビジネス担当者に特におすすめ。このワークショップでは、ビジネス分析に役立つPlay Console の各無料ツールの使い方をステップバイステップで解説し、習得いただけます。

持参していただくもの:
Play Console にログインできるノートパソコン(必須ではありません)

14:45 - 15:45
ワークショップ「Play Console ワークショップ:失敗しないアプリリリース」

参加対象:
エンジニア・プロダクトマネージャー(コーディングの知識は特に必要ありません)

概要:
とりあえず出してから修正していけばというウェブの考えをアプリに持ち込むのは危険です。このワークショップでは、アプリの失敗しないリリースに役立つPlay Console の各無料ツールの使い方をステップバイステップで解説し、習得いただけます。

持参していただくもの:
Play Console にログインできるノートパソコン(必須ではありません)

16:00 - 17:00
ワークショップ「Play Console ワークショップ:アプリ品質計測と改善」

参加対象:
エンジニア・プロダクトマネージャー(コーディングの知識は特に必要ありません)

概要:
Play ストアでの露出やダウンロードを最大化するための一番の近道は高品質アプリを作ること。このワークショップでは、ユーザーレビューや最新機能である Android Vitals など、アプリの品質改善に役立つPlay Console の各無料ツールの使い方をステップバイステップで解説し、習得いただけます。

持参していただくもの:
Play Console にログインできるノートパソコン(必須ではありません)

13:30 - 16:30
コードラボ「Firebase 実践編」

参加対象:
エンジニア(Java Script, Java, Objective-C のうちいずれかのコーディング知識が必要です)
概要:
このコードラボでは、Firebase の Realtime Database, Authentication, Storage, Hosting などの機能を自分のペースに合わせて学ぶことができます。Android アプリだけでなく、iOS アプリやウェブ開発にも役立つ実践的スキルを身に付けることができます。

持参していただくもの:
最新の Android Studio と Firebase がインストール済みの開発用ノートパソコン

14:00 - 17:00
コードラボ「Tango - AR アプリを作ろう」

参加対象:
エンジニア(C++, C# or Javaのうちどれかのコーディング知識が必要ですが、Unity の経験は必要ありません)

概要:
このコードラボでは Unity を使い、2 つのモジュールに挑戦していただきます。モジュール 1 では Motion Tracking や Depth Perception といった Tango の核になるファンクションを使って、簡単な AR のゲームを作ります。モジュール 2 では Natural Target Detection を使った簡単なアプリの作り方をステップバイステップで説明します。

持参していただくもの:
Unity (5.6以上、+Android SDK/NDK, +log-in account)、最新のJava Development Kit (JDK) 、最新の Tango Unity SDK がインストールされた開発用ノートパソコン

14:30 - 17:30
ワークショップ「TensorFlow を Android アプリに実装しよう」


参加対象:
エンジニア(Java のコーディング知識と Android アプリの開発経験が必要です)
概要:
機械学習を組み込んだAndroidアプリ開発に興味のある方におすすめです。TensorFlow を Android に実装し、 Android 端末で手書き数字が認識できるようにします。

持参していただくもの:
最新の Android Studio がインストールされた PC、Android 端末



◾夜の部

18:00 - 20:00
アプリデザイナー Meetup

参加対象:
アプリ UI/UX デザイナー

概要:
こちらは Google ではなく design-jp 主催のイベントです。参加申し込みは、下記の Workshop Day と同じフォームをご利用ください。





Posted by Takuo Suzuki - Developer Relations Team

アプリは似たような機能を持つグループに分けられます。同じような機能を持つアプリのクラスタ内で、ある一定の基準に従って、プライバシーやセキュリティに関する変則的なシグナルを探します。

これらの技術は、ピアグループを使ったプライバシー関連のシグナル分析、よりよいピアグループを作成する言語モデルのディープ ラーニング、結論を得る際に利用する自動データ分析など、以前から存在していた考え方をもとにしたものです。

このアルゴリズムやその周辺プロセスは、Google の多くのチームの協力のもとに生まれました。Andrew Ahn、Vikas Arora、Hongji Bao、Jun Hong、Nwokedi Idika、Iulia Ion、Suman Jana、Daehwan Kim、Kenny Lim、Jiahui Liu、Sai Teja Peddinti、Sebastian Porst、Gowdy Rajappan、Aaron Rothman、Monir Sharif、Sooel Son、Michael Vrable、Qiang Yan など、欠かすことができないチームメンバーに感謝いたします。

Android で有害な可能性があるアプリ(PHA)を検知して排除する Google の挑戦の詳細については、Google Android セキュリティ チームによる有害な可能性があるアプリの分類をご覧ください。

参考文献


S. Jana, Ú. Erlingsson, I. Ion (2015).Apples and Oranges:Detecting Least-Privilege Violators with Peer Group Analysis. arXiv:1510.07308 [cs.CR].

T. Mikolov, I. Sutskever, K. Chen, G. S. Corrado, J. Dean (2013).Distributed Representations of Words and Phrases and their Compositionality.Advances in Neural Information Processing Systems 26 (NIPS 2013).

Ú. Erlingsson (2016).Data-driven software security:Models and methods.Proceedings of the 29th IEEE Computer Security Foundations Symposium (CSF'16), Lisboa, Portugal.


Reviewed by Yuichi Araki - Developer Relations Team
Share on Twitter Share on Facebook


昨年の I/O で、Awareness API がリリースされました。これは、ロケーション、天気情報、時刻、ユーザー アクティビティなどのシグナルを使ってユーザーの状況に即した体験を提供できるようにする、シンプルで強力な API です。

Awareness API は、Google Play サービス経由で利用でき、2 つの方法によってアプリ内で状況シグナルを活用できます。Snapshot API は、アプリからユーザーの現在の状況に関する情報をリクエストできます。また、Fence API は、ユーザーの状況が変化したときや、ある条件に該当した際にアプリを反応させることができます。たとえば、「ユーザーがヘッドフォンをさしたまま歩いているときは教えてください」というようなリクエストが可能です。

これまでも、Awareness API でタイムフェンス(時間の境界)を指定できましたが、時間を厳密に指定しなければならないという制限がありました。デベロッパーの皆さまからのフィードバックにより、タイムフェンスの作成に関連するこの API の柔軟性は、人々が時間について考えたり話したりする際に用いる高レベルの抽象化に対して対応できていないことがわかりました。「今週末」、「次の休日」、「日没後」といった表現は、日常会話で時間を表す際によく使われます。そこで本日(*原文公開当時)、この API にセマンティック タイムのサポートを追加しました。

たとえば、フィットネス アプリで毎朝のエクササイズの開始をユーザーに通知したい場合や、読書アプリで日没後にナイトモードをオンにしたい場合を考えてみましょう。今までは、ユーザーの現在地での日の出や日没の情報を 3p API に問い合わせ、その時間の値を使って Awareness フェンスを記述する必要がありました。今回の最新のアップデートでは、TIME_INSTANT_SUNRISETIME_INSTANT_SUNSET といった定数を使って、複雑な処理をプラットフォームに任せることができます。

例を見てみましょう。火曜日と木曜日の日の出頃に朝のエクササイズの開始を通知するフィットネス アプリを作成しているとします。このトリガーは、次のコードを使って設定できます。
// A sun-state-based fence that is TRUE only on Tuesday and Thursday during Sunrise 
AwarenessFence.and(
    TimeFence.aroundTimeInstant(TimeFence.TIME_INSTANT_SUNRISE,
            -10 * ONE_MINUTE_MILLIS, 5 * ONE_MINUTE_MILLIS),
    AwarenessFence.or(
        TimeFence.inIntervalOfDay(TimeFence.DAY_OF_WEEK_TUESDAY,
                0, ONE_DAY_MILLIS),
        TimeFence.inIntervalOfDay(TimeFence.DAY_OF_WEEK_THURSDAY,
                0, ONE_DAY_MILLIS)));


セマンティック タイムが特にすばらしいのは、祝日に対応している点です。国や地域によって、祝日は異なります。たとえば、近隣で楽しめるハイキングや探検を案内するアプリで、金曜日または月曜日の祝日に楽しむことができるものをユーザーに紹介したい場合、曜日と祝日のフラグを組み合わせれば、世界中のすべてのユーザーに対してこの状況を判別することができます。しかもわずか 3 行のコードで、世界中どこでも動作します。
// A local-time fence that is TRUE only on public holidays in the
// device locale that fall on Fridays or Mondays.
AwarenessFence.and(
    TimeFence.inTimeInterval(TimeFence.TIME_INTERVAL_HOLIDAY),
    AwarenessFence.or(
        TimeFence.inIntervalOfDay(TimeFence.DAY_OF_WEEK_FRIDAY,
                9 * ONE_HOUR_MILLIS, 11 * ONE_HOUR_MILLIS),
        TimeFence.inIntervalOfDay(TimeFence.DAY_OF_WEEK_MONDAY,
                9 * ONE_HOUR_MILLIS, 11 * ONE_HOUR_MILLIS)));

どちらの例でも、Awareness API は端末の言語/地域の設定に基づいて、時間や祝日のローカライズという大変な作業を行ってくれます。

皆さまがこの強力な API を使ってどのような問題を解決するか、楽しみにしています。メーリング リストに参加すると、今回の API を含む Google の Context API についてのアップデート情報を受け取ることができます。



Posted by Takuo Suzuki - Developer Relations Team
Share on Twitter Share on Facebook

ファクトリー イメージ


今後、端末がコンソールからプロダクトに向けた適切なアップデートを受信するには、初期基本ファームウェアが必要です。最初は、[Create Build Configuration](ビルド設定の作成)を使い、プロダクト用に設定された空のバンドルを含むデフォルトのファクトリー イメージをビルドします。すると、このファクトリー イメージをダウンロードして端末に書き込めるようになり、端末に APK を読み込ませて、開発を始めることができます。

その後、プロダクトで利用するすべての端末にデプロイするアプリケーションの準備ができた段階で、バンドルをコンソールにアップロードします。このバンドルは ZIP ファイルで、この中にはメイン APK ファイル、APK 内でサービスとして動作するユーザー空間ドライバ、メイン APK によって起動される追加の APK が含まれています。bootanimation.zip ファイルもサポートされています。これは、起動時に表示されます。続いて、アップロードしたバンドル ZIP ファイルから完全なシステム イメージが生成され、それが端末にデプロイされます。バンドル ZIP ファイルの内容について詳しくは、ドキュメントに記載されています。

OTA アップデート


このタブでは、一連のプロダクト用端末にプッシュするシステム イメージを選択できます。デベロッパーがシステム イメージを 1 つ選択し、[Push to Devices](端末にプッシュ)を押すと処理が開始されます。アップデートはすべての端末に安全にプッシュされ、A/B パーティションのどちらかにインストールされて、端末が再起動した際にアクティブになります。何らかのエラーが検出されると、端末は以前に動作していたバージョンに自動的にロールバックされるので、アップデートをやり直すこともできます。デベロッパーは、Android Things の新しいリリースを事前にテストしてから、端末の自動アップデートの可否を決定できるようになる予定です。

フィードバック


現在の Android Things Console はプレビュー版で、さらに多くの機能やカスタマイズを追加するための作業が続けられています。Android Things デベロッパーの皆さんは、ぜひ Android Things Console を確認してフィードバックをお寄せください。バグレポート機能リクエストからフィードバックを送信できます。質問は、どんなものでもかまいませんので、Stack Overflow にお寄せください。Android Things Console の詳細については、詳しいドキュメントもご覧ください。Google+ の Google IoT デベロッパー コミュニティにも参加できます。これは、最新情報を入手したりアイデアを話し合うことができるすばらしいリソースです。



Reviewed by Yuichi Araki - Developer Relations Team
Share on Twitter Share on Facebook


Chrome と同様に、WebView でも 2 つのレベルで分離されるようになります。  
  1. レンダリング エンジンは別のプロセスとして分割されます。これにより、ホストアプリはレンダラー プロセスのバグやクラッシュから切り離され、悪意のあるウェブサイトがレンダラーの脆弱性を利用してホストアプリを攻撃することは難しくなります。
  2. さらなる封じ込めとして、レンダラー プロセスは限られたリソースセットしか使えない独立したプロセス サンドボックス内で実行されます。たとえば、レンダリング エンジン単独では、ディスクへの書き込みやネットワーク通信を行うことはできません。
    Android 版 Chrome で使われているものと同じ seccomp フィルターもバインドされています(seccomp については、近日中にブログに投稿します)。seccomp フィルタは、レンダラー プロセスがアクセスできるシステムコールの数を減らし、さらにシステムコールで許可する引数も制限します。

セーフ ブラウジングの導入


最新版の WebView には、危険性があるサイトを検知してユーザーに警告する Google のセーフ ブラウジング保護が導入されています。正しい設定が行われている場合、WebView は URL と不正なソフトウェアやフィッシングに関するセーフ ブラウジングのデータベースを突き合わせてチェックし、ユーザーが危険なサイトにアクセスする前に警告メッセージを表示します。Chrome では、この有用な情報は月間 2 億 5,000 万回以上表示されています。この機能が Android の WebView でも利用できるようになります。  
 

セーフ ブラウジングの有効化


アプリ内のすべての WebView でセーフ ブラウジングを有効化するには、マニフェスト タグに以下を追加します。  
<manifest>
     <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
                android:value="true" />
      . . .
     <application> . . . </application>
</manifest>

WebView は個別の APK として配布されているため、現在のところ、WebView のセーフ ブラウジングは Android 5.0 以降を実行している端末で利用できます。マニフェストに 1 行追加してアプリをアップデートするだけで、多くのユーザーのセキュリティを即座に改善できます。
 
 
Reviewed by Yuichi Araki - Developer Relations Team
Share on Twitter Share on Facebook

トレーニング時間
BLEU(基準点との差)
Transformer(T2T)
8 GPU で 3 日間
28.4(+7.8)
SliceNet(T2T)
32 GPU で 6 日間
26.1(+5.5)
GNMT + Mixture of Experts
64 GPU で 1 日間
26.0(+5.4)
ConvS2S
1 GPU で 18 日間
25.1(+4.5)
GNMT
96 GPU で 1 日間
24.6(+4.0)
ByteNet
32 GPU で 8 日間
23.8(+3.2)
MOSES(フレーズベースの基準点)
該当せず
20.6(+0.0)
標準 WMT 英独翻訳タスクの BLEU スコア(高いほどよい)
T2T を機械翻訳タスクに適用した例を上に示します。この表からわかるように、2 種類の T2T モデル(SliceNet と Transformer)がこれまでのベストの成果だった GNMT+MoE を超えています。標準 GNMT モデルは、基準となるフレーズベースの翻訳システムである MOSES を 4 点上回っていますが、最高の T2T モデルである Transformer はそれをさらに 3.8 点上回っています。注目すべきは、T2T では以前の最新技術による結果を 1 日あたり 1 つの GPU で実現することに近づいている点です。小さな Transformer モデル(上には記載されていません)は、1 つの GPU で 1 日トレーニングを行っただけで、BLEU スコア 24.9 点を達成しています。つまり、GPU があれば、誰でも優れた翻訳モデルを利用できます。詳しい手順は github レポジトリをご覧ください。

モジュール式のマルチタスク トレーニング
T2T ライブラリは、おなじみの TensorFlow ツールを使って構築されており、ディープ ラーニング システムに必要なデータセット、モデル アーキテクチャ、オプティマイザー、学習率減衰スキーム、ハイパーパラメータなど、さまざまなパーツが定義されています。特に重要なのは、こういったすべてのパーツ間で標準インターフェースの利用が強制されていること、さらに現在の ML のベスト プラクティスが実装されていることです。そのため、任意のデータセット、モデル、オプティマイザー、ハイパーパラメータ セットを選んでトレーニングを実行し、その成果を確認できます。アーキテクチャはモジュール化されているので、入力データと予測結果となる出力をつなぐパーツはすべてテンソル変換機能です。モデル アーキテクチャのアイデアが新たに浮かんだ場合でも、設定全体を置き換える必要はありません。埋め込んだパーツや損失などはすべてそのまま使うことができるので、テンソルを入力として受け取りテンソルを返す独自の機能でモデル本体を置き換えるだけで済みます。

これが T2T の柔軟さを実現しています。トレーニングが特定のモデルやデータセットに固定されることはありません。使い方はとても簡単で、有名な LSTM Sequence to Sequence モデルなどのアーキテクチャでも数十行のコードで定義できます。また、別のドメインの複数のタスクで 1 つのモデルをトレーニングすることもできます。究極的には、1 つのモデルに対してすべてのデータセットを使って同時にトレーニングすることも可能です。そのようにトレーニングを行った MultiModel(T2T に含まれています)は、ImageNet(イメージ分類)、MS COCO(イメージのキャプション生成)、WSJ(音声認識)、WMT(翻訳)、Penn Treebank 解析コーパスと合わせてトレーニングを行った場合でも、多くのタスクで優れた結果を残しています。単一のモデルでこういったすべてのタスクを同時に行えることが証明できたのは初めてです。

ベスト プラクティスの組み込み
この初回リリースでは、研究コミュニティで広く利用されているさまざまなデータセットを生成するスクリプト1、いくつかのモデル2、さまざまなハイパーパラメータ設定、その他の重要なポイントがうまく動作するように実装されたものが提供されています。ここですべてを紹介するのは困難ですが、T2T でモデルを実行する場合は、適切なシーケンスのパディング、対応する交差エントロピー損失、Adam オプティマイザー用に適切にチューニングされたパラメータ、アダプティブ バッチング、同期分散トレーニング、適切にチューニングされたイメージデータ拡張、ラベルのスムージング、最適な動作を提供するさまざまなハイパーパラメータ設定などを無償で使うことができます。上で説明したような翻訳で優れた結果を出す最新技術も含まれており、そこからもよい結果が得られるかもしれません。

例として、英語の文を解析して文法的な構文木で表現するタスクを考えてみましょう。この問題はすでに何十年にもわたって研究されており、多大な労力をかけて多くの方法が生み出されています。これはシーケンス変換問題としてニューラル ネットワークで解決することもできますが、それには多くのチューニングが必要でした。T2T を使うと、わずか数日で解析データセット生成ツールを追加できるので、この問題のトレーニングを行う変換モデルに集中することができます。これはうれしい驚きでしたが、わずか 1 週間でよい結果が得られました。

解析モデル
F1 スコア(高いほどよい)
Transformer(T2T)
91.3
Dyer など
91.7
Zhu など
90.4
Socher など
90.4
Vinyals & Kaiser など
88.3
標準テストセット、WSJ セクション 23 の解析 F1 スコア。Penn Treebank WSJ トレーニング セットのみでトレーニングしたモデルで比較。詳しい結果は論文を参照。

Tensor2Tensor に貢献する
既存のモデルやデータセットを使うだけでなく、Tensor2Tensor に独自のモデルを定義したり、独自のデータセットを追加するのも簡単です。同梱されているモデルは多くの NLP タスクで優れた動作をするはずなので、データセットを追加するだけで興味深い結果が得られるでしょう。T2T がモジュール化されたことによって、独自のモデルを提供して、さまざまなタスクで動作を確認することも非常に簡単になりました。このように、コミュニティ全体がベースラインとなるライブラリによる恩恵を受け、ディープ ラーニングの研究を加速することができます。早速 github レポジトリにアクセスして新しいモデルを試し、皆さんのモデルでコミュニティに参加してください。

謝辞
Tensor2Tensor をリリースできたのは、多くのエンジニアや研究者の皆さんと幅広く共同作業ができたおかげです。ここで、貢献していただいた主なチームにお礼を申し上げます(アルファベット順)。Samy Bengio、Eugene Brevdo、Francois Chollet、Aidan N. Gomez、Stephan Gouws、Llion Jones、Łukasz Kaiser、Nal Kalchbrenner、Niki Parmar、Ryan Sepassi、Noam Shazeer、Jakob Uszkoreit、Ashish Vaswani




1 イメージ分類(MNIST、CIFAR-10、CIFAR-100、ImageNet)、イメージのキャプション生成(MS COCO)、翻訳(英独と英仏を含む複数言語 WMT)、言語モデリング(LM1B)、解析(Penn Treebank)、自然言語推論(SNLI)、音声認識(TIMIT)、アルゴリズム問題(逆転、加算、乗算から代数まで、10 以上のタスク)などに利用できる多数のデータセットが含まれています。今後さらに追加される予定で、皆さんのデータセットも歓迎します。

2 LSTM Sequence to Sequence RNN、分割可能なものを含む畳み込みネットワーク(例: Xception)、ByteNet や Neural GPU などの最新研究モデルのほか、レポジトリのアップデートが精力的に行われている本投稿で紹介した最新モデルなどが含まれています。





Reviewed by Kaz Sato - Staff Developer Advocate, Google Cloud
Share on Twitter Share on Facebook