基調講演 I/O 2017 から振り返る最新技術トレンド(Takuo Suzuki)

Google for Mobile | I/O RECAP 2017 にて行われた他講演の全容をご紹介している、当 Playlist で最初にご覧いただきたいセッションです。




【Android】Android Support Library 最新情報(Yuichi Araki)

Android Support Library は、メソッドを呼び出す基本的な互換性から、スタンドアローンの新しい機能の実装まで、すべてを提供するモジュールの集大成です。 バージョン 25 と 26 の新機能を中心に Support Library モジュールをアプリに統合するための事例について紹介します。



【Firebase】ユーザーを分析し、アプリを成長させよう(Laurence Moroney)
Google Analitics による成長のための戦略と、Google Analytics をFirebase で使用するとどのようなシナリオが可能になるかを示します。




【Mobile Web】AMP最新情報: ECでも使える!インタラクティブなAMPの作り方(Yusuke Utsunomiya)

最近 EC での活用が多く見られるようになった AMP ですが、その最新情報と、PWA との連携方法などをご紹介いたします。





他にもたくさんのセッション動画がアップロードされています。ぜひご覧ください。


Posted by Hidenori Fujii - Google Play

イベント
現在
2018 年 3 月 15 日
Symantec が 2016 年 6 月 1 日よりも前に発行した TLS サーバー証明書を使用しているサイト運営者はこれらの証明書を置き換える必要があります。これらの証明書は現在信頼されている CA に置き換えることができます。
~ 2017 年 10 月 24 日
Chrome 62 の安定版がリリースされます。このリリースでは、Chrome 66 での信頼破棄によって影響を受ける証明書を評価する際の DevTools のアラートが追加されます。
2017 年 12 月 1 日
Symantec によると、この時点で DigiCert の新しい「Managed Partner Infrastructure」は完全な発行が可能です。この時点以降に Symantec の古いインフラストラクチャから発行された証明書は、将来の Chrome アップデートで機能しなくなります。

この日付以降、サイト運営者は、Chrome 70(2018 年 10 月 23 日から)以降で引き続き信頼される新しい Managed Partner Infrastructure から発行された TLS サーバー証明書を取得できます。

2017 年 12 月 1 日に証明書を変更することは必須ではありませんが、サイト運営者にとっては、Chrome 70 による古いインフラストラクチャに対する信頼破棄の影響を受けない TLS サーバー証明書を取得するよい機会です。
2018 年 3 月 15 日
Chrome 66 のベータ版がリリースされます。このリリースでは、Symantec が 2016 年 6 月 1 日よりも前に発行した証明書に対する信頼が破棄されます。この時点で、サイト運営者は、Symantec が 2016 年 6 月 1 日以降に発行した TLS サーバー証明書か Chrome 66 が信頼する他の CA から発行された有効な証明書を使用している必要があります。

2016 年 6 月 1 日以降に Symantec の古いインフラストラクチャから証明書を取得したサイト運営者は Chrome 66 の影響を受けませんが、以下に説明するように、Chrome 70 のリリース日までに新しい証明書を取得する必要があります。
~ 2018 年 4 月 17 日
Chrome 66 の安定版がリリースされます。
~ 2018 年 9 月 13 日
Chrome 70 のベータ版がリリースされます。このリリースでは、古い Symantec ルート インフラストラクチャに対する信頼が破棄されます。これにより、新しい Managed Partner Infrastructure(Symantec によると、2017 年 12 月 1 日までに運用開始予定)に結び付けられた証明書に影響が及ぶことはありません。

Symantec の古いインフラストラクチャから発行された TLS サーバー証明書のみが、発行日に関係なく、この信頼破棄の影響を受けます。
~ 2018 年 10 月 23 日
Chrome 70 の安定版がリリースされます。



Reviewed by Eiji Kitamura - Developer Relations Team

Songbird のオーディオ処理を示した図

Songbird の実装は、Google 空間メディア仕様をベースとしています。モノラル入力を受け付け、SN3D ノーマライゼーションを適用したアンビソニック(マルチチャンネル)ACN チャンネル レイアウトを出力します。詳しいドキュメントは、こちらをご覧ください。

ウェブは、多様なコンテンツの重要な VR プラットフォームになりつつあります。空間オーディオはこの新たなメディアが広く採用されるかどうかおいて決定的な役割を果たすようになります。Songbird と Omnitone は、ウェブ プラットフォームで空間オーディオを実現する際に鍵となるツールです。感動的な VR 体験を提供する最高のプラットフォームとしてウェブを確立できるかどうかも、これらのツールにかかっています。こういったオーディオ体験と three.js のような 3D JavaScript ライブラリを組み合わせれば、未来のウェブを垣間見ることができます。
3D 環境と空間サウンドを組み合わせたデモ

