[go: up one dir, main page]

この記事は Chrome DevTools チームによる Chromium Blog の記事 "10 Years of Chrome DevTools" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

Chrome が 10 周年を迎えました!オープンで協調的、協力的なウェブ開発コミュニティが実現していることを皆さんに感謝します。DevTools は、たくさんのプロジェクトからインスピレーションを得ています。ここでは、DevTools がどのように登場し、年とともにどう変化してきたのかを振り返りたいと思います。

はじめに Firebug ありき

デベロッパー ツールが搭載されていなかったブラウザを想像してみてください。その場合、JavaScript をどうやってデバッグするのでしょうか。基本的には、3 つの選択肢があるでしょう。
  • コードのあちこちで window.alert() を呼び出す
  • コードの一部をコメントアウトする
  • JavaScript の神様が解決策を授けてくれるまで、じっとコードを見つめる
レイアウトの問題や、ネットワークのエラーはどうでしょう。ここでも、実際に行えるのは、コードの中で骨の折れる実験を行うことだけでした。2006 年までは、それがウェブ開発の現実でした。その後、Firebug というちょっとしたツールが登場し、すべてが変わりました。

Saying Goodbye to Firebug より転載した Firebug の Net パネルのスクリーンショット(出典およびライセンス

Firebug は、ページのデバッグ、編集、監視をリアルタイムに行える Firefox の拡張機能です。その途端、ページについて何もわからない状態にあったウェブ デベロッパーは、現在のデベロッパー ツールの実質的な中核機能を使えるようになりました。Firefox がなぜそのような動作になるかを厳密に理解できるようになったことで、ウェブに創造性があふれることになりました。Firebug がなければ、Web 2.0 の時代は到来しなかったことでしょう。

WebKit Web Inspector

Firebug のリリースとほぼ同時期に、何名かの Google エンジニアがやがて Chrome となるプロジェクトに着手しました。Chrome は、最初からさまざまなコード ライブラリのマッシュアップでした。Chrome エンジニアは、レンダリングにオープンソース プロジェクトである WebKit を使いました。WebKit は、現在も Safari で利用されています。WebKit を使うメリットの 1 つに、Web Inspector という便利なツールが付属していたことがあげられます。

Web Inspector Redesign から転載した Web Inspector のスクリーンショット(出典およびライセンス

Firebug の Net パネルと同じように、この最初の Web Inspector も見覚えがあるでしょう。ほとんどの機能は、現在の Chrome DevTools の Elements パネルに受け継がれています。Web Inspector は Firebug の数日後にリリースされ、Safari はデベロッパー ツールが直接バンドルされた初めてのブラウザになりました。

「Inspect Element」の時代

Chrome は、ブラウザ エコシステムに多くの革新的なアイデアをもたらしました。たとえば、検索とアドレスバーを組み合わせたオムニボックス、1 つのタブがハングしてもブラウザ全体がクラッシュしないようにするマルチプロセス アーキテクチャなどです。しかし、私たちが最も満足しているイノベーションは、すべてのビルドですべてのユーザーにデベロッパー ツールが提供され、マウスのクリックだけで使えるようになったことです。

2010 年の「Inspect Element」


Chrome 以前のデベロッパー ツールはオプトイン機能であり、Firebug のように拡張機能をインストールするか、現在の Safari のようにフラグを設定しなければなりませんでした。Chrome は、すべてのブラウザ インスタンスでデベロッパー ツールを使えるようにした初めてのブラウザです。私たちは、最初からデベロッパーが親しみやすいブラウザを作るという壮大なビジョンを持っていました。しかし、実際問題として、初期の Chrome にはたくさんの互換性の問題(誰も Chrome 向けに構築していなかったので、これは当然のことです)があり、そういった問題を簡単に修正できる方法をウェブ デベロッパーに提供する必要がありました。ウェブ デベロッパーから便利な機能だという声が寄せられたので、この機能はその後も継続されることになりました。


モバイルの時代


DevTools プロジェクトの最初の数年間で行ってきたのは、本質的に Firebug や Web Inspector から始まった物語にいくつかの章を追加するような作業でした。DevTools へのアプローチにおいて次の大きな転換点は、明らかなスマートフォン時代の到来です。
このすばらしい新世界における私たちの最初のミッションは、デベロッパーが開発マシンから実際のモバイル端末のデバッグを行えるようにすることでした。この仕組みは、リモート デバッグと呼ばれています。実は、DevTools はリモート デバッグを処理する上で絶好の位置にありました。これは、Chrome のマルチプロセス アーキテクチャが生んだもう 1 つの成果です。私たちは、DevTools プロジェクトの初期のころから、デバッガがマルチプロセス ブラウザに確実にアクセスする唯一の方法は、ブラウザをサーバー、デバッガをクライアントとして、クライアント サーバー プロトコルを使うことであるという点に気づいていました。このプロトコルは、モバイル Chrome の登場時点で既に組み込まれていました。そのため必要なことは、開発マシンで実行されている DevTools がこのプロトコルを使ってモバイル端末で実行されている Chrome と通信できるようにすることだけでした。このプロトコルは、Chrome DevTools Protocol と呼ばれており、現在も DevTools のバックボーンであり続けています。

リモート デバッグ

リモート デバッグは正しい方向に向かう一歩であり、現在も実際のモバイル端末でサイトが問題なく動作することを確認する主なツールであり続けています。しかし、時間とともに、リモート デバッグはやや煩雑に感じるようになりました。サイトや機能の構築の初期段階にある場合、一般的に必要になるのはおおまかなモバイル機能だけです。そこで、次のようなモバイル シミュレーション機能を作ることにしました。
  • タッチベースの入力、端末の画面の向きのシミュレーションを含む厳密なモバイル ビューポートのエミュレーション
  • ネットワーク接続の帯域を絞ることによる 3G のシミュレーション、CPU の制限による能力の低いモバイル ハードウェアのシミュレーション
  • ユーザー エージェント、位置情報、加速度計データなどの偽装

これらの機能は、まとめて Device Mode と呼ばれています。





Device Mode の初期プロトタイプ



2018 年時点の Device Mode





パフォーマンスの時代


モバイルの時代が幕を開け、Gmail などの大型アプリがウェブ機能の限界を突破していきました。その一方で、Gmail 規模のバグには、Gmail 規模のツールが必要となりました。そこで、Chrome がページを表示するために必要な処理について、すべての内訳を順を追って厳密に表示するようにしました。これは、私たちが行ったツール エコシステムに対する最初の大きな貢献の 1 つとなりました。

Chrome デベロッパー ツールの機能強化で発表された最初の Timeline パネル


2018 年時点の Performance パネル

こういったツールは正しい方向に向かう一歩でしたが、最適化できる場所を見つけるためには、ブラウザの動作について細かい部分まで把握し、たくさんのデータを分析する必要がありました。そこで先日、この機能をベースにして開発を行い、パフォーマンスについての詳しい分析を提供できるようにしました。新しい Lighthouse エンジンは、Audits パネルで活用され、さらに CI システムと統合できる Node モジュールとしても利用できるようになっています。

Audits パネルに表示されるパフォーマンス提案

Node.js の時代

2014 年頃まで、私たちは DevTools が主に Chrome ですばらしい体験を構築するためのツールだと考えていました。しかし、Node の台頭によって、ウェブ エコシステムにおける私たちの役割の再考が求められることになりました。

Node が登場して最初の数年間、Node デベロッパーは、Firebug が登場する前のウェブ デベロッパーや、Timeline パネルが登場する前の Gmail デベロッパーのような状況にありました。つまり、Node アプリの規模が Node ツールの規模を上回っていたのです。Node が Chrome の JavaScript エンジンである V8 で動作していることを考えれば、DevTools がこの溝を埋める候補となることは自然なことです。Node のデバッグをサポートし、ブレークポイント、コードのステップ実行、ブラックボックス化、トランスパイルされたコードのソースマップなどの通常の DevTools 機能を利用できる DevTools は、2016 年に登場しました。
Node Connection Manager



DevTools プロトコル エコシステム

Chrome DevTools Protocol(CDP)という名前を聞くと、DevTools のみが使う API であるように思うかもしれません。しかし実際はそれよりも汎用的で、プログラムから Chrome にアクセスできる API になっています。ここ数年間で、このプロトコル エコシステムに加わるサードパーティ製のライブラリやアプリケーションがいくつか登場しています。
  • プロトコルへの低レベル JavaScript アクセスを提供する chrome-remote-interface
  • 1 段階上の抽象化を提供し、最新の JavaScript API と自動更新に対応したヘッドレス Chrome ブラウザの自動化を実現する Puppeteer
  • ページのパフォーマンスと品質を改善する方法を見つける処理を自動化する Lighthouse

うれしいことに、これらのパッケージを使って Chrome と高度なインタラクションを行うたくさんのプロジェクトが登場しています。ツールの開発や自動化のビジネスに携わっている方は、ぜひこのプロトコルを確認し、皆さんの領域で新たなチャンスを開くことができないかを調べてみてください。たとえば、VS Code チームや WebStorm チームは、それぞれの IDE で JavaScript デバッグを実現するために、この機能を使っています。


次のステップ

私たちのミッションの中心にあるのは、皆さんがウェブですばらしい体験を構築するために役立つツールを開発することです。どんなプロダクトや機能を開発するかという判断にあたっては、皆さんのフィードバックを非常に重視しています。

このような活発なコミュニティを実現していただき、ありがとうございます。皆さんとともにウェブを作り上げる次の 10 年間を楽しみにしています。

Reviewed by Eiji Kitamura - Developer Relations Team

Googleでは、14 日に開催される、Google Developers ML Summit のカンファレンスで学んだ機械学習を実践する場として、15 日(土)にワークショップ/ハッカソンを開催します。

本イベントでは、機械学習を使って解決したい課題を持っている人と、それを解決したいと思っているエンジニアのマッチングを行い、機械学習を利用して、「どんな課題を解決したいか」、「どのようなツールを使って解決したいか」、そして「実際に課題に取り組んでみる」という 3 つのテーマで行います。

イベント概要
イベント名 : Google Developers ML Summit ワークショップ
日程: 12月15日(土)10:00 - 18:00
会場: グーグル合同会社
定員: 60名
タイムテーブル
9:30 - 10:00 : 開演
10:00 - 12:00 : ワークショップ/ハッカソン
12:00 - 13:00 : ランチ
13:00 - 16:00 : ワークショップ/ハッカソン
16:00 - 17:00 : 発表会
17:00 - 18:00 : 懇親会

申込方法
本イベントに参加希望の方はこちらのフォームよりお申し込みください。

みなさまの参加をお待ちしております。



Posted by Takuo Suzuki - Developer Relations Team

この記事は AdWords API チーム、Josh Radcliff による Google Ads Developer Blog の記事 "Top metrics, absolute top metrics, and average position in the AdWords API and Google Ads scripts" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

新着情報
2018 年 11 月 12 日より、AdWords API および Google 広告スクリプト レポートで以下のフィールドが利用できるようになります。

最上部指標:
  • AbsoluteTopImpressionPercentage
  • SearchAbsoluteTopImpressionShare
  • SearchBudgetLostAbsoluteTopImpressionShare
  • SearchRankLostAbsoluteTopImpressionShare
上部指標:
  • TopImpressionPercentage
  • SearchTopImpressionShare
  • SearchBudgetLostTopImpressionShare
  • SearchRankLostTopImpressionShare
AbsoluteTopImpressionPercentageTopImpressionPercentage は、ページの目標掲載位置に関する固有のインジケーターです。これらの指標を使うと、オーガニック検索結果の上にインプレッションが表示された時間と場所を判断できます。

SearchAbsoluteTopImpressionShareSearchTopImpressionShare は、有効な上部インプレッションのシェアを表します。広告をより目立つ場所に表示するために利用できる上部のスペースを示す最善のインジケーターです。ページの目標掲載位置に対して入札を行いたい場合は、この指標を使うとよいでしょう。以下の理由により、平均掲載順位による入札は推奨されません。
  • 平均掲載順位は、実際はページ内の掲載順位ではなく、オークションでの掲載順位を表します。
  • 入札価格が上がるにつれて、平均掲載順位が下がる場合があります。この現象が発生するのは、入札価格が高い場合、ページ下部のオークションの競争率が高くなることがあるためです。
詳細については、新機能に関する投稿とお知らせのページをご覧ください。

対応が必要になる点
AveragePosition をページの目標掲載位置に対する入札のプロキシとして利用する場合は、入札ロジックで新しい SearchAbsoluteTopImpressionShare または SearchTopImpressionShare 指標を使うように切り替えてください。

ご質問やサポートが必要なことがありましたら、フォーラムからご連絡ください。


Reviewed by Thanet Knack Praneenararat - Ads Developer Relations

この記事は Google パートナー デベロッパー アドボケート、Sebastian Benz による Accelerated Mobile Pages Project の記事 "How to make AMP even faster" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

ampproject.org に新しいガイド「ホストした AMP ページを最適化する」を公開しました。ここでは、AMP ドキュメントを最適化してさらに速く読み込めるようにする方法を説明しています。
AMP はそのままでも高速化されるはずでは、と思う方もいらっしゃるかもしれません。おっしゃる通りです。AMP ランタイムは最速になるように最適化されており、有効な AMP ページはすべて高速に読み込むことができます。そこでさらにパフォーマンスを最適化すれば、ブラウザがさらに速く AMP ページを読み込めるようになります。細かな変更ではありますが、AMP の有効性を損なわずに、読み込みパフォーマンスを大幅に向上できます。
たとえば、XWP が開発している AMP WordPress プラグインには、ガイドに記載されているテクニックが既にいくつか実装されています。その結果、xwp.co の読み込み時間は 12.6% 短縮されました。
もう 1 つの例である Evening Standard は、さらにその先を行き、最適化してサーバー サイド レンダリング(SSR)に対応した AMP を公開しています。これにより、有効な AMP 版よりも FCP が 69% 速くなっています。


なぜ必要か

落ち着いて考えてみましょう。これは必要なことでしょうか?AMP ドキュメントは AMP キャッシュから提供され、そこであらゆる最適化が自動的に行われるのではないでしょうか?AMP ドキュメントが Google や Bing の検索結果で表示される場合など、特定のケースではこれは正しいと言えます。しかし、次のような場合には、AMP ドキュメントがオリジンから提供されます。
  1. https://tasty.co のように、カノニカル ウェブページやモバイルウェブページを AMP で構築した場合。
  2. 他のプラットフォームからオリジン上の AMP ドキュメントにリンクする場合。たとえば Twitter は、標準のモバイル版に代わって、AMP ページへのリンクを提供し始めています。つまり、ユーザーが Twitter のモバイルアプリでリンクをクリックすると、そのリンクから独自サーバー上にある AMP 版のページが開きます。
このような場合には、AMP ページが独自サーバーから提供されるので、その AMP ページが最適な読み込みパフォーマンスを発揮できるかを確認することが重要になります。


ブラウザが AMP ページを高速に読み込めるようにするには

では、AMP の読み込みパフォーマンスを最適化する仕組みを簡単に説明しましょう。amp-imgamp-video などの AMP 固有の要素が動作するためには、AMP ランタイムが読み込まれていなければなりません。つまり、amp-img がイメージのダウンロードを始めるのは、AMP ランタイムが読み込まれてからになります。
ここから、2 つの方法で AMP ページの読み込みを高速化できることがわかります。
  1. ブラウザができる限り速く AMP ランタイムをダウンロードできるようにする。
  2. AMP ランタイムが利用可能になる前であっても、イメージなどの重要なアセットのダウンロードを始めるようブラウザに指示を出す。
これを実現するためのポイントは、rel=preload などのリソースヒントを使って重要なリソースのダウンロードを優先させることです。AMP 最適化ガイドでは、リソースヒントを使って AMP ページを最適化するさまざまな方法が説明されています。また、最適化済みの AMP テンプレートをすばやく生成できる AMP Boilerplate Generator を参照するのもよいでしょう。


first-contentful-paint を改善するには

もう 1 歩踏み込んだパフォーマンス最適化を行うこともできます。AMP ランタイムは、静的なページ レイアウト システムを実装することで、レンダリングとスクロールの際のジャンクを軽減しています。AMP Boilerplate のコードは、AMP ランタイムが読み込まれるまでドキュメントを非表示にすることでこれを実現します。ランタイムが読み込まれると、レイアウトが計算され、コンテンツが表示されます。このアプローチの欠点は、AMP ランタイムが読み込まれるまでユーザーに空のページが表示されること、そしてプログレッシブ レンダリングがサポートされないことです。
この欠点に対処するために、AMP サーバーサイド レンダリングを使って first-contentful-paint(FCP)時間を改善します。そうすれば、AMP ランタイム JavaScript を実行せずに AMP ドキュメントを描画でき、AMP ボイラープレートを削除することができます。たとえば、サーバーサイド レンダリングを行うバージョンの AMP Boilerplate Generator を使うと、通常バージョンの AMP よりも 2 倍高速にレンダリングすることができます。





blog-how-to-make-amp-faster-filmstrip
独自サーバー上の AMP ドキュメントを最適化する方法については、AMP Optimizer をご覧ください。

どれほどパフォーマンスが改善するか

最適化がどのくらい読み込みパフォーマンスに影響するかを確認するために、以下の 3 種類の AMP Start Bike Shop テンプレートのランディング ページを作ってみました。
    1. イメージなし: 最善のシナリオ、すなわち、読み込まれる AMP ランタイムに依存する視覚的コンテンツがない場合をシミュレートする
    2. イメージ: 読み込まれる AMP ランタイムにコンテンツが依存している場合に、読み込み時間を確認する
    3. セルフホスティング フォント: カスタム フォントの読み込みによる影響を確認する
それぞれのページについて、4 種類のテストを行いました。
  1. オリジナル: オリジナルの有効なバージョンの AMP
  2. 最適化: 以下の最適化を行った有効なバージョンの AMP
    1. ランタイム読み込みの最適化
    2. メイン画像のプリロード(該当する場合)
    3. カスタム フォントの最適化(該当する場合)
  3. 最適化 + SSR: 上のバージョンと同じ最適化を行い、さらに AMP Optimizer によるサーバーサイド レンダリングを行ったもの。注: このバージョンは、有効な AMP ではありません。
  4. キャッシュ: Google AMP Cache から提供されるバージョン

300 ミリ秒の遅延がある 1.6 Mbps 3G 接続環境において、Motorola G(第 4 世代)の Chrome で Webpagetest を使ってすべてのテストを 3 回実行します。Webpagetest へのリンクを含むすべての結果は、このドキュメントに掲載しています。テストは実際の端末で実行するので、実行時間は異なる場合があります。
では、結果を確認してみましょう。

イメージなし

読み込み時間(秒) レンダリング開始(秒) 最初のインタラクション(秒)
オリジナル 4.569 4.569 4.424
最適化 4.564 -0.11% 4.564 -0.11% 4.423 -0.02%
最適化 + SSR 2.233 -51.13% 2.233 -51.13% 4.48 1.27%
AMP Cache 2.039 -55.37% 2.039 -55.37% 3.508 -20.71%


サーバーサイド レンダリングを行うバージョンの読み込み時間は、50% 以上高速になっており、サーバーサイド レンダリング AMP のメリットを明らかに実証しています。しかし、最初のインタラクションまでの時間が変わらないのは、読み込まれる AMP ランタイムに依存するからです。

イメージ

読み込み時間(秒) レンダリング開始(秒) 最初のインタラクション(秒)
オリジナル 5.435 4.591 5.367
最適化 4.591 -15.53% 4.566 -0.54% 5.094 -5.09%
最適化 + SSR 4.095 -24.66% 1.892 -58.79% 4.818 -10.23%
AMP Cache 3.827 -29.59% 1.834 -60.05% 4.13 -23.05%


イメージのプリロードによって、読み込み時間が大幅に短縮されたことがわかります。最適化された有効なバージョンの AMP は、15% 高速に読み込むことができますが、最適化 + SSR バージョンは 24%「しか」早くなっていません。これはイメージのレンダリングが、読み込まれる AMP ランタイムに依存しているためです。


セルフホスティング フォント

読み込み時間(秒) レンダリング開始(秒) 最初のインタラクション(秒)
オリジナル 5.509 4.609 5.424
最適化 4.55 -17.41% 4.53 -1.71% 5.112 -5.75%
最適化 + SSR 4.478 -18.71% 1.989 -56.85% 5.203 -4.07%
AMP Cache 3.978 -27.79% 1.847 -59.93% 4.317 -20.41%


ここでは、最適化と最適化 + SSR の読み込み時間の差は、ほとんどなくなっています。これは、フォントのダウンロードが増えたことにより、サーバーサイド レンダリングを行うバージョンが遅くなっているためです。それでもサーバーサイド レンダリングを行うと、レンダリング開始までの時間はかなり短縮されます。
注: すべての場合で、AMP Cache が最も高速です。これには、次の 2 つの理由があります。
  1. さらにイメージの最適化が行われる
  2. AMP ランタイムが同じドメインから提供されるので、2 つ目の https 接続を確立してランタイムをダウンロードする必要がない

まとめ

独自サーバー上の AMP ページの読み込みは、さらに高速化できることがおわかりいただけたかと思います。AMP ページを公開する方に必ず覚えておいていただきたいのは、以下の点です。
  1. ペア設定された AMP をホストするウェブサイトでは、AMP 最適化ガイドの推奨事項を実装してください。Twitter などのプラットフォームからキャッシュされていない AMP ドキュメントにリンクされている場合でも、確実に最高の読み込みパフォーマンスを発揮できるようにします。いくつかの細かい変更を行うだけで、AMP ページの読み込みが 1 秒早くなるかもしれません。
  2. AMP で構築したウェブサイトでは、AMP Optimizer を使うことを検討してください。プログレッシブ レンダリングによって、FCP 時間を大幅に改善することができます。
私たちは新たな最適化手法を模索し、AMP 読み込みエクスペリエンスを改善する作業を続けています。

Reviewed by Yusuke Utsunomiya - Mobile Solution Consultant, gTech

Googleでは、機械学習 に特化したイベント 「Google Developers ML Summit」を 12 月 14 日 (金) 11:00 より開催します。

本イベントでは、TensorFlow、Cloud ML、 ML Kit、Edge TPU, Actions on Google など、Google が開発者のみなさんに提供する機械学習ツールについてのセッションを Google 社員とGoogle Developers Experts により行います。
本イベントの 14 日は、カンファレンス DAY として、12 をセッションを通じて様々な機械学習ツールに対しての理解を深めていただき、15 日には実際に機械学習のツールを使ったワークショップを予定しています。
※15日のワークショップについての詳細は、後日公開いたします。

イベント概要
イベント名Google Developers ML Summit
日程: 2018 年 12 月 14 日(金) 11:00 - 17:00 (開場: 10:30)
場所:虎ノ門ヒルズ
定員 :500 名
主催 :Google
協力TensorFlow User Group, Assistant Developer Community Japan

タイムテーブル: (※変更の可能性あり)




申込方法
本イベントへの申し込み、詳細につきましてはこちらのサイトをご覧ください。
※ 参加可能な方には後日参加証を送付いたします。


みなさまの参加をおまちしております。


Posted by Takuo Suzuki - Developer Relations Team

Google では、2018 年 12 月 8 日、15 日に AI for Social Good 〜Google AI Impact Challenge のご紹介と AI による社会問題解決アイデアソン を開催します。

本イベントは、社会問題を解決しようとしている社会起業家の方、NPO・NGO の方、学生や大学の研究室の方、そのほか社会問題の解決に興味がある方全般をご招待し、AI がどのように皆様の課題解決にお役に立てるかについてお話させていただくことを目的としております。
また、Google では Google Impact Challenge AI for Social Good を公開しました。このプログラムでは、世界中から AI で社会問題を解決するアイデアを募集し、優秀なアイデアには合計 28 億円分の助成金や Google の AI エキスパートの技術サポートなどを無償提供し、選出された団体が提案を実現できるよう支援します。

12 月 8 日のイベントでは、この「Google AI Impact Challenge」のご紹介をさせていただくとともに技術者の方々とのマッチングとアイデアソンを行い、ご興味がある方皆様の応募をサポートさせていただきたいと考えております。

また、12 月 15 日のイベントではマッチングしたチームで実際にプロダクト開発に向けての検証を行うハッカソンを予定しております。ハッカソン参加を希望される方は、イベント申し込みサイトで参加の可否を選択いただくと後日事務局よりご連絡いたします。

【イベント概要】 AI for Social Good “Google AI Impact Challenge のご紹介および AI による社会問題解決アイデアソン”
  • 日時:12 月 8 日(土)15:00 〜 20:00 (プログラム終了後懇親会を予定)
  • 場所:グーグル合同会社 オフィス内会議室(六本木ヒルズ森タワー内)
  • 参加費:無料
  • 参加申し込み方法:こちらのウェブサイトよりご登録ください。
※12 月 15 日のイベント詳細は別途ご案内をお送りいたします。

【イベントプログラム】(※変更の可能性あり)
  • [15:00-15:30] Google 社員による AI の基本的な概要、Google の考え方のご説明
  • [15:30-16:00] Google 社員による Google Impact Challenge AI for Social Good のご紹介
  • [16:00-17:00] 外部団体による AI の社会問題への適応事例のご紹介
  • [17:00-20:00] NPO ・社会起業家など「解くべき社会問題」をお持ちの方からのプレゼンテーション、それを元にしたアイデアソン

みなさまの参加をお待ちしております。
Posted by Takuo Suzuki - Developer Relations Team


Google Cloud に代表されるクラウド技術の進化が引き起こすその先の世界を、機械学習、VR / AR、IoT などの領域で活躍されているスタートアップの方々と一緒に議論するイベント「INEVITABLE ja night」。

今回は、「コネティッド社会に向けた不可避な流れ」がテーマです。あらゆる産業や社会でモノ、ヒト、データ、プロセスがつながりはじめている今、ビジネスの前提条件が大きく変わろうとしています。

本イベントでは、コネクティッドな社会に向けて、現在進行形で起きていること、そして近未来の不可避な流れについて、ソラコム代表取締役社長の玉川さんをメインゲストにお迎えしてお話をお伺いします。この他、最新の事例やテクノロジーについてもご紹介いたします。

講演会後には恒例の交流会も行います。参加者様同士の交流はもちろん、日頃の業務の課題や悩みについても、ご相談/共有いただける良い機会となります。

本テーマにご関心のある方々のご参加をお待ちしています。

【開催概要】
イベント名 : INEVITABLE ja night - “インターネットの次にくるもの”
                  第 7 回 コネクティッド社会に向けた不可避な流れ
日程 : 2018 年 12 月 14 日(金) 19:00 〜 21:00(開場 18:30 より)
会場 : グーグル合同会社
定員 : 200 名
ハッシュタグ : #inevitableja
プログラム :

INEVITABLE 対談
 スピーカー:玉川 憲 氏、株式会社ソラコム 代表取締役社長
 聞き手:小島 英揮 氏、Still Day One合同会社 代表社員 パラレルマーケター・エバンジェリスト

Google テクノロジーアップデート
 スピーカー:調整中

事例セッション
 JapanTaxi 株式会社 データエンジニア 饗庭 秀一郎 氏
 インフォメティス株式会社 Co-founder ネットワーク技術主幹 登 不二雄 氏

講演後は講師や参加者の皆さんとの交流や情報交換をお楽しみください。

参加を希望される方は、お申し込みサイトをご覧ください。
皆様のご参加をお待ちしております。


■■■ INEVITABLE TV のご案内 ■■■

イベントでは取り上げることができなかったこと、語り尽くせなかったことを中心に、「インターネットの次に来るもの」に関連する話題を深く掘り下げていく番組「INEVITABLE TV」ももぜひご覧ください。

TPU が拓く AI 活用の近未来(グーグル合同会社 佐藤 一憲)
VUI の普及と進化の方向性 (ゲスト : 岩佐 琢磨 氏)
AR のこれまでの歩みと今後の展望(グーグル合同会社  松田 白朗)
エンターテック最前線(ゲスト :鈴木 貴歩 氏)

Posted by Takuo Suzuki - Developer Relations Team

この記事は AdWords API チーム、Josh Radcliff による Google Ads Developer Blog の記事 "Changes to the URL Performance Report for YouTube video placements" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

変更点
データ保持ポリシーに従い、2018 年 10 月 30 日以降、AdWords APIURL_PERFORMANCE_REPORT から、YouTube 動画プレースメントに関する情報が除外されます。その結果、Url フィールドに www.youtube.com ドメインを含むプレースメントがレポートに表示されなくなります。改善された新しいプレースメント レポートは、今後いずれかの新たな Google Ads API のリリースで利用できるようになる予定です。

対応が必要になる点
レポートで動画プレースメントが除外されても問題が起こらないように、アプリケーションやワークフローを確認して必要な変更を行ってください。本ブログで、Google Ads API の新しいプレースメント レポートに関する最新情報を確認してください。

ご質問やサポートが必要なことがありましたら、フォーラムからご連絡ください。


Reviewed by Thanet Knack Praneenararat - Ads Developer Relations



Google Cloud では 2018 年 12 月 6 日(木)に、インフラエンジニア、運用エンジニア、開発エンジニア向けイベント「Google Cloud で実践する DevOps」を開催いたします。
実際に DevOps を導入した開発を実践されている NTT コミュニケーションズ株式会社様、株式会社リクルートライフスタイル様を迎え、アプローチの方法やポイントなどについてお話しいただきます。また、深い専門知識をもつ Google のエンジニアが、Google Cloud 上でのアプリ、サービス開発においてどのような方法を使い DevOps 導入するのか、海外での動向を含めて解説します。



お申し込み

「Google Cloud で実践するDevOps」登録サイトからお申し込みください。

※ 申し込み多数の場合は、早期にご登録を締め切り、抽選とさせていただく場合がございます。
 ご参加の可否は、お申し込み後にご登録のアドレスに個別にご連絡いたします。
※ 競合他社様、パートナー企業様、個人のお客様からのお申し込みはお断りさせていただくことがございます。
※ 報道関係者のご参加はお断りさせていただきます。


開催概要

  • 名 称:Google Cloud で実践する DevOps
  • 会 期:2018 年 12 月 6 日(木)14 : 00 - 19 : 00(受付: 13:00)
  • 会 場:東京都渋谷区東 1-2-20 ベルサール渋谷ファースト 2F ホール
  • 主 催:グーグル・クラウド・ジャパン合同会社
  • 定員:350 名
  • 登録サイト:https://goo.gl/gyNYRa


スピーカー

  • NTTコミュニケーションズ株式会社 竹内 一雅 氏
  • 株式会社リクルートライフスタイル 前田 周輝 氏
  • Google Japan デベロッパーアドボケイト
  • Google Cloud Japan カスタマーエンジニア

プログラム

  • 14:05 -14:45 DevOps 導入の現状と実践
  • 14:55 - 15:35 GCP で実現するマイクロサービス アーキテクチャ
  • 15:35 - 16:15 NTTコミュニケーションズにおけるマイクロサービス・アーキテクチャの導入とDevOpsへの取り組み
  • 16:35 - 17:15 「高速」「安全」「継続的」 にアプリケーションを改善しよう
  • 17:15 - 17:55 Data-Driven Growth Hacking ~4 年の歩み~



Posted by Serene Yu Okawa - Developer Relations Team

この記事は Nadine Sunquist による Google Ads Developer Blog の記事 "Announcing v0_5 of the Google Ads API" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

本日は、Google Ads API v0_5 ベータ版がリリースされたことをお知らせします。このバージョンでは、引き続き v0 をエンドポイントとして使用できますが、クライアント ライブラリのアップデートが必要になります。主な機能は以下のとおりです。
  • 課金: 複数のサービスを利用して課金を管理できます。
    • BillingSetupService
      • 新しい課金設定の作成
      • 承認済みで今後開始予定となっている課金設定のキャンセル
      • 未承認で保留中となっている課金設定のキャンセル
    • AccountBudgetService
      • 予算調整を含むすべての承認済みのアカウントレベルの予算の表示
      • 現在保留中となっているアカウントレベルの予算提案の表示(存在する場合)
    • AccountBudgetProposalService
      • 予算の更新または新しい予算の作成を目的としたアカウントレベルの予算提案の作成
      • アカウントレベルのすべての予算提案の表示。すべての承認済みの値および提案された予算の値が表示されます。承認済みの値は、プレフィックス approved_ が付いた項目として公開されます。
  • コンバージョン トラッキング: コンバージョン トラッキングを使うと、ビジネスの目的に対する広告のパフォーマンスを計測できます。
    • コンバージョン アクション - ウェブサイトのトラッキング、電話によるコンバージョンのトラッキングなど、コンバージョン アクションに関連する設定およびその編集
  • ショッピング: ProductGroupView リソースは、商品グループレベル(Google Ads API では、リスティング グループとも呼ばれます)で集計したショッピング キャンペーンの統計情報を提供します。結果は、常に現在の商品グループセットを反映します。商品のインプレッションは、その商品を含むすべての商品グループに割り当てられます。ProductGroupView は、AdWords API の Product Partition Reportと同等の機能を提供します。
  • ロケーションと属性:AGE_RANGEGENDERINCOME_RANGEPARENTAL_STATUSPLACEMENTPROXIMITYTOPICYOUTUBE_CHANNELYOUTUBE_VIDEO の各 CriterionType を使って条件を作成できます。GeoTargetConstantService を使うと、ロケーションを入力して位置情報の候補を受け取ることができます。
  • アカウント管理: CustomerService.ListAccessibleCustomers は、Google 広告アカウントの管理機能を提供します。
この API を使ってみたい方は、以下の有用なリソースをご確認ください。
アップデートされたクライアント ライブラリとコードサンプルは、48 時間以内に公開されます。ご質問やサポートが必要なことがありましたら、フォーラムからご連絡ください。

Reviewed by Thanet Knack Praneenararat - Ads Developer Relations

この記事は 製品管理担当ディレクター、Stephanie Cuthbertson による Android Developers Blog の記事 "Unfolding right now at #AndroidDevSummit!" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

本日より、米国カリフォルニア州マウンテンビューの Computer History Museum で、Android Dev Summit が始まりました。Android の 10 年間を振り返り、Android デベロッパーにとって重要な新機能へと飛躍するイベントとなっています。ここでは、お知らせしたことの概略をご紹介します。

新たな Android 体験の幕開け

Android 1.6 の頃から、Android と私たちのパートナーは、さまざまな画面サイズや画面密度を考慮し、Android TV、Android Auto、Wear OS、Chromebooks の Android アプリに至るまで、プラットフォームで多彩なフォーム ファクタや新たな体験を利用できるようにしてきました。スマートフォンの画面は、Android パートナーが牽引てきた分野です。画面が小さいという声が上がったときには、「ファブレット」を導入しました。そして現在に至り、ファブレットは標準サイズのユーザーに好まれる普通のスマートフォンになっています。
今、Android 端末メーカーは、新しいカテゴリの製品、Foldables(折りたたみ式スマートフォン)を作っています。フレキシブル ディスプレイという新技術を活用すれば、文字どおり、折り曲げ可能なスクリーンを実現できます。

大まかに、これには 2 画面端末と 1 画面端末という 2 つの種類があります。Foldables は、折りたためばポケットやハンドバッグに収まるスマートフォンのようになります。しかし広げれば、私たちが「画面の継続性」と呼んでいる決定的な特徴を持つことになります。たとえば、折りたたんだ小さな画面で動画を視聴し始めても、途中でどこかに座って端末を広げれば、タブレットサイズの大きな画面で美しく迫力のある動画を楽しむことができます。画面を広げても、アプリは一瞬たりとも止まることなく、シームレスに大きな画面に移行します。私たちは、この新しいフォーム ファクタに対応できるように、Android を最適化しています。さらに、世界中のデベロッパーがこのすばらしい体験を活用し、新たな方法でユーザーを引きつけて喜ばせることができるような変更も加えています。詳細については、今週の Dev Summit の Foldables に関するセッションにご注目ください。Foldables は、本日プレビュー版を紹介した Samsung をはじめとして、いくつかの Android メーカーから来年に販売される予定です。

Kotlin: 最速で拡大中の言語がアップデート

2017 年、私たちは Android のファースト クラス言語として Kotlin を作成しました。今月時点で、指標を共有することに同意したユーザーだけでも 11 万 8,000 件以上の新規プロジェクトで、Android Studio と Kotlin が使われています。昨年に比べると、実に 10 倍の増加です。GitHub で増加した貢献者数を基準にすれば、最速で拡大中の言語でもあり、Stack Overflow の投票では、2 番目に好まれている言語に選ばれました。アンケートでは、Kotlin を使うデベロッパーが増えるほど、満足度も向上するという結果が出ています。
先週、JetBrains は Kotlin の最新バージョンとなる 1.3 をリリースしました。このバージョンでは、以下のような言語機能や API の追加、バグの修正、パフォーマンスの改善が行われています。
  • インライン クラスを使うと、ボックス化しなければ割り当てることができない型を作成できます。Android アプリを動作させるリソースが限られた端末では、型の安全性を保ちつつ割り当てを避けることが大きなメリットになります。
  • UInt、UByte、ULong などの符号なし数値が Kotlin 標準ライブラリの一部として含まれるようになります。これらの新しい型は、インライン クラスを使って構築されています。
  • Android や JVM 向けに書かれた既存のマルチプラットフォーム コードが、Javascript やネイティブをターゲットにできるようになります。この機能により、コードベースの一部をさらに多くのプラットフォームで再利用できるようになります。
  • コルーチンのサポートが安定版になります。言語とライブラリによるサポートを組み合わせることで、非同期オペレーションや並列処理を簡単に取り扱うことができるようになります。これらは、Android アプリには欠かせない操作です。
以上の Kotlin 1.3 の新機能は、すべて私たちが提供する Kotlin 固有の API に統合されます。その大半は、KTX 拡張機能で Jetpack の一部として提供されます。

Android Jetpack: Navigation、Work Manager、Slices

Google I/O で、Android アプリ開発を加速させる次世代のツールおよび Android API である Jetpack を発表しました。Jetpack は、Support Library と Architecture によって築かれた土台の上に構築されています。トップ 1,000 のアプリおよびゲームのうち、80% が既に何らかの新しい Jetpack ライブラリを本番環境で利用しています。
AndroidX は、元々 Android Support Library と呼ばれていたものが進化して Jetpack の一部となったものです。今年の夏、これをパブリック AOSP に移行しました。これにより、実装される機能やバグの修正をリアルタイムで確認して、どの AndroidX ライブラリにも貢献できるようになっています。貢献についての詳細は、こちらをご覧ください。
私たちは、2 つの新しい Architecture Component ライブラリである NavigationWork Manager に、できるだけ多くのフィードバックと微修正を組み込もうと努力しています。2 つとも、今月中にベータ版に移行する予定です。Navigation Architecture Component は、アプリで単一の Activity を利用して、Android のナビゲーション原則を簡単に実装する方法を提供します。さらに、Android Studio の新しい Navigation Editor を使うと、独自のナビゲーション アーキテクチャを作成して編集できます。これにより、ナビゲーションに関するボイラープレートが無くなり、アトミックなナビゲーション操作が利用できるようになるとともに、アニメーションによる遷移などもさらに楽になります。WorkManager は、アプリの状態や端末の API レベルに基づいて最適なソリューションを選択し、バックグラウンド タスクの実行を簡単かつ効率的にします。

Navigation Editor
さらに、Android Slices が検索の試験運用版として公開されます!今年の I/O でお知らせした Slices は、ユーザーがアプリに触れる新たな方法です。Slices はアプリの小さなスニペットのようなもので、コンテンツやアクションを表示して、飛行機を予約したり、動画を再生したり、車を呼んだりすることができます。Slices はすぐにでも公開したい機能の 1 つですが、時間をかけて動作を調整したいと考えています。Doist や Kayak などと協力しつつ、今月中にパブリック EAP に移行します。また、Google 検索結果に Slices を表示する実験も行う予定です。詳細は、ベストプラクティスと合わせて、本日の Dev Summit のセッションでお話しします。

Android Studio: 生産性、ビルド速度、品質、基本機能にフォーカス

Android Studio は、Android 開発の公式 IDE です。同意済みの Android Studio ユーザーから集めたデータから、ビルド時間はリリースを重ねるたびに速くなり、20% ほど速くなることもあります。その一方で、時間が経つにつれてビルド時間が遅くなることもあります。なぜこのような矛盾した結果になるのでしょうか。この状況を理解するために、綿密な分析を行いました。
ビルドは非常に複雑なシステムです。デベロッパーの選択によって、状況は大きく変わります。デベロッパーが使用する OS、カスタム プラグイン、アノテーション プロセッサ、言語の組み合わせは膨大であり、しかも広がり続けています。これらすべてが、時間に大きく影響します。ユーザーが追加したプラグインが、密かに 45% もビルド速度を低下させていた事例もありました。この事実から、何がビルド速度を低下させているかを簡単に理解できるように、ビルドのプロファイリングや分析を行うツールが必要であると認識しました。また、コアとなるビルド機能のパフォーマンスを向上させ続けるために、パフォーマンスの向上を図る独自プラグインにも注力しています。
本日、Android Studio 3.3 ベータ版 3 をリリースします今後のリリースは、クラッシュやハング回数の削減、メモリ使用量の最適化、ユーザーに影響するバグの修正など、品質と基本機能に強くフォーカスしたものになる予定です。また本日、来年初頭には Android Studio が Chrome OS の公式サポート IDE となる予定をお知らせしました。詳しくはこちらをご覧ください。

Android アプリバンドルとダイナミックフィーチャー

アプリのサイズは、2012 年に比べて 5 倍と、大きく増加しています。しかし大きなアプリには、インストール コンバージョン率の低下、アップデート率の低下、アンインストール率の増加といった欠点もあります。そこで、特定の端末でアプリを実行するために必要なコードやリソースのみを提供する新たな公開フォーマット、Android アプリバンドルを開発しました。これにより、アプリのサイズはユニバーサル APK に比べて平均で 35% 小さくなりました。アプリバンドルを使うと、マルチ APK のような不完全なソリューションを使う必要がなくなるので、リリースのたびに必要になる時間や労力も削減できます。Android Studio 3.2 では、アプリバンドルが IDE で完全サポートされます。アプリバンドルは、既に本番環境で頻繁に使われており、YouTube、Google Maps、Google フォト、Google ニュースなどの Google 製アプリを含め、数十億回インストールされています。
アプリバンドルは、非圧縮ネイティブ ライブラリをサポートするようになりました。M 以降の端末でアプリバンドルを使えば、デベロッパーが何もしなくても、ネイティブ ライブラリを使っているアプリのダウンロード サイズが平均 8%、ディスク上のサイズが 16% 小さくなります。
アプリバンドルに切り替えるのと合わせて、アプリのモジュール化に着手することもできます。ダイナミックフィーチャーモジュールを使うと、任意のアプリの機能をインストール時ではなくオンデマンドで読み込むことができます。一度しか使わない大きな機能をすべての端末で永久に保持する必要はありません。動的機能は、アプリのリクエストに応じて動的にインストールやアンインストールを行うことができます。

In-app Updates API

ユーザーに最新の最も優れたバージョンのアプリを実行し続けてもらうために、制御を強化したいという声が寄せられています。これに対処するために、In-app Updates API をリリースします。現在、早期アクセス パートナーとともに API のテストを行っており、近日中にすべてのデベロッパーに対してリリースを行う予定です。
この API には、2 つの使用方法があります。1 つ目は、全画面表示で重要なアップデートを行う方法で、即座にアップデートを適用してユーザーにはアップデートが終わるまで待ってもらいます。2 つ目の方法は柔軟なアップデートです。この場合、ユーザーはアップデートをダウンロードしている間、アプリを使い続けることができます。アップデート フローは完全にカスタマイズできるので、アプリの一部のような感覚になります。

すぐに試せるアプリ

Instant App の利用がさらに簡単になります。先日、ウェブ URL の利用をオプションにし、Instant App が使える場合には、既存の Play ストアのディープリンク トラフィックからユーザーを Instant App に案内できるようにしました。さらに、Instant App のサイズ制限を 10 MB に増加させ、Play ストアの「今すぐ試す」ボタンやウェブのバナーから簡単に利用できるようにしました。
Android Studio 3.3 ベータ版では、インスタント対応アプリバンドルをビルドできるようになります。つまり、1 つの Android Studio プロジェクトで Instant App とインストール可能アプリの両方をビルドしてデプロイし、それを 1 つの Android アプリバンドルに含めることができるようになります。1 つのアーティファクトをアップロードするだけで、Instant App とインストール可能アプリの両方に対応できます。

こういった注力分野を決定するためには、デベロッパーの皆さんのフィードバックが欠かせません。初期のアイデアの段階から、EAP、Canary 版、ベータ版、そしてリリース後の反復に至るまで、私たちの取り組みには常に皆さんのご協力が必要です。ライブストリームで 30 以上のセッションをご覧になる皆さんも、ソーシャル メディアで参加する皆さんも、直接マウンテンビューにお越しくださる皆さんも、ぜひこれからの 2 日間、このイベントにご参加ください。チーム一同、皆さんの思慮深いフィードバックや貢献に心より感謝申し上げます。Android Dev Summit をお楽しみいただけることを願っています。

Reviewed by Hak Matsuda - Developer Relations Team

この記事は Android Developer Advocate である Wojtek Kalicińskiによる CodeProject.com の記事 "How to Fix App Quality Issues with Android Vitals (Part 2)"を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

第 2 回: クラッシュや不要な wake lock の問題を修正して Play ストアでのパフォーマンスを改善する


Google Play Console の [Android Vitals] セクションを活用してアプリの品質の問題を修正し、成功を収めているデベロッパーがますます増えています。Google では、Android Vitals に関する最初の記事以降も改善を続け、新しい指標や機能を提供してきました。本稿ではまず新機能の概要を紹介し、続いて、停止した wake lock とクラッシュの問題を修正する方法を説明します。


Android Vitals の新機能

Google I/O 2018 で Android Vital の新機能を発表しました。今回の改善には、2 つのパフォーマンス領域の追加、既存の指標の情報に対する機能強化、Android Vitals で予期しない変化が生じた場合の通知方法が含まれています。

カテゴリのベンチマーク

アプリの指標の測定結果が「良好な」(低い)レベルとみなされるか、「不適切な」(高い)レベルとみなされるかは、Play ストアでそのアプリがどのカテゴリに含まれるかによって大きく左右されます。たとえば、「ボード」カテゴリのゲームアプリにおけるスタートアップの遅延の平均は、「レース」カテゴリのゲームアプリよりも低くなります。そのため、Android Vitals ではカテゴリのベンチマークが表示されるようになりました。これによりデベロッパーは、自分のアプリのパフォーマンスを同じカテゴリ内の他のアプリと比較できます。

異常の検出

アプリの動作の急激な変化は好ましいことではありません。そのような状況に迅速に対応できるよう、Android Vitals では、指標の急激な変化を検出すると Play Console のメッセージとメールを通じてデベロッパーに通知します。通知を受けたデベロッパーは Android Vitals にアクセスして状況を確認し、原因に対処できます。

権限の拒否

アプリによる権限リクエストを拒否したユーザーの割合が表示されます。拒否される割合が高い場合は、アプリのデザインを見直し、許可を求める理由の伝え方を改善するなどして、権限を許可してもらえるようになるかを確認することができます。

アプリのスタートアップ時間

優れた機能や素晴らしいゲームプレイ体験を提供していても、アプリの起動に時間がかかりすぎると、ユーザーはアプリを使わなくなります。新しく追加されたこのパフォーマンス領域には、アプリのスタートアップ時間に問題があるかどうかをデベロッパーが把握できるよう、対象のアプリやゲームについて、コールド スタートアップ(アプリが最近使用されておらず、メモリ内にキャッシュされていない場合)、ウォーム スタートアップ(アプリはメモリ内にあるが、アクティビティの再作成が必要な場合)、ホット スタートアップ(アプリとアクティビティがメモリ内にあり、ユーザーがそのアプリに切り替えた場合)の 3 種類のスタートアップ時間が表示されます。


Android Vitals でスタートアップに関する問題が見つかったら、Android Studio 3.2 の Android プロファイラ ツール(アプリスタート時の CPU プロファイリング、Systrace など)を利用して、スタートアップの遅延に関する問題を調べます。

主な指標

高品質のアプリを提供するためにはすべての指標が重要ですが、特に優先すべき指標として、過度の wakeup、ANR、停止したバックグラウンドでの wake lock、クラッシュの 4 つを挙げることができます。過度の wakeup と ANR については、第 1 回の記事で取り上げました。そこで、今回は wake lock とクラッシュについて見ていきます。


Wake locks

従来、Android でのバックグラウンド作業の実行は、必要に応じたバックグラウンド サービスの作成に依存していました。こうしたバックグラウンド サービスは必要な期間実行され続けたため、フリーランニング サービスと呼ばれることもありました。こうしたバックグラウンド サービスの実行中は、端末の CPU と通信がオフにならないようにするために wake lock が使用されていました。


このような形での wake lock の使用は最適ではありません。アプリによって頻繁にサービスのスケジュールが設定され、結果的にサービスが長時間実行されてメモリなどのリソースが占有されることがあります。このようにしてリソースを使用すると、CPU と通信の使用が増えるほか、端末がスリープ状態にならなくなることから、端末のパフォーマンス低下と電池の消耗を引き起こすことがよくあります。


Android Vitals では、アプリの PowerManager クラスを通じて取得した部分的な wake lock の詳細を、[停止した wake lock] ページと [停止した wake lock(バックグラウンド)] ページで提供しています。部分的な wake lock では CPU は動作しますが、画面やキーボードのバックライトをオフにすることができます。


レポートには、停止した wake lock の影響を受けたバッテリー セッション(端末の完全充電から次の完全充電までの期間)の割合が表示されます。この情報には、過去 30 日間とその前の 30 日間に影響を受けたセッションの割合、アプリの指標を Google Play のインストール数上位 1,000 のアプリと比較したベンチマーク、影響を受けたセッションの推移を示したグラフのほか、アプリのバージョン、Android OS のバージョン、端末などの条件に基づく内訳(スクリーンショットには表示されていません)が含まれています。



このベンチマークにおいて、自分のアプリが、停止した wake lock の影響を受けたセッションの指標で下位 25% に該当する場合は、アプリの改善を検討してください。


第 1 回の記事でもお伝えしたように、Android 5.0 での JobScheduler の導入以降、アラームとフリーランニング サービスの使用を取りやめることをおすすめしています。Android Oreo 以降、アプリはバックグラウンドでサービスを開始できなくなったため(例外が発生します)、アラームとフリーランニング サービスの使用の取りやめは必須となります。同様に、アプリでの wake lock の使用についても、ほとんどの使用例で適切な代替手段があるため、取りやめることを検討してください。wake lock を使用する代わりに、アプリで以下の方法を採用することをおすすめします。

  • バックグラウンドでのジョブの実行が必要な場合は、JobScheduler か WorkManager API を使用する。こうした機能を使用すると、ジョブが実行されている間だけ、そのジョブの wake lock が保持されます。
  • 決められた時間に、または定期的にバックグラウンド タスクを実行する必要があるときは、AlarmManager ブロードキャストをスケジュールする。AlarmManager は、BroadcastReceiver.onReceive() メソッドが実行されている間だけ、wake lock を保持します。
  • ユーザーがアプリのアクティビティを見ている間も画面をオンにしておきたいウィンドウがある場合は、該当するウィンドウに FLAG_KEEP_SCREEN_ON を追加する。たとえば、電子書籍を読んでいるときなどが該当します。これにより、アクティビティが表示されなくなったときに、システムによって wake lock が解放されます。
自分で wake lock を管理する必要がある場合(実行時間の長いフォアグラウンド サービスを使用して音声トラックを再生する場合など)は、必ず以下のルールに準拠してください。

  • 非推奨の種類の wake lock は使用せず、PARTIAL_WAKE_LOCK を使用してください。
  • wake lock を取得するときはタイムアウトを指定してください。そうすることで、アプリが wake lock を解放しない場合でも、タイムアウト時間が経過するとシステムによって wake lock が解放されます。
  • wake lock には、com.myapp: my wake lock のように静的でわかりやすいタグを付けてください。それにより、Android Vitals の wake lock のレポートがわかりやすくなります。カウンタやその他の動的なデータをタグに追加しないでください。適切でわかりやすいタグを付けることで、類似する wake lock が Android Vitals によってまとめられ(組み合わされ)て、個別の wake lock の動作を正確に把握できるようになります。
  • wake lock は不要になったら解放してください。wake lock は、エラーの発生によっても不要となることがあります。エラー処理にあたっては、安全性を重視してコードを記述し、呼び出しを try { … } finally { wakeLock.release(); } のブロックでラップすることをおすすめします。

クラッシュ

Android Vitals ではクラッシュの概要と詳細の両方を確認できます。[クラッシュ発生率] ページと [マルチ クラッシュ率] ページでは、クラッシュ データと使用状況データを組み合わせて正規化された指標が表示されます。



この概要情報に加えて、[ANR とクラッシュ] ページにリアルタイムのクラッシュの詳細が表示されます。

停止したバックグラウンドでの wake lock と同様に、クラッシュ率を比較するための主な指標として「不正な動作のしきい値」があります。アプリのクラッシュ率が不正な動作のしきい値を超えている場合、クラッシュへの対処を優先することをおすすめします。


コードが例外を引き起こしてアプリをクラッシュさせる理由は数多くあります。そのため、本稿でそのすべてを説明して解決策を提示することは困難ですが、クラッシュを防止するのに役立つ一般的なアドバイスをいくつかご紹介します。


Android Vitals を利用して、頻発しているクラッシュに関する情報と、そのクラッシュの影響を受けているユーザー数を確認できます。Android Vitals の大きな利点は、発生したクラッシュを、第三者のクラッシュ レポート SDK が初期化されるよりも前に捕捉できることです。


クラッシュの再現、デバッグ、修正のために詳細な情報が必要な場合は、Firebase Crashlytics の利用をご検討ください。このツールを使うと、クラッシュ時にアプリ内で何が起きているかを詳しく把握できます。Firebase Crashlytics では Firebase Analytics との統合によってこの機能を実現しており、デベロッパーはカスタムのログ記録を追加してクラッシュ レポートに含めることができます。


クラッシュを引き起こす一般的な原因の多くは、以下の方法で回避できます。

  • 一般的な処理を自力でゼロから記述しない
  • Kotlin に移行する
  • 公開 API を使用する

一般的なコードパターンを自力でゼロから記述しない

クラッシュを引き起こす可能性がまずない高品質のライブラリが提供されていて、簡単に再利用できる場合、一般的なタスクを自力でコーディングしてミスを犯すリスクを取る必要はありません。


Android Jetpack には、ほとんどの Android アプリの基盤として利用できるライブラリが数多く用意されています。Android Jetpack は、アクティビティのライフサイクルの管理、ナビゲーション、バックグラウンド ジョブの実行、データベースの操作、外部ソースからのデータの読み込みなど、数多くの一般的なタスクに利用できます。Google の開発したライブラリ以外にも、デベロッパーがアプリの開発に利用できる、実績ある優れたオープンソース ライブラリが数多く公開されています。

Java から Kotlin への移行を検討する

Google は昨年の I/O において、Android での Kotlin のサポートを発表しました。現在も引き続き、Kotlin のサポートの改善に取り組んでいます。クラッシュにつながるおそれのある一般的なコーディングのミスを少しでも防ぐことで、デベロッパーの生産性を高めることが最終目標です。


Kotlin の大きな利点の 1 つは、null 許容性についての情報が言語の型システムに組み込まれていることです。null セーフの呼び出しとコンパイル時の null チェックにより、コードが実行時に NullPointerException を引き起こすことを防止できます。まだお試しでなければ、Kotlin を使ってみることをおすすめします。アプリには Kotlin を徐々に追加していくことができます。Kotlin は Java との高い相互運用性を備えているため、Java のコードを全面的に置き換える必要はありません。

公開されている Android API を使用する

公開されている Android API とは、Android デベロッパー サイトにドキュメントが掲載されているクラスと public メソッドを指します。こうした API は、認定済みのあらゆる Android 搭載端末での利用と動作が保証されています。リフレクションを使ってアクセス可能な private メソッドや hidden メソッドは、クラッシュを引き起こす大きな原因となるおそれがあります。こうしたメソッドには、端末で利用できるかどうかの保証がなく、また、Android のアップデートのたびに変更や中断が生じることが多いという問題があります。そのため、テスト用としてはともかく、Play ストアで公開するアプリへの使用は避けることをおすすめします。


private メソッドや hidden メソッドには上記のような問題があるため、Android P デベロッパー プレビューおよび今後の Android のすべてのエディションでは、このようなドキュメント化されていない非公開 API へのアクセスが制限されます。アプリでのこうした API の利用を直ちに停止することで、互換性を維持できます。詳しくは、プレビュー サイトで非 SDK インターフェースの制限についての記事をご覧ください。

おわりに

Android Vitals を活用して高品質のアプリを開発し、より多くのユーザーを引き付けて定着させることで、活気のあるビジネスを構築できます。全 2 回にわたる記事で、過度の wakeup、ANR、停止したバックグラウンドでの wake lock、クラッシュという 4 つの主な指標についての重要な情報をお伝えしました。また、最近 Android Vitals に追加された機能もご紹介しました。


この記事で紹介したおすすめの方法や詳細情報を活用することで、デベロッパーの皆様が Android Vitals に表示されるアプリの指標を的確に理解して、アプリの品質向上に役立てられるよう願っています。


詳細については、Google I/O 2018 でジョエル ニューマン、ファーガス ハーレイ、筆者の 3 名が共同で実施したセッション「Android Vitals: パフォーマンスの問題を解決してアプリの評価を高める」の動画をご覧ください。また、Medium に掲載されている、Google Play の Android アプリおよびゲームに関するおすすめの方法についてもご参照ください。

ご意見をお聞かせください

Android Vitals や新機能についてご意見がございましたら、#AskPlayDev を付けてツイートしていただければ、@GooglePlayDev から返信いたします。このアカウントでは定期的にニュースや Google Play で成功するためのヒントを紹介しています。


Reviewed by Iku Igarashi - Google Play Business Development Manager