Posted by Google AMPチーム
スマートフォンとタブレットは、人々が情報と接する方法を大きく変えました。今日、多くの人がスマートフォンを使って、たくさんのニュースや新しいコンテンツに触れています。世界中のメディアやコンテンツ提供者が、モバイル ウェブを通じて読者に記事やコンテンツを提供していますが、そのユーザー体験は、残念ながら理想的ではない場合もよくあります。ある調査では、ページの読み込みに 3 秒以上かかると、40% のユーザーがそれ以上の閲覧をやめてしまうことがわかっています。これは、コンテンツ提供者にとっては、広告や定期購読による収益化の機会を失うことも意味します。

Google は、世界中のコンテンツ提供者、テクノロジー企業との議論をもとに、Accelerated Mobile Pages(AMP)というオープンソース プロジェクトを 2015 年 10 月に公表しました。これは、モバイル ウェブの表示を飛躍的に向上させることを目指すプロジェクトです。Google は、動画、アニメーション、美しいグラフィックス表現をそなえたウェブページが、スマートな広告とうまく共存しつつ、瞬時に表示されるようにしたいと考えています。また、同じコードが複数のプラットフォームやデバイスで動作することで、ユーザーが利用しているのがスマートフォン、タブレット、その他のモバイル端末のいずれであってもコンテンツが瞬時に表示されるようにしたいと考えています。


本日、AMP 導入ガイドの日本語版 PDF を公開しました。技術資料等も順次公開しており、安定版の仕様書などは AMP プロジェクトの公式ページ内でご参照いただけます。また、GitHub のレポジトリ では最新版の実装や提案中の機能を確認できますし、問題がある場合にはこちらのイシュー トラッカーよりご報告ください。オープンソース プロジェクトですので、ソース コードを直接ご提供いただく Pull Request も歓迎しています。


現在、AMP には New York Times や BBC をはじめとするパートナーが世界的に参加を表明しており、日本でも、朝日新聞、産経新聞、日刊スポーツ、毎日新聞、株式会社イード、マイナビニュース、BLOGOS をはじめとする多くのメディアやコンテンツ提供者が AMP への対応を準備しています。また、Ameba や LINE を含むサービスが、サービス内のコンテンツ ページを AMP に対応させる他、外部ウェブページへのリンク時に AMP 版が存在する場合は、AMP 版にリンクするなどの対応を予定しています。一方 Google では、先日 Inside Search ブログ(英語)でもお伝えしたように、Google の検索結果から AMP ページが表示されるようになります。


AMP プロジェクトは、すべての人にとってモバイル ウェブの体験をより速く、優れたものにすることを目指しています。このオープンなプロジェクトが、情報が自由に流通していくための一助となることを期待しています。関係者のみなさまのご理解とご協力をお願いいたします。


Posted by Google AMPチーム

[この記事は Matt Hessinger、Google Apps Script プロジェクト スペシャリストによる Google Developers Blog の記事 "Advanced Development Process with Apps Script" を元に翻訳・加筆したものです。オリジナルの記事は Google Apps デベロッパー ブログに投稿されました。詳しくは元記事をご覧ください。]

今回は、Apps Script の複雑なソリューションを開発するためのヒントとベスト プラクティスをご紹介します。

Apps Script と最新の開発

Apps Script エディタでは、独自のソース コード管理ツールを使用することが許可されていないため、他のデベロッパーと共同作業を行うことが困難です。そのため、プロジェクトの開発、テスト、および実稼働バージョンの管理が非常に非効率になります。Apps Script が提供する Google プラットフォームとのパワフルな連携に加えて、毎日利用する開発ツールやベストプラクティスを利用できるとしたらどうでしょう。現在では、それが可能となりました ...
[この記事は Matt Hessinger、Google Apps Script プロジェクト スペシャリストによる Google Developers Blog の記事 "Advanced Development Process with Apps Script" を元に翻訳・加筆したものです。オリジナルの記事は Google Apps デベロッパー ブログに投稿されました。詳しくは元記事をご覧ください。]

今回は、Apps Script の複雑なソリューションを開発するためのヒントとベスト プラクティスをご紹介します。

Apps Script と最新の開発

Apps Script エディタでは、独自のソース コード管理ツールを使用することが許可されていないため、他のデベロッパーと共同作業を行うことが困難です。そのため、プロジェクトの開発、テスト、および実稼働バージョンの管理が非常に非効率になります。Apps Script が提供する Google プラットフォームとのパワフルな連携に加えて、毎日利用する開発ツールやベストプラクティスを利用できるとしたらどうでしょう。現在では、それが可能となりました。

npm install -g node-google-apps-script

このプロジェクト「node-google-apps-script」は、コマンドラインから Apps Script プロジェクトをアップデートするために Google Drive API を使用する Node.js ベースのコマンドライン インターフェース(CLI)です。NPM サイトでノード パッケージを参照でき、また GitHub のレポジトリでも参照することができます。どちらのリンクにも使用方法が記載されています。このツールは 、Dan Thareja によって作成され、Matt Condon によって機能が追加されました。

ツールを使用する前に、Apps Script のプロジェクトのインポートとエクスポート ページを参照してください。開発プロセスを計画するとき、次のいくつかの点に注意する必要があります。また、開発においてこの手法を最大限に活用するために採用できる、いくつかのベスト プラクティスもあります。

本投稿で述べられるいくつかのプラクティスを実演しているサンプル プロジェクトがあります。ここをクリックして、GitHub でコードを参照してください。このインポート/エクスポート開発の例を含めて、Apps Script のサンプルのすべてを取得するには次のコマンドを実行してください:

git clone https://github.com/google/google-apps-script-samples.git

サンプルは、「import_export_development」サブディレクトリにあります。

スタンドアロン Apps Script プロジェクトは、Google ドライブに保存されます。上記のリンク先にあるコマンドライン インターフェース(CLI)ツールを使用すれば、お好みのエディタを使って、選択したリポジトリにコードをコミットしたり、同期したりすることができます。タスク ランナーにタスクを追加して 1 つ以上のコードを Apps Script プロジェクトにプッシュできます。場合によっては、さまざまな環境のためのコードを含めたり除外したり、コーディング スタイルを確認したり lint を実行したりminify を実行したりすることもあります。UI 関連のファイルを簡単に作成して Apps Script 外のファイル ホストにプッシュできるため、同じファイルを構築中の他のアプリで使用する場合に役に立ちます。

Drive API によって Apps Script と連携できる一般的な開発ツール

Apps Script プロジェクト ライフサイクルのベスト プラクティス

プロジェクトのインポートとエクスポート ページの情報に加えて、いくつかの考慮すべき点があります。
  • ローカル ファイル セットがマスターです。ローカルでファイルの追加、削除、または名前の変更を行う場合、リンクされたツールによる次のアップロード時に Apps Script プロジェクトがローカル ファイル セットが自動的に反映されます。
  • ローカル ファイルには任意の名前を付けることができます。プロジェクトへのアップロード前のファイル ステージング タスクで、クライアント側の ".js" や ".css" に ".html" を追加する必要があります。上記で言及したツールでは、アップロードのためにステージングする ".js" ファイルを、Apps Script サーバー スクリプト ファイル(エディタの ".gs")として処理します。HtmlService によってアクセスする「クライアント」コードとしてステージングする、あらゆる ".html" ファイルを処理します。つまり、JavaScript として ".js" 拡張子を付けたサーバー スクリプトを開発し、ローカルのツールで JavaScript 構文が認識されるようにすることができます。開発中に、クライアント側のコード(つまり、HtmlService によって処理する必要があるコード)を ".html"、".js"、または ".css" にして、エディタで正しい構文が強調表示され、検証されるようにすることが可能です。

編集機能に加えて、スクリプト エディタ以外での作業によって実現する最大の改善点は、1 つの Apps Script プロジェクトでの作業に限定されなくなることです。各自の Apps Script プロジェクトに対して作業を行う個々のデベロッパーがチームとして共同作業を行うことが大幅に容易になり、テスト、ユーザーによる受け入れ、本番稼働バージョンのプロセスやセキュリティが向上することにより、容易に制御できるようになります。その他の通常のプロジェクト プラクティスとの整合性を保つだけではなく、Apps Script ならではの複数環境でのアプローチを利用する方法がいくつかあります。