このプロジェクトは、Google の Daydream チームと Web Audio チームとの密接な連携によって実現できたものです。この連携によって、デベロッパーが開発する Daydream アプリケーションと同じようなオーディオ機能をウェブで実現できるようになります。

オープンソースの Songbird を使って皆さんが作るものを楽しみにしています。GitHub でコードをご確認いただき、フィードバックをお送りください。Songbird を使って完全な空間オーディオを作成するデモもたくさん公開されています。



Reviewed by Eiji Kitamura - Developer Relations Team


Martin 氏による詳しい解説や、このプロジェクトについての Slashgear のコメントもご覧ください。

ドクター・フー のファンである)Tom Minnich 氏は、ダーレクの声で話すアシスタントを作りました。

Minnich 氏は同じようなことをしたい方のために Voice Kit の改造方法をまとめたチュートリアルも提供しています。これを使えば、ドロゴンの声のアシスタントも作れるかもしれません。

Victor Van Hee 氏は、Voice Kit を使って音声で起動できるインターネット ストリーミング ラジオを作りました。別のタイプのオーディオ ファイルも再生できます。手順が公開されているので、同じものを作ることもできます。

現在、Voice Kit は米国で入手できます。今年末までに、世界各国で販売されるようになる予定です。最新のアップデート情報をお知らせする本ブログにもご注目ください。Voice Kit に強い需要があることは、AIY Projects の大きな推進力になっています。

人間の声や視覚、動きを理解するキットで Maker を刺激する


次のキットには、視覚や動作検出が含まれる予定です。これは、既存の Voice Kit と連携して動作できるようになるはずです。AIY Project のキットは、シンプルで強力なデバイスのインターフェースを実現する「目」、「耳」、「声」、そして「バランス」感覚をモノ作り愛好家の皆さんに提供するものになるでしょう。

皆さんからのフィードバックを次のリリースに反映したいと考えていますので、ぜひ hackster.io にアクセスするか、コメントを記入してお知らせください。また、皆さんが作っているものを私たちやモノ作り愛好家コミュニティと共有してください。その際には、ソーシャル メディアでハッシュタグ #AIYprojects をつけてください。



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


結果は、皆さんの話し方がデータセットでカバーされているかどうかによって異なりますので、完璧ではないかもしれません。商用の音声認識システムは、この教育用の例よりもはるかに複雑です。しかし、特徴的な発音や話し方の違いがデータセットに追加されるにつれて、またコミュニティの貢献によって TensorFlow のモデルが改善されるにつれて、精度が上がり、拡張機能が増えていくことを期待しています。

自分でモデルをトレーニングする方法は、TensorFlow.org の新しい音声認識チュートリアルで学ぶことができます。フレームワークの最新の開発バージョンと最新の PC を利用すれば、わずか数時間でデータセットをダウンロードしてモデルをトレーニングできます。また、さまざまな問題に対応したり、プラットフォームによって遅延やサイズ、精度のトレードオフを行うオプションも豊富に用意されており、ニューラル ネットワークをカスタマイズできるようになっています。

このデータセットとチュートリアルを使って皆さんが構築するアプリを見ることを楽しみにしています。ぜひ、この世界に飛び込んで音声認識を始めてみてください!


* このネットワークのアーキテクチャは、Interspeech 2015 で発表された Convolutional Neural Networks for Small-footprint Keyword Spotting(短いキーワードを検出するための畳み込みニューラル ネットワーク)に基づいています。



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



Google Play は、日本のインディーゲーム開発者の皆様が情熱と創造力を注いで作ったゲームのために、日本、そして世界のプレイヤーと業界エキスパートに広く知っていただき、ひいてはビジネスとしての成功も目指すためのお手伝いをさせていただければと願い、このコンテストを開催します。

コンテスト参加に興味をお持ちの開発者の皆様は、2017 年 10 月 28 日に開催するキックオフイベントへの出席をぜひご検討ください。当日はコンテストの説明やトレーニングを実施いたします。


また、以下が今後の主なスケジュールとなっております。コンテストのルールなど、詳しくはウェブサイトをご参照ください。



スケジュール