このアプローチを使用する場合、考慮すべき 3 つのベスト プラクティスがあります。

  • 「ローカル」での開発のために固有の構成値を使用する。
  • スタンドアロンで実行できるテスト方法を構築する。
  • 開発とテストの依存関係を含める。

ベスト プラクティス:「ローカル」での開発のために固有の構成値を使用する

デバッグとテストのために、デベロッパーがローカルな値をインジェクトできるようにする基本構成クラスの簡単な例を示すサンプルがあります。この場合、デベロッパーが Apps Script に Drive API へのアクセスのために完全なスコープが必要であることを示すアノテーション @NotOnlyCurrentDocも追加しています。このプロジェクトでは、「本番稼働」の展開にアノテーション @OnlyCurrentDoc があるため、OAuth のスコープがドキュメント、スプレッドシート、またはフォームのアドオンとして実行されるスクリプトに関連するドキュメントに制限されることになります。標準ファイル パターンをソース プロジェクトの「ignore」ファイルに追加する場合、デベロッパー独自のファイルが実際のコードベースに組み込まれることはありません。

プロジェクトにとっての利点 ― 本番環境で OAuth のスコープをより厳密に制限でき、開発中のデベロッパーのアクセス範囲が広がります。また、デベロッパーは各自の開発作業をサポートする個人的な構成設定を保持できます。

ベスト プラクティス:スタンドアロンで実行できるテスト方法を構築する

現時点では、自動的にテストをトリガーする方法はありませんが、プロジェクトの特定の機能を検証するユニット テストを作成することはできます。また、テストに特定の構成値を指定することもできます。繰り返しになりますが、これらのファイルは本番稼働の展開に組み入れるべきではありません。Apps Script Execution API を使用して、テストランナーからこれらのテストを実行することもできます。

プロジェクトにとっての利点 -テスト機能を作成して、本番稼働の Apps Script ファイルから切り離しておくことができます。これによって、本番稼働の Apps Script プロジェクトが簡素化され、本番稼働のユーザーに必要となる正しい OAuth のスコープが維持されます。

ベスト プラクティス:開発とテストの依存関係を含める。

スプレッドシートやドキュメントのアドオンを開発する場合、SpreadsheetApp に「アクティブな」アイテムを用意します。ただし、開発やテストの実行中は「アクティブな」コンテキストなしで Apps Script を実行できます。このモードで開発する必要がある場合、動作モードを決定できるメソッドに、現在アクティブになっているアイテムを取得するための呼び出しをラップできます。これにより、開発やテストのインスタンスで、テストに使用する「アクティブな」ドキュメントの ID をインジェクトできますが、実際のコンテキストで実行する場合、getActive* の結果に委譲します。

プロジェクトにとっての利点 - 最終的な展開の状況が、一般的にはデバッグ時に利用できないソースに依存する場合でも、最適なユニット テスト方法をプロジェクトに統合できます。

まとめ

現在では、独自の開発ツールやソース管理ツールを使用するという選択肢があります。ウェブ アプリやアドオンとして公開する場合や、高度なサービスを構成する場合など、アプリケーションのライフサイクルで Apps Script エディタを使用する必要はありますが、いま紹介した手順を実行することによって Apps Script プラットフォームの機能を最大限に利用することができます。Google デベロッパー サイトで Apps Script を参照して、Apps Script 開発の詳細情報とサンプルを取得してください。

コマンドラインで python ツールを使用してチームの構築プロセスを実現する場合、Joe Stump の python-gas-cli を参照してください。ここでパッケージ情報を参照したりGitHub レポジトリで使用方法を参照したりできます。

最後に、この投稿に関連する参照先へのリンクをご紹介します。


Posted by Yoshifumi Yamaguchi - Developer Relations Team

[この記事は Google Play プロダクトマネージャー 田村芳明による Android Developers Blog の記事 "Create promo codes for your apps and in-app products in the Google Play Developer Console" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

この 6 か月間で Google Play デベロッパー コンソールには、Google Play アプリやゲームのビジネスを成長させるのに役立つ新しいツールが多数追加されました ...
[この記事は Google Play プロダクトマネージャー 田村芳明による Android Developers Blog の記事 "Create promo codes for your apps and in-app products in the Google Play Developer Console" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

この 6 か月間で Google Play デベロッパー コンソールには、Google Play アプリやゲームのビジネスを成長させるのに役立つ新しいツールが多数追加されました。改良されたベータ版テスト機能では、より多くのフィードバックを集めて問題の解決に役立てることができます。ストア掲載情報のテスト機能では、アプリの Play ストア掲載情報について A/B テストを実施できます。またユニバーサル アプリ キャンペーンでユーザーを増やし、ユーザー獲得パフォーマンス レポートでマーケティングをしっかりと把握することができます。

このたびデベロッパーの皆様は、ユーザーのロイヤリティを高められるよう、Google Play の現行ユーザーや新しいユーザーを対象にプロモーション コードを生成、配布できるようになりました。デベロッパー コンソールの [プロモーション] タブでアプリ、ゲーム、アプリ内アイテム向けのプロモーション コードを設定し、各自のマーケティング キャンペーンで配布することができます。リピーターへの特典の提供、アプリのクチコミの推進、新しいユーザーへのアピールに、プロモーション コードの利用をぜひご検討ください。

プロモーション コードの使い方

  1. デベロッパー コンソールでアプリを選択します。
  2. [プロモーション] タブで [新しいプロモーションを追加] を選択します。
  3. これまでにプロモーションを実施したことがない場合は、追加利用規約を確認して同意します。
  4. 利用可能なオプションから選択し、プロモーション コードを生成してダウンロードします。
  5. ソーシャル ネットワーク、メール、ウェブ、アプリのベータ版テスターなどのマーケティング チャネルや、アプリ、ゲーム自体でプロモーション コードを配信します。
  6. ユーザーは次のような多くの方法でプロモーション コードを利用できます。
    1. Google Play から [コードを利用] メニュー オプションを使用します。
    2. アプリからの場合、ユーザーは Play のご購入手続きに移動した後、再びアプリにリダイレクトされます。
    3. プロモーション コードに埋め込まれたリンクを使用します(下記の役立つポイントをご覧ください)。
アプリやゲーム向けのプロモーションの実施について詳しくは、Google Play デベロッパー ヘルプセンターのこちらの記事をご覧ください。

プロモーション コードの作成に役立つポイント

プロモーションを実施する場合に役立つ重要なポイントは次のとおりです。
  • 1 つのアプリで利用できる四半期ごとのプロモーション コード数の上限は 500 です。
  • URL にコードを埋め込むことができるため、ユーザーが手動で入力する必要がありません(コードをメールで送信する場合など)。https://play.google.com/store?code={CODE} という URL を使用します({CODE} には、生成したプロモーション コードを挿入してください)。
  • アプリ内アイテムのプロモーション コードを使用するには、アプリ内にアプリ内プロモーションを実装する必要があります。定期購入にはプロモーション コードを使用できません。
  • プロモーション コード利用規約を確認して同意します。
ユーザーの目を引く方法でプロモーション コードを使用し、新しいユーザーの開拓や既存のファンへのアピールにつなげましょう。Google Play でのビジネスの成長に役立つさまざまなツールやおすすめ方法について詳しくは、Google Play でアプリを成功に導くにはをご覧ください。



Posted by Eiji Kitamura - Google Play Team

[この記事は、DoubleClick Publisher ブログの記事を紹介した Google Developers Blog の "Mobile Bootcamp Part I: Get your app into shape for the holiday season" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

ユーザーは  1 か月あたり平均 37 時間をアプリに使い、その間、情報とエンターテインメントを求めてモバイル デバイスを使用します。DoubleClick のユーザーにとっては、これは驚くに値しません。DoubleClick はほとんどがモバイル ユーザーで、現在、プラットフォームに関する質問の半分以上はモバイル デバイス上のウェブやアプリを使用して投稿されています ...
[この記事は、DoubleClick Publisher ブログの記事を紹介した Google Developers Blog の "Mobile Bootcamp Part I: Get your app into shape for the holiday season" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

ユーザーは 1 か月あたり平均 37 時間をアプリに使い、その間、情報とエンターテインメントを求めてモバイル デバイスを使用します。DoubleClick のユーザーにとっては、これは驚くに値しません。DoubleClick はほとんどがモバイル ユーザーで、現在、プラットフォームに関する質問の半分以上はモバイル デバイス上のウェブやアプリを使用して投稿されています。

モバイル デバイス、特にモバイル アプリのユーザーのアクティビティ増加の波に乗るために、最も有益な調査とベスト プラクティスを集めました。4 回のモバイル ブートキャンプで、アプリのユーザーに寄り添い、向き合って、収益を上げてください。

アプリのユーザーを増やす

米国の消費者は、スマートフォンを毎日 5 時間使用し、そのデジタル メディア利用時間のうちの 54% をアプリに費やしています。自分が作成したアプリを、そういったアプリの 1 つにするにはどうしたらよいでしょうか。Google のモバイル ソリューション コンサルタントである Cheney Tsai は、あらゆる場所にいるアプリのユーザーと繋がるために、次の 5 つのステップを推奨しています。
  1. ユーザーにアプリを話題にしてもらいましょう。
    ユーザーの 52% は、アプリについて友人、家族、または同僚から情報を得ます。よく知られていることですが、口コミは信頼できるプロモーション方法です。Cheney は、iOS と Android のベータ機能である App Invites を利用することを提案しています。App Invites のユーザーは、メールや SMS で Google コンタクトに登録されている人をアプリに招待することができます。Cheney は次のように説明しています。「第一印象は大切です。App Invites を利用すると、新しいユーザーを温かく迎えることができます。これにより流れが変わり、ユーザーの長期的なアプリ利用をもたらす可能性があります。また、App Invites の送受信者だけに特別価格でアプリを提供するといったこともできます。」

  2. 既存のユーザーがどこからでもアプリを簡単に見つけられるようにしましょう。
    自社広告キャンペーンを拡大し、既存サイト上で宣伝することにより、Android と iOS のユーザーに加えて、デスクトップ ユーザーをターゲットにすることができます。App Indexing を利用して、アプリへの SEO ベースのトラフィックをリダイレクトしてください。既存のユーザーは直接アプリのページへ、新しいユーザーにはアプリのインストールを促します。また、Google Play ストアのバッジをウェブサイトの目立つ場に表示するようにしてください。Google Play バッジが表示されている場合、 ユーザーがアプリを信用してダウンロードする可能性が、バッジが表示されていない場合よりも 47 % 増加します。

  3. クリエイティブを最適化して、ストア内でユーザーの興味を引きましょう。
    アプリ ストア内でどのようにアプリが提示されているかが、ダウンロードに直接影響を与えます。第一印象を与えるのはアイコンなので、アイコンがアプリの独自性を表現するように工夫して、特徴的なイメージを表すようにしてください。Google Play ストアの A/B テスト機能で、さまざまなグラフィック アセット、タイトル、説明文を試してみましょう。Cheney は、ユーザーがアプリを見つける可能性の高いキーワードを強調することを推奨しています。

  4. パフォーマンスが高いチャンネルを識別し、よりよい分析によって最適化しましょう。
    効果的なプロモーション戦略を作成するために、最も成功しているアプリのインストール キャンペーンと広告を見つけます。iOS、Android とも、Google Analytics を使用して、ユーザーが離れていった原因を理解しましょう。アプリ インストールの追跡カスタム キャンペーンを利用したさらなる分析により、どの方法が最も効果的かを特定しましょう。

  5. ユーザーの声に耳を傾け、ユーザーが何を求めているかを知りましょう。
    ユーザーのコメントから建設的なフィードバックが得られる可能性があるため、コメントに対応して変更を行う計画を欠かすことはできません。Google Play デベロッパー コンソールを用いてレビューに返信し、ユーザーが問題を解決する手助けをしたり、関連情報を提供したりできます。Text Plus 社の James Jerlecki などのデベロッパーによれば、「レビューへの返信機能は、これまでにはなかった(ユーザーとの)直接的なやりとりを実現しました。」ただし、返信は誰でも見ることができるので、組織内の適任者が返信することが重要です。

Google Play と Apple ストアを合わせると 310 万以上のアプリが存在しているので、ユーザーが新しいアプリを探すときに、あなたのアプリがいつも表示され、目立つようにする必要があります。第 2 部では、Google のモバイル ソリューション コンサルタントである Jason Rosenblum が、ユーザーを魅了するための推奨事項を投稿します。どうぞ、お楽しみに。

[この記事は Muzammil Esmail、Android Wear Google for Work 製品マネージャー、Wesley Chun、Google Apps デベロッパー アドボケートによる Google Developers Blog の記事 "Introducing the new Calendar Resource API" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Google ではドライブやカレンダー、Google Apps for Work のドメイン管理に使用される API などを、長い年月をかけてバージョンアップしてきました。これらの新しいサービスは、旧機能からの改善をデベロッパーに提供し、Apps 管理者がドメインをさらに管理しやすくする新機能を導入しています ...
[この記事は Muzammil Esmail、Android Wear Google for Work 製品マネージャー、Wesley Chun、Google Apps デベロッパー アドボケートによる Google Developers Blog の記事 "Introducing the new Calendar Resource API" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Google ではドライブやカレンダー、Google Apps for Work のドメイン管理に使用される API などを、長い年月をかけてバージョンアップしてきました。これらの新しいサービスは、旧機能からの改善をデベロッパーに提供し、Apps 管理者がドメインをさらに管理しやすくする新機能を導入しています。

より細かな制御を行えるよう、先月、Admin SDK の Directory API の一部として、新しい Calendar Resource API を公開しました。Google for Work のユーザーは、会議室、プリンター、仮眠用ベッド、テニスコート、ウォークステーションなどの物的資源を管理できるようになります。エンド ユーザーは、必要に応じてこれらの物的資源をミーティングに追加することができます。この API は GDATA Calendar Resource API に取って代わるため、デベロッパーの皆さんには、アプリケーションやツールを新しい API へ移行を開始することをお勧めします。なお、既存の API は 2016 年 1 月以降の使用は推奨されず、2017 年 1 月には廃止となります。廃止に関するお知らせにご留意ください。

Posted by Eiji Kitamura - Developer Relations Team

[この記事は Dan McGrathGoogle Drive プロダクト マネージャーによる Google Developers Blog の記事 "A leaner and faster Google Drive API を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Google ドライブ API のバージョン 3(v3)が先月リリースされました。デフォルトでより無駄がなく高速、かつ一貫性のある Google ドライブとのインターフェースをデベロッパーに提供します。この最新アップデートは、初めて Google ドライブと連携しようとしているデベロッパーが、簡単に実装できるよう設計されています ...
[この記事は Dan McGrathGoogle Drive プロダクト マネージャーによる Google Developers Blog の記事 "A leaner and faster Google Drive API を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Google ドライブ API のバージョン 3(v3)が先月リリースされました。デフォルトでより無駄がなく高速、かつ一貫性のある Google ドライブとのインターフェースをデベロッパーに提供します。この最新アップデートは、初めて Google ドライブと連携しようとしているデベロッパーが、簡単に実装できるよう設計されています。

Google ドライブ SDK の最初のバージョンをリリースして以来、デベロッパーがどのように API を使用しているのか、どのような問題に遭遇したかなどに関して多くの情報を得ました。このバージョンでは、次のような方法で API をシンプルにしています。
  • デベロッパーが理解する必要があるコレクション数の削減
  • 重複の削除
  • メソッドやプロパティの名前に一貫性を持たせるよう整理
  • 高速かつ効率的なデフォルト値を設定
たとえば、files.list の呼び出しには、デフォルトで、効率的にサービスを提供する最も一般的に使用されるフィールドだけが含まれ、その他のフィールドは fields パラメータによって追加することができるようになり、v3 ではデフォルトの呼び出しが v2 の 6 倍ほど高速化されました。



API の将来のバージョンでは機能の追加が中心となる予定ですが、今回のリリースでは旧バージョンの API(v2)のパフォーマンスや使いやすさを改善しました。v2 を使用する既存のアプリを変更することなく使用できる(デベロッパーはアップグレードする必要がない)よう、新旧両方のバージョンのサポートを継続する予定です。新しいバージョンの利用を考えている v2 アプリのデベロッパー向けに、移行に関する簡単な虎の巻を用意しました。

API の新バージョンの使用を開始するには、デベロッパー ドキュメントを参照してください。また、ご質問がある場合は、StackOverflow で google-drive-sdk タグを使用して検索してください。新しい API を使ってみなさんがどんなアプリを構築されるか、楽しみにしています。

[この記事は Jose Alcérreca、デベロッパー プログラム エンジニア、Wojtek Kaliciński、デベロッパー アドボケートによる Android Developers Blog の記事 "Leveraging product flavors in Android Studio for hermetic testing" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]



昨年開催された Android Dev Summit において、テスト コードラボの一部として作成した簡単な Notes アプリケーションの例を取り上げ、Android でのテストの状態について議論しました。テストの不安定性について話し合い ...
[この記事は Jose Alcérreca、デベロッパー プログラム エンジニア、Wojtek Kaliciński、デベロッパー アドボケートによる Android Developers Blog の記事 "Leveraging product flavors in Android Studio for hermetic testing" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]



昨年開催された Android Dev Summit において、テスト コードラボの一部として作成した簡単な Notes アプリケーションの例を取り上げ、Android でのテストの状態について議論しました。テストの不安定性について話し合い、閉じられた環境でのテスト(hermetic testing)をセットアップするための簡易なソリューションを紹介しました。

不安定なテストに対処する

障害が発生する、または応答に長時間を要する可能性がある外部依存関係をアプリケーションが有する場合、Espresso や UI Automator のようなフレームワークを使用した UI テストは不安定になりやすいものです。不安定なテストとは、テスト実行の目的自体が無効になるほど信頼性に欠ける(成功または失敗に一定性が見られない)テストのことです。

この問題に対してはよく、閉じられた環境でのテスト、つまり依存関係から隔離されたテストを行うという解決法が取られます。事前に定義されたデータを返す、フェイク実装またはフェイク サーバーの使用は、この問題に対処する一般的な方法のひとつです。好例としては以下のようなものがあります。

  • ネットワークに接続せず、ディスクに格納されているファイルからデータを素早く返すフェイク API クライアントまたはフェイク サーバーを介して、ネットワークを呼び出すことができます。この方法では、ネットワークの遅延や不安定さ、さらには実際のサーバーに起因するエラーを回避できます。
  • 中間インターフェースを介して、低レベル フレームワーク API(特にカメラやストレージなどのハードウェアにアクセスするための API)とのインタラクションを渡すことができます。ハードウェアに依存することなく、このインターフェースのフェイク実装が即座に返され、画像などのプリロード済みのデータへの参照が提供されます。
  • GPS、マイク、加速度計などのセンサーもフェイクに置き換えることができ、プリセット位置や操作をシミュレートした入力セットなど、現実世界では実行し難いデータのテストを行えるようになります。

依存性の注入(DI)はテストと、モジュールの再利用やモジュールの互換性を促進するソフトウェア設計パターンです。DI フレームワークは、このパターンに関連するボイラープレートの扱いを容易にしますが、DI フレームワークをセットアップして、その動作方法を理解するには長時間を要することもあります。特にプロジェクトの要件がシンプルな場合、アプリにこれらのフレームワークの 1つを適用する前に、より簡単な方法を探るとよいでしょう。

プロダクト フレーバーで依存関係を管理する

プロダクト フレーバーは Android Studio の強力な機能です。また、Android Gradle プラグインを使用すると、コンパイル時に Java クラスを入れ替えることができ、追加のライブラリが不要になります。一般的なフレーバー ディメンションの例は次のとおりです。

  • 無料 / 有料フレーバー: ディストリビューション チャネルでリリースされる 2 つの異なる APK を生成する
  • 安定 / 実験的: さまざまなソースセットで実験を継続し、ベータ バージョンを素早く生成する

同じメカニズムを活用して、2 つのバージョンのアプリを個別に作成し、閉じられた環境でのテストを支援できます。

  • プロダクト - 実際のデータとリソースを用いて、サービスとコンポーネントの実装を使用する
  • モック - テスト実行が難しい依存関係のフェイク実装を含むバージョン用

手順はシンプルです。
  1. app/build.gradle ファイルにフレーバーを作成します。
     android {  
          productFlavors {  
               mock {   
                    applicationIdSuffix = ".mock"  
               }  
               prod  
          }  
     }  

  2. 2 つのディレクトリ app/src/prod と app/src/mock を作成します。
  3. prod/java フォルダに運用コードに使用するクラスを作成するか、main/java からクラスを移動します。このクラスが main/java フォルダには含まれていないことを確認します。
  4. mock/java フォルダに同じクラスを(厳密に同じクラスおよびファイル名で)作成しますが、テスト用には異なる(フェイク)実装を用意します。
  5. Android Studio の [Build Variants] ウィンドウでインストールするバリアント、またはテストに使用するバリアントを選択します。バリアントは、フレーバーとビルドタイプの組み合わせです。
注:Gradle でフレーバーを追加すると、タスク名が変更されます。ここでは installDebug ではなく、installProdDebug または installMockDebug を選択する必要があります。

テストを実行する

プロダクト フレーバーとモック フレーバーを構成してモック実装の準備が完了したら、次の Gradle タスクを使用して、テストを実行する方法を選択できます。

  • connectedMockDebugAndroidTestandroidTest ディレクトリと androidTestMock ディレクトリを結合し、ソースセットの結果として検出されるテストすべてを実行します。これらのテストは閉じられた環境で実行されるため、テストはより速く、安定性も高まります。送信前のチェックには最適です。
  • connectedProdDebugAndroidTest は実際の API とセンサーを使用するため、失敗することがあります。継続的インテグレーション システムがある場合、このタスクを毎晩実行させることも、または、受け入れエンドツーエンド テストとして手動で実行することもできます。このタスクは、androidTestProd が存在しない場合でも、androidTest でテストを実行することに注意してください。

このメソッドを使用して挿入クラスを実装する方法については Android テスト コードラボをご覧ください。これらの実装の 1 つは実際のデータを提供するプロダクトであり、もう 1 つは隔離されたテストの実行にフェイクデータを使用するフェイク依存関係を提供するモックです。

閉じられた環境が適切に設定できたらビルドプロセスに柔軟性をさらにもたせ、アプリのさまざまなコンポーネントを交換できるようにするため、ディメンションを追加してもよいでしょう。上記の方法はシンプルなプロジェクトに適していますが、より複雑な状況では学習のための時間を確保し、依存性の注入フレームワークをプロジェクトに追加することをお勧めします。

Posted by Yuichi Araki - Developer Relations Team


[この記事は Presentation MC、Anton Vayvod による Chromium Blog の記事 "Chrome 48 Beta: Present to Cast, custom notification buttons, and network estimation" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

特に記載のない限り、下記の変更はまもなくリリースされる Android、Chrome OS、Linux、Mac、Windows 向けの Google Chrome に適用されます。

Presentation API


[この記事は Presentation MC、Anton Vayvod による Chromium Blog の記事 "Chrome 48 Beta: Present to Cast, custom notification buttons, and network estimation" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

特に記載のない限り、下記の変更はまもなくリリースされる Android、Chrome OS、Linux、Mac、Windows 向けの Google Chrome に適用されます。

Presentation API

これまで、サイトのコンテンツを周囲のデバイスに表示することができなかったため、スライドをモバイルウェブ向けに「プレゼンター モード」などで提供することは困難でした。Android 版 Chrome 48 からは、Google が標準として使用している Presentation APICast Web SDK を使ってモバイルサイトを Google Cast 端末に表示できるようになります

通知のカスタムボタン

Chrome 42 でプッシュ通知機能が導入されたことで、お気に入りサイトとユーザーは、より親密な関係を築くことができるようになりました。この機能の使用は急速に広まり、今や Chrome では 3 億 5 千万以上のプッシュ通知が毎日配信されています。Chrome 48 では、通知にカスタムボタンを追加することが可能になり、ユーザーが通知内でタスクを完了できるようになります。

Android 上の Chrome 48 の通知アクション

最大の接続速度を検出する

モバイル端末のユーザーは高品質 WiFi から 2G に至るまでのあらゆるネットワークを介してインターネットに接続しており、適切なモバイル エクスペリエンスを設計することが難しくなっています。Chrome 48 (Android 版のみ)からは、NetworkInformation.downlinkMax を使用して端末の最大帯域幅を検出できるため、接続速度に適したサイズのリソースを配信できるようになります。NetworkInformation.onChange イベント ハンドラを使えば、接続品質の変化に対応することも可能です。

今回のリリースに追加されたその他の機能


細かな変更



Posted by Eiji Kitamura - Developer Relations Team

[この記事は Google Identity 製品マネージャーの Steven Soneff による Android Developers Blog の記事 "One tap sign-up and automatic sign-in without password entry using Smart Lock" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Android で Netflix アプリにログインするユーザーの 30% 以上は Google の Smart Lock for Passwords のおかげでパスワード入力が不要になりました。詳細はこちらから ...
[この記事は Google Identity 製品マネージャーの Steven Soneff による Android Developers Blog の記事 "One tap sign-up and automatic sign-in without password entry using Smart Lock" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Android で Netflix アプリにログインするユーザーの 30% 以上は Google の Smart Lock for Passwords のおかげでパスワード入力が不要になりました。詳細はこちらから

Smart Lock for Passwords のリリースから半年が経過し、ユーザーがアプリにログインすることに対して及ぼした効果に、感激しています。1 つの Android 端末から別の Android 端末に、または Chrome から Android に移動する(逆の場合も)に当たり、何百万ものユーザーが、保存済みアカウントを使用してログインしています。対応アプリは 40 以上。最前線のデベロッパーはログインの手間を取り除くことにより、ユーザーの復帰率、収益化のチャンス、デバイスをまたいだ分析性が向上し、アプリの価値とユーザー エクスペリエンスを高めることに成功しました。

New York Times は、新しいログインの 80% が Smart Lock によってサポートされていると見ています。一方で、Netflix のユーザー サポート チームは、Android ユーザーのアカウント復旧に関するサポート事例が 20% 以上減少したことを確認しています。ユーザーは 60% 以上のオプトインで、複数の端末にまたがってログインの状態を維持することを選択し、Smart Lock 対応の主要なアプリのログイン情報を保存しています。デベロッパーの多くは、1 日分に満たない作業で、アプリのクライアント側に変更を加えるだけで、こうしたメリットを得ることができました。Smart Lock for Passwords について詳しくは、開発者用サイトをご覧ください。

新機能

Google Play サービスの最新リリースでは、Smart Lock for Passwords API の機能が強化されており、新規ユーザーのサインアップまたは既存のユーザーのさらに迅速なログインが可能になりました。ログインの「ヒント」を取得する新しい方法を使用すると、タップ 1 回で選択できるメールアドレス一覧がユーザーに対して表示されます。


Android Marshmallow の実行時パーミッション モデルでは、この新しいエクスペリエンスが特に重要です。ユーザー エクスペリエンスを簡素化および向上させるため、このダイアログではいずれの端末からもパーミッションを受け取る必要がありません。また端末に保存されたアカウントに加え、ユーザーが Smart Lock で保存したメールアドレスも表示されます。つまり、ほとんどのユーザーはメールアドレスの入力が不要となります。このダイアログを使用しているアプリは、ユーザーの 4 分の 3 近くが表示されたメールアドレスのいずれかを選択しており、サインアップの割合が増加しています。

ユーザーがメールアドレスを選択した際、サーバー側のサポートもあれば、ログインのフローをさらに改善することができます。メールアドレスを使用してデータベースをチェックし、ユーザーが既にアカウントを登録しているかどうかを確認できます。さらに、事前に入力されたユーザーのメールアドレス、名前、プロファイル写真を使って、ログイン画面またはサインアップ画面をインテリジェントに表示することができます。

パスワード入力を省略する

フローはさらに短縮できます。ユーザーがダイアログから Google アカウントを選択した場合、OpenID Connect の ID トークンが提供されます。これにより、新規アカウントのメールアドレスは検証不要になり、再訪したユーザーの場合も、パスワードの入力を省略することができるようになります。ID トークンは Google Sign-In でもパスワードの代わりに使用され、そのメールアドレスの所有者であることを示す Google からの証明になります。ユーザーがサイトからメールによってパスワードを再発行した場合、Google の発行した ID トークンは、ユーザーがメールアドレスを所有しており、そのメールアドレスを使用してこの端末にログインしたことを同様に証明します。また、パスワードに加えて ID トークンがあることは、パスワードのクラッキングや不正使用を防ぐ措置であると考えることもできます。

Android ユーザーの大部分は、端末にログインするときに使用するメールアドレスを、サードパーティ アプリのアカウントとしても使用しています。そのため、再訪したユーザーがシームレスにログインしたり、1 回のタップで新規アカウントを作成したりすることができます。

コードサンプルとユーザーフロー

アプリのログイン フローを効率化する方法の概要を次に示します。


アプリが起動すると Smart Lock に保存された認証情報がリクエストされ、可能な場合にはユーザーのコンテンツへ直接移動します。パスワードまたは Google の認証情報のリクエストを作成し、結果のコールバックを待機します。保存されたユーザーの認証情報(ユーザー名/パスワード、ID トークンなど)が利用できる場合、即座にログインします。

 CredentialRequest request = new CredentialRequest.Builder()  
     .setSupportsPasswordLogin(true)  
     .setAccountTypes(IdentityProviders.GOOGLE) // you can add other identity providers, too  
     .build();  
 Auth.CredentialsApi.request(mCredentialsApiClient, request).setResultCallback(  
     new ResultCallback<CredentialRequestResult>() {  
       public void onResult(CredentialRequestResult result) {  
         if (result.getStatus().isSuccess()) {  
          handleCredential(result.getCredential()) // sign in automatically!  

ユーザーがメールアドレスを使用してログインする必要がある場合、メールアドレスの入力を支援するピッカーが表示されます。ヒントのリクエストを作成し、システムにコントロールを渡して UI を表示し、ユーザーがエントリを選択したら結果を処理します。

 HintRequest hintRequest = new HintRequest.Builder()  
     .setEmailAddressIdentifierSupported(true)  
     .setAccountTypes(IdentityProviders.GOOGLE)  
     .build();  
 PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(mCredentialsApiClient,   
                                 hintRequest);  
 startIntentSenderForResult(intent.getIntentSender(), RC_HINT, null, 0, 0, 0);  
 ...  
 onActivityResult(int requestCode, int resultCode, Intent data) {  
   switch (requestCode) {  
     case RC_HINT:  
       if (resultCode == RESULT_OK) {  
         Credential hint = data.getParcelableExtra(Credential.EXTRA_KEY);  
         handleCredential(hint);  

ヒントのリクエスト結果が端末上の Google アカウントである場合、その結果にはユーザーが選択した識別子と ID トークンが含まれます。ID トークンを使用する場合、セキュリティ上、サーバーで ID トークンの検証を行う必要があります。このトークンにはメールアドレスの存在が確認されたかの情報が含まれるため、メール検証のステップを省略できることに注意してください。トークンがない、またはサーバー側で検証できない場合は、ユーザーのメール フィールドが事前入力されます。

 handleCredential(Credential credential) {  
   if (!credential.getIdTokens().isEmpty()) {  
     credential.getIdTokens().get(0).getIdToken(); // send the ID token string to your server  
   } else {  
     // otherwise, try fill the sign-in form fields and submit if password is available  
     mEmailField.setText(credential.getId());  
     mPasswordField.setText(credential.getPassword());  

サーバーで ID トークンが正当であることが証明した後、アカウントを作成、もしくはユーザーをパスワードなしログインさせます。Google はトークンの検証を行うためのライブラリを提供しています。また、オープンソースの実装を使用することもできます。ID トークンにはユーザーのメールアドレスが含まれるため、データベースでそのメールアドレスを検索して、アカウントを作成する必要があるかどうかを決めます。

 GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)  
         .setIssuer("https://accounts.google.com")  
         .setAudience(Arrays.asList(String.format("android://%s@%s",   
                             SHA512_HASH, PACKAGE_NAME)))  
         .build();  
 ...  
     GoogleIdToken idToken = verifier.verify(idTokenString);  
     if (idToken == null) {  
       Log.w(TAG, "ID Token Verification Failed, check the README for instructions.");  
       return;  
     }  
     GoogleIdToken.Payload payload = idToken.getPayload();  
     Log.d(TAG, "IdToken:Email:" + payload.getEmail());  
     Log.d(TAG, "IdToken:EmailVerified:" + payload.getEmailVerified());  
     // based on the email address, determine whether you need to create account   
     // or just sign user in  

その後、次回の自動ログインのため、ユーザーのメールアドレス認証情報の「ヒント」を Smart Lock に保存します。ヒントを使って認証情報 API の save メソッドを呼び出し、ユーザーが入力したパスワード、もしくは ID トークンを使ってユーザーをログインさせた場合はアカウント タイプ、を保存します。

 Credential credential = new Credential.Builder(hint)  
     // if you signed in with ID token,   
     // set account type to the URL for your app (instead of a password field)  
     //.setAccountType("https://yourdomain.com")   
     .setPassword(password)  
     .build();  
 Auth.CredentialsApi.save(mCredentialsApiClient, credential).setResultCallback(  
     new ResolvingResultCallbacks<Status>(this, RC_SAVE) {  

詳細を見る

Smart Lock API の実装方法については、コードラボにあるステップ バイ ステップのガイドを参照してください。Smart Lock を使用すると、パスワードなしでの認証が可能になります。認証情報がより効率的に管理できるだけでなく、ユーザー名やパスワードを入力する必要なく、ユーザーがアプリへさらに迅速かつ安全にログインできるようになる世界が到来することを楽しみにしています。皆さんからのフィードバックご質問をお待ちしています。

Posted by Eiji Kitamura - Developer Relations Team

[この記事は Android プロダクト マネージャーのJamal Easonによる Android Developers Blog の記事 "Android Studio 2.0 Preview: Android Emulator" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

新しい Android エミュレータの初期プレビューをご利用いただけるようになりました。Android Studio2.0 の一部である Android エミュレータの最新版では、テストに使用する物理的な Android ハードウェアだけではなく、幅広い画面サイズや構成でアプリをテストできます。さらに、正規の Android エミュレータを使用すると、Android の最新版をテストできます。新しい Android エミュレータの主な利点は次の 2 つです ...
[この記事は Android プロダクト マネージャーのJamal Easonによる Android Developers Blog の記事 "Android Studio 2.0 Preview: Android Emulator" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

新しい Android エミュレータの初期プレビューをご利用いただけるようになりました。Android Studio2.0 の一部である Android エミュレータの最新版では、テストに使用する物理的な Android ハードウェアだけではなく、幅広い画面サイズや構成でアプリをテストできます。さらに、正規の Android エミュレータを使用すると、Android の最新版をテストできます。新しい Android エミュレータの主な利点は次の 2 つです。
  • 速度とパフォーマンス:最新の Android 6.0 リリース(Marshmallow)をエミュレートする際に、対称型マルチプロセッシングがサポートされるようになり、エミュレータと ADB の両方で I/O が大幅に向上しました。これは、アプリのテスト時に、高いパフォーマンスが得られることを意味します。
  • ユーザビリティとユーザー インターフェース:新しい Android エミュレータには、エミュレータを使いやすくするためのまったく新しいユーザー インターフェースが含まれています。Android エミュレータを使用するためにコマンドライン パラメータを使用する必要がなくなりました。1 回のマウス クリックやキーボード ショートカットで共通タスクやエミュレータの機能を呼び出すことができます。
Android Dev Summit でこのユーザー インターフェースがプレビューされました。迅速な APK のインストールおよびエミュレータへの転送のための新しいバージョンの ADB と一緒にこのユーザー インターフェースをお試しいただけます。新しい Android エミュレータのデモ ビデオをご覧ください。

Android Dev Summit 2015:エミュレータのデモ

今後も引き続き、生産性を高めるための操作性や機能を提供できるように、早期のフィードバックをお待ちしています。

プレビュー版の Android エミュレータにおける新機能


パフォーマンスの向上

  • CPU のパフォーマンス

    現在、Android Studio ではデフォルトで x86 エミュレータ システム イメージで CPU アクセラレーションを使用します。Android 6.0 Marshmallow のシステム イメージでの新しい対称型マルチプロセッサ(SMP)のサポートと組み合わせることにより、Android エミュレータは多くの物理的な Android デバイスよりも高速に動作します。マルチコアのサポートにより、アプリとエミュレータの動作の高速化だけではなく、APK のインストールなどのデベロッパーの共通タスクを高速化することもできます。また、SMP により、マルチプロセッサの Android デバイスを対象とするアプリをテストできます。
  • ADB の高速化

    エミュレータの CPU 速度の高速化に加えて、操作性を向上させるために多くの点が改良されています。解決に取り組んだ開発プロセスにおけるボトルネックの 1 つは、Android Studio と ADB(Android デバッグ ブリッジ)を使用するデバイスの間のデータ転送速度です。Android 6.0 Marshmallow 以上のシステム イメージを新しい Android エミュレータと一緒に使用する場合、ADB を利用して、実際のデバイスの最大 5 倍の速度でファイルを転送できます。これは、アプリ開発サイクルでサイズの大きい APK やファイルを転送する場合に役立ちます。


ユーザー インターフェース

  • ツールバー
    新しいインターフェースでは、新しいツールバーおよびコントロール パネルに一般的なエミュレータ アクションのほとんどが組み込まれているため、コマンドライン オプションを使用する必要がありません。プレビュー版では、Android エミュレータのツールバーに、音量調節、画面の回転、エミュレータ ウィンドウのスクリーンショットなどのアクションが組み込まれています。

  • ウィンドウの拡大とサイズ変更

    ウィンドウの隅をドラッグして、ウィンドウのサイズを変更できるようになりました。拡大してスクロールすると、画面の特定の部分が見やすくなります。
左:拡大
右:ウィンドウのサイズ変更
  • ドラッグ&ドロップ

    新しいエミュレータでは、迅速なイントールのために APK をドラッグ&ドロップすることができるだけではなく、エミュレータの内部 SD カードにファイルをドラッグ&ドロップしてテストを容易にすることもできます。


ファイルのドラッグ&ドロップ
  • 改良された UI コントロール

    改良されたコントロールのウィンドウでは、アプリの機能の検証およびテストに役立つオプションが追加されています。次に示すように、仮想呼び出し、仮想 SMS 送信、エミュレータの電源レベルの制御など、さまざまなエミュレータ アクションを開始できます。さらに、1 つのGPS 位置をエミュレータに送信したり、KML や GPX のポイントのカスタム セットを再生したりできます。


電話コントロール


バッテリー コントロール

今後も多くの機能を追加し続ける予定です。新機能を追加した際にはお知らせします。

今後の予定とセットアップ

将来のバージョンの Android Studio では、より多くの API レベルのサポート、センサーの追加などの機能の実現を予定していますのでご期待ください。新しいエミュレータが搭載された Android Studio は、現在、Android Studio Canary チャンネルおよびツールのプレビュー チャンネルで利用できます。

新しい Android エミュレータのプレビュー版を設定する方法を参照するには、ここをクリックしてください。

お客様のフィードバックをお待ちしています。Google+ で Android Studio 開発チームにお送りください。


Posted by Yuichi Araki - Developer Relations Team

[この記事は V8 トラックコメンテーターの Seth Thompsonによる Chromium Blog の記事 "Smarter garbage collection for smoother browsing and less memory usage" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]
[この記事は V8 トラックコメンテーターの Seth Thompsonによる Chromium Blog の記事 "Smarter garbage collection for smoother browsing and less memory usage" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Chrome でブラウジングするときにスムーズできびきびした操作感を確保するには、未使用のメモリを解放することが不可欠です。メモリを可能な限り迅速に回収して実行用のメインスレッドの一時停止を短縮するため、V8 JavaScript エンジンの ガベージ コレクター最適化されました。しかし、わずかな一時停止であっても不適切なタイミングで発生すると不自然な動作がもたらされ、クリック、スクロール、アニメーション フレームなどの重要なイベントがブロックされます。ガベージ コレクションをより目立たなくするため Blink のタスク スケジューラを V8(M41 以降)に統合したことにより、一時停止が短くなるのみではなく、一時停止がブラウザのアイドル時間に発生するようインテリジェントにスケジュールされます。完全に非アクティブなページ(バックグラウンド タブなど)があると、V8 ではメモリの大きなチャンクが一度に解放されます。 その結果、ブラウジング時の不自然な動作は減少し、全体的なメモリ使用率が低減します。


ガベージ コレクション タスク(赤色)をアイドル時間(青色)にスケジュールする。


スマートなガベージ コレクションを行うと遅延と途切れが減少し、3D アニメーションやゲームがスムーズに動作します。タスク スケジューラが V8 に統合されたことにより、ゲームプレイとレンダリングに対してさらに高いフレームレートが一貫してもたらされます。Chrome 41 から Chrome 46 までの間に、WebGL グラフィックのスムーズなレンダリングを計測する 3D ベンチマーク OORT Online のスコアが最大で 33% 増加しました。このスコアは、現在のデスクトップ コンピュータの最高スコア 10,000 ポイントをわずかに下回るだけです。




新しいシステムのメモリ消費量の低減は、ブラウザが数分間またはそれ以上アイドル状態になった場合、特に明白です。たとえば、Gmail タブが 2 分 30 秒の間未使用のままであると、 以前のバージョンに比較して Chrome 45 ではメモリ消費量が 最大で 45% 低減します。

よりスムーズで高速なブラウジング エクスペリエンスをユーザーに提供することに加え、これらの変更によってデベロッパーはさらに強力なアプリケーションと優れたグラフィックを使用して Chrome の限界を押し広げることが可能となります。今後の V8 の最適化にご期待ください。また、新しい V8 ブログガベージ コレクションのタイミングに関する詳細 をご覧ください。

Posted by Eiji Kitamura - Developer Relations Team

[この記事は Developer Programs Engineer の Leon Nicholls による Google Developers Blog の記事 "Google Cast Remote Display Plugin for Unity" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

先日、Unity のゲームをテレビで遊べるようにする Unity 用 Google Cast Remote Display プラグインをリリースしました。Google Cast ...
[この記事は Developer Programs Engineer の Leon Nicholls による Google Developers Blog の記事 "Google Cast Remote Display Plugin for Unity" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

先日、Unity のゲームをテレビで遊べるようにする Unity 用 Google Cast Remote Display プラグインをリリースしました。Google Cast Remote Display API を使用すると、Android や iOS モバイル デバイスのパワフルな GPU、CPU、センサーを利用して、モバイル デバイスでローカル ディプレイをレンダリングしたり、テレビでリモート ディスプレイをレンダリングしたりできます。

Unity は、モバイル デバイスをサポートする非常に人気のあるクロスプラットフォームのゲーム開発プラットフォームです。Google Cast Remote Display テクノロジーと Unity の優れたレンダリング エンジンを組み合わせることにより、安価な Chromecast デバイスやその他の Google Cast デバイスで再生できるハイエンドなゲーム エクスペリエンスを開発できるようになります。


Remote Display プラグインを使用したゲーム

すでにいくつかのパートナー企業は Unity 用 Remote Display プラグインを使用した楽しいゲーム アプリを提供しており、近日中にさらに多くのゲーム アプリがリリースされる予定です。

Monopoly Here & Now(国内未発表)は、従来の Monopoly ゲームの最新バージョンです。このゲームでは、世界で最も象徴的な都市や名所を訪れながら世界中を旅して、パスポート スタンプを集めます。パスポートをスタンプで埋めたプレイヤーが勝者となります。これは家族全員で楽しめるひと味違ったゲームです。

また、戦略ゲームの Risk(国内未発表)は、友人に対戦を申し込み、自分の軍隊を編成し、世界を征服する、というゲームです。従来の世界地図に加えて、さらに 2 つのテーマ マップが用意されました。

これらのゲームは、携帯電話やタブレットの機能を利用するゲームの魅力的な世界をテレビに映し出せることを証明しています。

ゲームに Remote Display プラグインを追加する

GitHub または Unity Asset Store から Unity 用 Remote Display プラグインをダウンロードできます。既存の Unity ゲームがある場合は、Remote Display パッケージをインポートし、シーンに CastRemoteDisplayManager プレハブを追加します。次に、ローカル ディスプレイとリモート ディスプレイ用のカメラをセットアップし、CastRemoteDisplayManager で構成します。

ユーザーが Google Cast デバイスを選択できるように UI に [Cast] ボタンを表示するには、シーンに CastDefaultUI プレハブを追加します。

これで、アプリをビルドして実行する準備が完了しました。Cast デバイスに接続すると、テレビにリモート カメラ ビューが表示されます。

マルチスクリーンのユーザー エクスペリエンスをサポートするためのゲームの操作方法を考慮する必要があります。モバイル デバイス センサーを使用して、モーションやタッチによる画面上のアクションを操作する抽象コントロールを作成できます。あるいは、プレイヤーがデバイス上の何かをタッチして画面上の何か他のものを制御する仮想コントロールを作成することもできます。

視覚的なデザインについては、プレイヤーの視点を常に移動させないようにして、疲労感を与えないことが重要です。Google Cast UX チームは、Cast 対応のゲームで一貫性のある予測可能なユーザー エクスペリエンスを実現する方法について説明する Google Cast ゲームの UX ガイドラインを作成しています。

デベロッパー向けリソース

Google の Unity 公式プラグインの詳細については、ここを参照してください。Unity 用 Remote Display プラグインの使用方法の詳細については、デベロッパー向けドキュメントコードラボを参照してください。また、Unity Asset Store と GitHub に UX 対応の Unity サンプル ゲームを公開しています。G+ コミュニティに参加して、Google Cast に関するデペロッパーとしての経験を共有してください。

Posted by Yoshifumi Yamaguchi - Developer Relations Team

[この記事は Laurence Moroney、デベロッパー アドボケートによる Android Developers Blog の記事 "API Updates for Sign-In with Google" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Google Play サービス 8.3 のリリースでは、Google Sign-In に関連する API に多数の改良を加えました。現在継続中の シリーズ投稿の第一弾では、ユーザー インターフェースの改善点を取り上げました。本稿では、API の変更点について詳しく解説します。この変更により Google アカウントでログインするアプリをさらに簡単にビルドできるようになりました ...
[この記事は Laurence Moroney、デベロッパー アドボケートによる Android Developers Blog の記事 "API Updates for Sign-In with Google" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Google Play サービス 8.3 のリリースでは、Google Sign-In に関連する API に多数の改良を加えました。現在継続中のシリーズ投稿の第一弾では、ユーザー インターフェースの改善点を取り上げました。本稿では、API の変更点について詳しく解説します。この変更により Google アカウントでログインするアプリをさらに簡単にビルドできるようになりました。

ログインの基本的な流れに対する変更

Google アカウントでログインするアプリをビルドすると、コードが読みやすくなり、保守もしやすくなっていることがお分かりになるかと思います。

以前は Google アカウントでログインするアプリをビルドする際、GoogleApiClient への接続を試みる処理をコードに記述していました。このコードを実行した時点でアカウントを選択する Account Picker や、アカウント名とパスワードを入力するダイアログが表示されますが、どちらも入力するとコネクションに失敗します。ログイン処理を完了するには、このコネクションの失敗にまず対処する必要がありました。GoogleApiClient への接続が完了すると、システムはそのユーザーがログインしたことを認識し、適切な権限をユーザーに付与します。この一連のプロセスは、こちらのコードラボ資料に掲載されています。

今回リリースした API では、このようなコードを大幅に簡略化できます。

ログイン プロセスと GoogleApiClient への接続を別々に扱うようにしました。ログインを完了させるには GoogleSignInOptions オブジェクトを使います。このオブジェクトはログインのスコープなど、ログイン時に使うパラメータを指定します。以下にコード例を示します。

 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)  
     .requestEmail()  
     .build(); 

GoogleSignInOptions オブジェクトを取得していれば、それを使って GoogleApiClient を設定できます。

新しい API を使うと、このあたりのコードの書き方が大きく変わります。今後、Google アカウントでシステムに接続する場合、GoogleApiClient 上でエラー処理を行うのではなく、クライアントを使って初期化したインテントを使います。

Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);

インテントを導入すると、アプリの GoogleSignInOptions が基本的なスコープ以外を要求した場合、アカウント ピッカーとスコープのパーミッションを入力するダイアログが表示されます。ユーザーがダイアログの操作を終えると、OnActivityResult のコールバックが起動されます。これには必要なログイン情報が含まれています。

 @Override  
 public void onActivityResult(int requestCode, int resultCode, Intent data) {  
   super.onActivityResult(requestCode, resultCode, data);  
   // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);  
   if (requestCode == RC_SIGN_IN) {  
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);  
     handleSignInResult(result);  
   }  
 }  
 

上記コードの詳細は、Integrating Google Sign-In quickstart、または本稿のサンプルコードを参照してください。

サイレント ログイン

複数のデバイスを使い分けるユーザーの負担を軽くするため、API はサイレント ログインに対応しています。この場合、そのアプリに対するユーザー認証はログインを実行していないデバイスでも有効になり、アカウントの詳細が引き継がれます。その後の操作を別のデバイスで行う場合、認証を解除しない限り、ログイン情報の再入力は不要です。既存のログイン情報はキャッシュに保存されるので、ユーザーが現在のデバイスを操作している間は、操作と同期してログイン情報も有効になります。

API の silentSignIn メソッドを呼び出すだけでこの機能を使用できます。

 OptionalPendingResult opr = 
      Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
次に、PendingResult 上の isDone() メソッドをチェックします。このメソッドが true を返した場合、ユーザーのログインは成功し、PendingResult からステータス情報が返されます。このメソッドが true を返さなかった場合、SignInResult でコールバックを待機しなければなりません。
 if (pendingResult.isDone()) {  
    doStuffWith(pendingResult.get());  
  } else {  
    // There's no immediate result ready, displays some progress indicator and waits for the  
    // async callback.  
    showProgressIndicator();  
    pendingResult.setResultCallback(new ResultCallback() {  
      @Override  
      public void onResult(@NonNull GoogleSignInResult result) {  
        updateButtonsAndStatusFromSignInResult(result);  
        hideProgressIndicator();  
      }  
    });  
  }

ログインボタンをカスタマイズする

Google では、Google アカウントをログインに使うアプリを想定した Google ブランディングの SignInButton オブジェクトを提供しています。

こちらのドキュメントに掲載している API のプロパティや定数を変更することで、ボタンをカスタマイズすることもできます。

ブランディングのガイドラインはこちらを参照してください。さまざまなタイプのボタンをご利用いただけるよう、ボタン画像は PNG、SVG、EPS などの形式で、解像度も数種類用意しています。ボタンのローカライズにこれらのファイルを利用することもできますが、アプリのスタイルに合わせてボタンのデザインを変更する場合は、前述のガイドラインを参照してください。

この記事では、アプリの Android 側の処理のみを説明しています。アプリにはサーバー側の処理も含まれることが多く、そこでも認証情報を安全に扱いたいのではないでしょうか。

次回の投稿では、Google Sign-In でログインする場合のサーバー側のシナリオ、たとえば独自のサーバーに認証情報を安全に渡す方法や、パーミッションとユーザーから送信された認証情報を使用して Google Drive など Google のバックエンド サービスを利用する方法を説明します。

Posted by Eiji Kitamura - Developer Relations Team

[この記事は Android プロダクト マネージャー、Jamal Eason による Android Developers Blog の記事 "Android Studio 2.0 Preview" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Android Studio で最も要望の多かった機能は、アプリのビルドとデプロイをより高速に行いたいというものでした。この記事では、 Android Developer Summit で発表された、開発のワークフローを飛躍的に改善する Instant Run を特長とする Android Studio 2.0 について、改めてご紹介します。Android Studio 2.0 には、新しい GPU Profiler のプレビューも含まれます ...
[この記事は Android プロダクト マネージャー、Jamal Eason による Android Developers Blog の記事 "Android Studio 2.0 Preview" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Android Studio で最も要望の多かった機能は、アプリのビルドとデプロイをより高速に行いたいというものでした。この記事では、Android Developer Summit で発表された、開発のワークフローを飛躍的に改善する Instant Run を特長とする Android Studio 2.0 について、改めてご紹介します。Android Studio 2.0 には、新しい GPU Profiler のプレビューも含まれます。

これらのアップデートはすべて先行リリース チャンネルから今すぐ入手できます。皆さんからのフィードバックもこのチャンネルで受け付けています。この初期リリースはプレビュー版なので、これをダウンロード して入手された場合、現在お使いの Android Studio のバージョンと並行して実行することができます。


Android Studio 2.0 の新機能

Instant Run:ビルドとデプロイを高速化

Android Studio の「Instant Run」機能により、デバイスやエミュレータでアプリの変更が実行される様子をすぐに確認できるようになりました。


導入方法は簡単です。Android Studio 2.0 で新しいプロジェクトを作成するだけでセットアップが完了します。既存のアプリの場合、Settings/Preferences を開き、Build, Execution, Deployment → Instant Run を選択し、次に Enable Instant Run... をクリックします。これで Instant Run で作業するプロジェクトの Gradle プラグインが正しく作成されます。
Android Studio プロジェクトで Instant Run を有効にする

通常どおり Run を選択すると Android Studio は通常のコンパイル、パッケージング、インストールの各ステップを実行し、アプリをデバイスまたはエミュレータで実行します。ソースコードやリソースの編集後、Run をもう一度押すと、変更内容が実行中のアプリに直接デプロイされます。
Android Studio での Instant Run の新しい Run アクションと Stop アクション

Instant Run の詳しいガイドとセットアップについては、こちら をクリックするとご確認いただけます。

GPU Profiler

OpenGL ES Android コードも Android Studio の GPU Profiler によって簡単に作成できるようになりました。このツールはまだ初期段階のプレビューですが、アプリが OpenGL ES コードを実行する際に、GL ステートと GL コマンドの詳細を表示する機能をはじめ、セッション全体の記録や GL フレームバッファによるウォークスルー、テクスチャー機能など、強力な機能を備えています。
Android Studio の GPU Profiler

GPU Profiler を利用するには、Android Studio SDK Manager から GPU Debugging Tools パッケージをダウンロードしておく必要があります。GPU Profiler の詳細と、プロファイリング向けにAndroid アプリのプロジェクトをセットアップする方法については、こちらをクリックするとご確認いただけます。


Android Studio 2.0 は Android Studio 先行リリース チャンネルからすぐに入手できます。上記の新しい機能をお使いになった感想などを、Google+ から Android Studio 開発チームにお送りください。

Posted by Eiji Kitamura - Developer Relations Team