2017年

  • 10 月 28 日(土):キックオフイベント(詳細はこちら
  • 11 月 13 日(月):Unreal ゲーム開発ワークショップ(詳細はこちら

2018年

  • 2 月 1 日(木):ゲーム参加受付開始。賞品、審査員、ファイナルイベント開催日時と会場などの発表。一般参加者のファイナルイベント参加受付開始
  • 3 月 25 日(日):ゲーム参加受付締切
  • 4 月上旬:トップ 20 ファイナリストの発表
  • 4 月 28 日(土):ファイナルイベント開催。トップ 10、トップ 3を選抜

Posted by Hidenori Fujii - Play Team
Share on Twitter Share on Facebook

  • アプリに 2 ~ 3 種類のアクションが個別に存在する場合は、複数のアプリ ランチャーを使用します。たとえば、さまざまなオプション、アクション、ビューがあるアクティビティ トラッキングと、トラッキングしたアクティビティの履歴の分析や管理の両方の機能をサポートするアプリの場合、これらのタスクを扱うために複数のアプリ ランチャーを使うことができます。または、アプリにシンプルなホーム画面がある場合は、これらの機能を画面の下に一列に並べて配置することもできます。
  • アクション ドロワーの上部でピークを使用して、プライマリ アクションにすばやくアクセスできるようにします。ビューに関連付けられているプライマリ アクションがない場合は、デフォルトの動作をオーバーライドしてオーバーフロー ボタンでピークするようにし、ボタンがタップされた際に、ビューの下部にすべてのアクションを表示します。

  • Wear 2.0 端末では、アプリでこういった新しい UI パターンを活用して、一貫性のあるユーザー エクスペリエンスを提供できます。Wear のナビゲーションとアクションについてのトレーニング リソースや、ナビゲーションおよびアクション ドロワーのマテリアル デザインの仕様もご覧ください。  

    通知


    Wear 2.0 では、シンプルな縦方向のナビゲーション パターンが使われており、横方向にスワイプして通知アクションを表示するジェスチャーはなくなっています。通知アクションは、単一のプライマリ アクションとして、適宜通知の下部に表示されます。プライマリ アクションがない場合は、通知が展開されて縦スクロールが可能な単一のビューにオプションが表示されます。  
    通知は、大きな変更を行わなくても 1.x 端末と 2.0 端末の両方で動作しますが、外見はまったく異なります。  

    Wear 2.0 端末向けにアプリを作成する場合は、次のベスト プラクティスを適用すれば通知のユーザー エクスペリエンスを改善できます。  
    1. 展開できる通知をサポートします。ユーザーが時計上で多くのコンテンツを見ることができるように、BigTextStyle を使います。
    2. 通知の表示に折りたたみ可能なビューを使用します(適切な場合)。可能な場合は、setContentIntent() を利用して折りたたまれた通知ビューに通知のプライマリ アクションを追加します。
    3. メッセージング アプリでは MessagingStyle を利用します。展開した通知では、このスタイルを利用してチャットアプリのような高度なエクスペリエンスを提供します。
    4. Wear 1.0 ユーザー向けの指示をアップデートします。横方向にスワイプしてカードを操作する説明(Wear 1.x パターン)を削除します。
    5. インライン アクションを利用して通知を拡張します。これによって、通知をタップして展開し、詳細を表示しなくてもアクションを行えるようになります。メッセージの通知に対するアクションでは、Smart Reply プリセット、音声、キーボード入力など数種類の入力方法を利用できます。これらの機能を活用して追加機能を提供し、ユーザーの満足度を高めましょう。

    詳細については、通知にウェアラブル機能を追加するをご覧ください。  

    ウォッチフェイスの追加機能

    ウォッチフェイス デベロッパーやサードパーティ データ プロバイダは、Wear 2.0 のウォッチフェイスの追加機能 API を使ってユーザーが求めている大事な情報を一目でわかる形で簡単に提示できます。この API をサポートしているウォッチフェイスは、外見を完全に制御しつつ、時計にインストールされている任意のデータ プロバイダを使用するように設定できます。ウォッチフェイスの追加機能 API をサポートしているアプリは、ウォッチフェイスの追加機能をサポートしている任意のウォッチフェイス上でデータを公開できます。こういったウォッチフェイスの追加機能は、データ プロバイダの設定とウォッチフェイスに割り当てられているスペースに応じて、さまざまな形態(短いテキスト、アイコン、範囲値、長いテキスト、小さなイメージ、大きなイメージ)で表示できます。  

    ウォッチフェイスの追加機能をサポートする場合は、この機能がウォッチフェイス全体のデザインと一致し、さらにデータ型を適切に扱えるように、以下の点に注意してウォッチフェイスを作成することをおすすめします。  
    1. Wear 2.0 SDK の TextRenderer クラスを使用します。これによって、ウォッチフェイスの追加機能内のテキストが縮小されて境界内に収まるようになります。テキストベースのウォッチフェイスの追加機能の境界を越えた場合は、動的に改行や文字列の省略が行われます。
    2. ComplicationDrawable クラスから、ウォッチフェイスの追加機能の背景色、形、境界線、フォント オプションを指定します。これによって、ウォッチフェイスの追加機能がウォッチフェイスをレンダリングする方法を完全に制御できます。
    3. ユーザーが設定メニューからウォッチフェイスの追加機能を設定または調整できるように、ウォッチフェイスをデザインします。このような設定を追加する方法については、GitHub の ウォッチフェイス サンプルをご覧ください。
    4. データ プロバイダ テスト スイート アプリを使ってダミーデータをウォッチフェイスの追加機能にフィードします。これによって、ウォッチフェイスの追加機能ですべてのレンダリングが適切に行われ、フォントが境界内でフォーマットされることを確認できます。
    5. ウォッチフェイスの追加機能のデータを提供するには、ComplicationProviderService を使ってデータを公開します。ここでは、アプリがウォッチフェイスの追加機能に提供する ComplicationData の種類を定義および設定するだけです。

    Wear 端末のスタンドアロン機能

    1. コンパニオン アプリがインストールされておらず、android.hardware.type.watch ハードウェア機能フラグを使用している場合に、アプリが単独で動作するようにします。この機能を使うと、スマートフォンのコンパニオン アプリをインストールしていなくても Wear 端末から直接アプリを検索してインストールできるようになります。ユーザー エクスペリエンスが損なわれないように、単独でもアプリが適切に動作するようにします。
    2. ウェアラブル アプリでログイン認証や主な機能を使う際に、スマートフォン アプリに依存しないようにします。複雑な入力や認証(パスワードの入力など)が必要な場合は、ウェアラブル アプリからコンパニオンのスマートフォンに向かわせることはできますが、アカウントやパスワードの入力には、アプリよりもウェブ UI を利用するようにします。
    3. 別の目的でアプリをサポートするためにスマートフォンにコンパニオン アプリを表示する必要がある場合、CapabilityApi を使います。この方法は、ユーザーのコンパニオン端末で Play Store の適切な掲載情報を開き、不足しているアプリをインストールするために使用します。それ以外の場合は、Wear のビルトイン Wi-Fi や GPS などの接続機能を使って、アプリが単独で動作できるようにします。
    4. Play Store 掲載情報に、コンパニオン アプリの要件や Wear アプリの機能について説明を加えます。この説明によって、ユーザーが機能を予測したり正しいアプリをインストールできるようになり、最高のエクスペリエンスを提供できます。
    5. ウェアラブル アプリがスマートフォンのコンパニオンと連携せずに動作できる場合は、マニフェストに com.google.android.wearable.standalone フラグを設定します。このフラグは、Android または iOS のコンパニオン スマートフォンとペア設定していなくても、ウェアラブル アプリをインストールするだけで完全に動作することを示します。

    本投稿では多くのことを取り上げましたが、アプリやゲームを最適化し、Wear の最新パターンや機能を活用するためのリソースは他にもあります。質の高い Wear アプリを作るために、品質ガイドラインをレビューし、デベロッパー トレーニング ドキュメントに目を通してウェアラブル アプリ開発ウェアラブル アプリ デザインのベスト プラクティスを学習してください。  



    Reviewed by Yoshifumi Yamaguchi - Developer Relations Team
    Share on Twitter Share on Facebook

    図 1.  Measure フェーズでビューツリーをたどる例

    描画プロセス内の各フェーズでは、上から順にビューツリーをたどる処理が必要です。そのため、ビュー階層に別のビューが埋め込まれている(ネストしている)ビューが多いほど、端末がビューを描画する際に必要となる時間と計算能力が増加します。つまり、Android アプリのレイアウトでフラットな階層を維持すれば、高速で反応の早いユーザー インターフェースを実現できます。

    従来型のレイアウト階層にかかるコスト

    以上の説明に留意した上で、LinearLayout オブジェクトと RelativeLayout オブジェクトを使って従来型のレイアウト階層を作成してみましょう。



    図 2. サンプル レイアウト

    ここでは、上のイメージのようなレイアウトを作成することを考えてみます。従来型のレイアウトを使って作成する場合、要素の階層を含む XML ファイルは次のようになります(この例では、属性は省いています)。
    <RelativeLayout>
      <ImageView />
      <ImageView />
      <RelativeLayout>
        <TextView />
        <LinearLayout>
          <TextView />
          <RelativeLayout>
            <EditText />
          </RelativeLayout>
        </LinearLayout>
        <LinearLayout>
          <TextView />
          <RelativeLayout>
            <EditText />
          </RelativeLayout>
        </LinearLayout>
        <TextView />
      </RelativeLayout>
      <LinearLayout >
        <Button />
        <Button />
      </LinearLayout>
    </RelativeLayout>

    通常、このような種類のビュー階層には改善の余地がありますが、どのような形であっても、いくつかのネストしたビューを作成する必要があります。

    先ほど説明したように、ネストした階層はパフォーマンス悪化の原因となる場合があります。では、ネストしたビューが実際にどのように UI のパフォーマンスに影響するかについて、Android Studio の Systrace ツールを使って見てみましょう。各 ViewGroupConstraintLayoutRelativeLayout)についてプログラムから Measure フェーズと Layout フェーズを呼び出し、それぞれが実行されている間に Systrace が呼び出されるようにします。次のコマンドを実行すると、時間がかかっているイベントが記録された、HTML ファイルが生成されます。これには、20 秒間に発生した標準より大幅に時間がかかっている Measure や Layout のパスなどが含まれます。
    python $ANDROID_HOME/platform-tools/systrace/systrace.py --time=20 -o ~/trace.html gfx view res

    Systrace の使用方法の詳細は、Systrace で UI のパフォーマンスを分析するためのガイドをご覧ください。

    Systrace は、このレイアウトに関する(たくさんの)パフォーマンスの問題を自動的に報告するだけでなく、それを修正する方法も提案してくれます。[Alerts] タブをクリックすると、このビュー階層の描画には、 Measure フェーズと Layout フェーズで 80 回ものパスで標準より大幅に時間がかかっていることがわかります。

    Measure フェーズと Layout フェーズでコストがかかる多くの処理が呼び出されるというのは、理想からはほど遠いものです。描画に必要な作業が多すぎると、ユーザーが気づくようなフレーム スキップが発生する可能性もあります。結論として、このレイアウトはパフォーマンスが悪いことがわかります。これは、ビュー階層がネストされていることと、各子要素について 2 回測定を行う必要があるという RelativeLayout の特性が原因となっています。
    図 3. Systrace で RelativeLayout を利用したレイアウトについてのアラートを確認

    この測定に使ったコードは GitHub レポジトリから確認できます。

    ConstraintLayout オブジェクトがもたらすメリット

    ConstraintLayout を使ってレイアウトを作成すると、XML ファイルには次のような要素が含まれることになります(今回も属性は省略します)。
    <android.support.constraint.ConstraintLayout>
      <ImageView />
      <ImageView />
      <TextView />
      <EditText />
      <TextView />
      <TextView />
      <EditText />
      <Button />
      <Button />
      <TextView />
    </android.support.constraint.ConstraintLayout>

    この例からわかるように、レイアウトの階層は完全にフラットになります。ConstraintLayout を使うと、View 要素や ViewGroup 要素をネストさせずに複雑なレイアウトを作成できます。

    たとえば、レイアウトの中ほどにある TextViewEditText に注目してみましょう。
    RelativeLayout を使う場合は、新しい ViewGroup を作成して EditText と TextView の縦方向の位置を合わせる必要があります。
    <LinearLayout
        android:id="@+id/camera_area"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_below="@id/title" >
    
        <TextView
            android:text="@string/camera"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:id="@+id/cameraLabel"
            android:labelFor="@+id/cameraType"
            android:layout_marginStart="16dp" />
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <EditText
                android:id="@+id/cameraType"
                android:ems="10"
                android:inputType="textPersonName"
                android:text="@string/camera_value"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginTop="8dp"
                android:layout_marginStart="8dp"
                android:layout_marginEnd="8dp" />
        </RelativeLayout>
    </LinearLayout>

    しかし、ConstraintLayout を使う場合は、TextView のベースラインを EditText と合わせるという制約を追加するだけで同じ効果が得られます。別の ViewGroup を作成する必要はありません。
    図 4. EditText と TextView の制約
    <TextView
    android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintLeft_creator="1" app:layout_constraintBaseline_creator="1" app:layout_constraintLeft_toLeftOf="@+id/activity_main_done" app:layout_constraintBaseline_toBaselineOf="@+id/cameraType" />

    ConstraintLayout を使ったレイアウトに対して Systrace ツールを実行すると、同じ 20 秒間でコストがかかる Measure および Layout での標準より時間がかかっているパスがかなり少なくなっていることがわかります。このパフォーマンスの向上は当然です。ビュー階層がフラットになっているからです。
    図 5. Systrace で ConstraintLayout を利用したレイアウトについてのアラートを確認

    なお、先ほどのレイアウトの ConstraintLayout 版は、レイアウト エディタだけを使い、XML を直接編集することなく作りました。

    パフォーマンスの違いを測定する

    ConstraintLayoutRelativeLayout の 2 種類のレイアウトについて、Android 7.0(API レベル 24)で導入された OnFrameMetricsAvailableListener を使ってすべての Measure と Layout のパスにかかる時間を分析してみました。このクラスを使うと、アプリの UI レンダリングについてフレームごとのタイミング情報を収集できます。

    次のコードを呼び出すと、フレームごとの UI アクションの記録を開始します。
    window.addOnFrameMetricsAvailableListener(
            frameMetricsAvailableListener, frameMetricsHandler);

    タイミング情報が利用できるようになると、frameMetricsAvailableListener() コールバックが呼び出されます。今回は、Measure と Layout のパフォーマンスを取得したいので、実際のフレームの所要時間を取得する際に FrameMetrics.LAYOUT_MEASURE_DURATION を呼び出します。
    Window.OnFrameMetricsAvailableListener {
            _, frameMetrics, _ ->
            val frameMetricsCopy = FrameMetrics(frameMetrics);
            // Layout measure duration in nanoseconds
            val layoutMeasureDurationNs = 
                    frameMetricsCopy.getMetric(FrameMetrics.LAYOUT_MEASURE_DURATION);

    FrameMetrics で取得できるその他のタイプの所要時間情報の詳細については、FrameMetrics API リファレンスをご覧ください。


    測定結果: 高速なのは ConstraintLayout

    パフォーマンスの比較から、ConstraintLayoutRelativeLayout より計測フェーズと配置フェーズが約 40% 早くなっていることがわかります。
    図 6. 計測と配置(単位: ミリ秒、100 フレームの平均)

    この結果からわかるように、ConstraintLayout の方が従来型のレイアウトよりも高速である可能性が高いと言えます。さらに、ConstraintLayout オブジェクトがもたらすメリットのセクションで説明したように、ConstraintLayout には複雑でパフォーマンスのよいレイアウトを作成するための他の機能も備わっています。詳しくは、ConstraintLayout による応答性が高い UI の作成ガイドをご覧ください。アプリのレイアウトをデザインする際には、ConstraintLayout を使うことをお勧めします。ConstraintLayout を使うと、以前は深くネストさせなければならなかったほとんどすべての場合で、使いやすく最適なパフォーマンスを提供できるレイアウトを実現できます。

    付録: 測定環境


    上記の測定は、すべて以下の環境で実施しました。


    端末 Nexus 5X
    Android バージョン 8.0
    ConstraintLayout バージョン 1.0.2


    次のステップ


    デベロッパー ガイドAPI リファレンス ドキュメントMedium の記事を確認し、ConstraintLayout ができることを理解しましょう。また、ConstraintLayout のアルファ リリース以降の数か月間で、フィードバックや問題をお送りくださった皆さん、どうもありがとうございました。おかげさまで今年初め、本番環境で利用できる バージョン 1.0ConstraintLayout をリリースできました。ConstraintLayout の改善はこれからも続きますので引き続き Android Issue Tracker からフィードバックをお送りください。



    Reviewed by Takeshi Hagikura - Developer Relations Team
    Share on Twitter Share on Facebook

    左(Android O 以前): システムアップデートに偽装した PHA のインストール画面。
    右(Android O): ユーザーは、PHA のインストール前に、インストールを行うアプリにパーミッションを付与する必要があります。

    Android O では、Install unknown apps パーミッションが追加され、提供元不明のアプリのインストールが安全になっています。このパーミッションは、他のランタイム パーミッションと同じく、インストールしようとするアプリに関連付けられています。そのため、ユーザーがそのインストール提供元を利用するパーミッションを付与してから、アプリのインストールの確認画面が表示されるようになります。Android O 以降を実行している端末では、あらかじめ許可を得ていない悪意のあるダウンローダーがユーザーを欺いてアプリをインストールさせることはできません。

    この新しいパーミッションによって、ユーザーにとっての透明性や制御範囲が向上し、信頼できる提供元によるアプリのインストールを有効化する処理も効率化されます。Settings アプリには、ユーザーがインストールを許可した提供元不明のアプリの一覧が表示されます。特定のアプリに付与したパーミッションは、いつでも取り消すことができます。

    提供元不明のアプリのインストールを許可したアプリはいつでも確認できます。パーミッションを付与する処理を簡単にするため、セットアップのフローの中でユーザーをパーミッション画面に飛ばすこともできます。


    デベロッパーにとっての変更点

    Package Installer 経由で別のアプリをダウンロードおよびインストールするアプリでこの新しい動作を利用するには、いくつかの変更が必要になる場合があります。targetSdkLevel が 26 以降のアプリで別のアプリをインストールするには、次のようにしてマニフェスト ファイルに REQUEST_INSTALL_PACKAGES パーミッションを含める必要があります。
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    

    このパーミッションを宣言していないアプリは、別のアプリをインストールすることはできません。これは、別のアプリのインストールを想定していないアプリには便利なセキュリティ保護になります。ACTION_MANAGE_UNKNOWN_APP_SOURCES Intent アクションを利用して、実際にインストールを行う前に Install unknown apps パーミッション画面を表示することもできます。また、PackageManager の canRequestPackageInstalls() API を利用して、このパーミッションの状態を問い合わせることもできます。

    Google Play で配布するアプリから別のアプリのインストールやアップデートを行う場合は、Play ポリシーが適用されることも忘れないようにしてください。大半の場合、このような動作は不適切です。Play Store のアプリの掲載情報ページへのディープリンクを使うようにしてください。

    提供元不明のアプリのインストールについての詳しい情報は、アップデートされた公開ガイドをご覧ください。また、Android O で強化されたセキュリティについては、他の投稿にもご注目ください。


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

    Fast Fetch は、Delayed Fetch と比較して 50 パーセンタイルで 850 ミリ秒、90 パーセンタイルで 2.7 秒高速です。


    AMP Ads の協調レンダリング

    広告レスポンスが AMP 形式である場合(AMP Ads)、AMP ランタイムは広告を即座にレンダリングします。レスポンスが通常の広告である場合、ランタイムはページの残りのコンテンツが読み込まれるのを待つ必要があります。AMP 広告ではパフォーマンスが保証されているのでそのようなことが可能ですが、非 AMP 広告にはそのような保証はありません。



    DoubleClick と AdSense の実験によると、AMP Ads は 50 パーセンタイルで 1.6 秒、90 パーセンタイルで最大 5 秒早く読み込まれます。


    広告が画面に早く表示されるほど、広告の視認性も向上します。ブランドが多くの人の目に触れることになるので、これは広告主にとって有益です。また、視認性の向上によってユーザーが広告を開くチャンスが増えるため、成果型の広告主にとっても有益です。

    Fast Fetch の新機能のリリース

    多くのサイトオーナーが、主要サイトのコンテンツを AMP 形式で提供する実験を行っています。そのようなサイトオーナーの作業をサポートするため、AMP の Fast Fetch には、さらに高度な広告機能が追加される予定となっています。たとえば、次のようなものです。

    サイトオーナー(または広告主)の皆さまへ

    DoubleClick と AdSense のおかげで、AMP ページから広告リクエストが送られる際に、一定の条件を満たす広告は自動的に AMP に変換されます。AMP に変換可能な形式が増えるにつれて、自動変換される広告も増加することが考えられます。その結果、何も変更しなくても、皆さまのページに高い視認性とクリックスルー率を持つ広告が提供されることになります。

    クリエイティブを制作している広告主(またはサイトオーナー)の皆さまへ

    広告を制作している方は(サイトオーナーであるか広告主であるかにかかわらず)、AMP Ads への切り替えをご検討ください。視認性やユーザー エクスペリエンスが高い高速な広告によるメリットを受けることができます。まずは、社内のクリエイティブ制作者に、こちらの AMP Ads デベロッパーのよくある質問を確認してもらってください。

    クリエイティブ アセットの制作を外注している場合は、AMP クリエイティブの制作に特化した JoyStick Interactive などの代理店に依頼することができます。広告制作ツールを使ってアセットを作成している場合は、Celtra の Ad Creator を使って AMP Ads を制作することをご検討ください。Google Web Designer などの他のツールでも、近日中に AMP 広告がサポートされます。

    広告技術プラットフォームの皆さまへ

    DoubleClick や Adsense の広告タグは、Fast Fetch を利用して劇的にレイテンシを削減しています。私たちは、すべての広告ネットワークが Fast Fetch に移行することを望んでいます。移行をサポートするガイドはこちらです。AMP Ads に署名したい方は、Cloudflare の Firebolt サービスを利用できます。自分で署名したい方は、Github をご覧ください。

    「Cloudflare Firebolt を使うと、どんな広告ネットワークでも、署名した広告を世界に提供できます。追加の作業はほとんど発生しません」と Cloudflare のプロダクト戦略責任者である Dane Knecht 氏は述べています。「私たちは、インターネットをよりよくするという使命の一環として、Firebolt のグローバルな AMP 広告エクスペリエンスをさらに高速で安全なものへと強化しています。それによって、コンバージョン率を向上させることができます」


    また、AMP Ads は DoubleClick Ad Exchange(Real Time Bidding 経由)をサポートしており、DSP は RTB 経由で AMP 広告を提供できるようになっています。

    AMP での広告は大きく進化しており、フェーズ 3 に入ったことをうれしく思っています。このフェーズでは、次のようなことを行う予定です。 





    いつものように、皆さまのフィードバックは大歓迎です。ウェブの進化に向けて、上記の取り組みにご協力いただける方もお待ちしています。


    Reviewed by Yoshifumi Yamaguchi - Developer Relations Team
    Share on Twitter Share on Facebook


    今年のアプリには、I/O の進行状況を随時ユーザーに知らせる フィード機能もありました(アプリのユーザーのほとんどは現地にいなかったため、フィードがカンファレンスの状況を伝える窓になりました)。このフィード機能も RTDB を利用しており、単純な CMS を使ってサーバーにデータをプッシュしています。RTDB のフィードデータを Cloud Function で監視し、サーバー上でフィードデータが更新されると、Function が Cloud Messaging のダウンストリーム メッセージをクライアントに送信します。クライアントでは、新しいフィードアイテムが視覚的にユーザーに提示されます。

    2015 年と 2016 年 の IOSched には、MVP アーキテクチャが採用されていましたが、今年も引き続き、このアーキテクチャを利用しています。このアーキテクチャによって、関心の分離やテストの促進が実現でき、一般的にコードも見やすくなって保守性も上がります。フィード機能では、Android Architecture Blueprints から着想を得たさらに軽量な MVP 実装を試してみることにしました。これは、必要となるモジュール性を提供しつつ、とても簡単に概念化できるものです。ここでは、教育的な面と実用的な面の両方を目標とし、デベロッパーに別の MVP パターンを示すとともに、この機能のニーズを満たすアーキテクチャも提示したいと考えました。

    また、IOSched で初めて Firebase Remote Config が多用されました。かつては、WiFi 情報、シャトル便のスケジュール、ライドシェアリングの割引コードなど、セッション以外のデータがカンファレンスの前や最中に変更されたことをユーザーにお知らせするのは難しいことでした。単にアプリ内のデフォルト値をアップデートできるようにしたいだけなので、アプリのアップデートを強制するのは現実的ではありません。この問題は、Remote Config を使って簡単に解決できました。

    最終的には、3 層のシステムでユーザーに変更を通知する形になりました。
    1. カンファレンス データやユーザーデータの変更は、Cloud Messaging とデータ同期経由で伝達されます(ping-and-fetch モデル)。
    2. フィードデータの変更は、RTDB で管理します。
    3. アプリ内定数の変更は、Remote Config で管理します。

    今後の計画

    2017 年版のコードがリリースされましたが、今後実施する作業も残っています。まず、バックグラウンド処理の最新パターンに従うようにコードを更新する予定です(そして、アプリを「O」対応にします)。さらに、Android の Architecture Components を採用して、アプリ全体の設計をシンプルなものにする予定です。デベロッパーの皆さんは、コードの変化を GitHub でフォローできます。



    Reviewed by Takeshi Hagikura - Developer Relations Team
    Share on Twitter Share on Facebook




    DevFest は、Google Developer Group(GDG)コミュニティによって世界各地で開かれるデベロッパー向けイベントです。参加者は AndroidFirebaseGoogle Cloud PlatformTensorFlow による機械学習、Webなどの Google のデベロッパー テクノロジーに関する技術情報、知識やアイデアを共有できます。

    それぞれの DevFest は、主催するコミュニティとその地域のニーズに沿ったユニークな内容となり、日本では下記のイベント企画がされています。情報は追加、更新されていきますので、ブログ記事やツイッターをご確認ください。



    DevFest Tokyo 2017
    日時:2017 年 10 月 9 日(祝)、10:00 - 17:00(仮)
    場所:国際交流館 プラザ平成(東京都江東区青海2-2-1)
    参加費:無料
    定員:1,000 名
    対 象 者:Android, Web, GCP (ML), Firebase 技術者および学生
    主 催:GDG Tokyo, Shibuya.apk, DroidKaigi, 日本Androidの会, golang.tokyo, html5j, GTUG Girls, Women Who Go, XR 女子部, Droid Girls, Geek Women Japan, GCPUG, TFUG, TangoWG




    ■ DevFest Kyoto 2017
    日時:2017 年 11 月 4 日
    場所:京都市内
    参加費:無料
    定員:40 名
    主催:GDG 京都、KyotoGAS



    ■ GDG温泉︎ in 湯布院 Devfest
    日時:2017 年 11 月 3 日(祝)〜 11 月 5 日(日)
    場所:由布市湯布院町川上茶屋の上 3366-4 日本文理大学 湯布院研修所
    参加費:17,000円(2 泊 3 日 5 食付き)
    定員:20 名
    主催:GDG九州


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


    同じ Windows コンピュータで Chrome、Chrome ベータ版、Chrome Dev 版が共存可能に 

    Chrome ベータ版や Chrome Dev 版をインストールするには、Chromium リリース チャンネル ページにアクセスします。すでに Chrome の Dev 版やベータ版をインストールしており、安定版の Chrome と共存させたい方は、一度アンインストールし、このページから再インストールする必要があります。アンインストールする前に Chrome にログインしておくと、ブックマークや設定などのデータを簡単に移行できます。また、Chrome の Dev 版やベータ版で問題を見つけた方は、フィードバックをお送りください


    Reviewed by Eiji Kitamura - Developer Relations Team
    Share on Twitter Share on Facebook