People API を公開しました。ユーザーの同意を得た上でこの API を使うと、連絡先のデータを取得することができます。以前であれば、デベロッパーはユーザー プロファイルを取得するために Google+ API、連絡先を取得するために Contacts API というように、複数回の呼び出しを実行する必要がありました。このたび発表する People API は、最新のプロトコルとテクノロジーを使用しており、GData プロトコルを使用していた Contacts API に取って代わるものです。

たとえば、ユーザーがプライベートの連絡先リストに何人かの情報を格納していた場合、この API を呼び出すことによって、(ユーザーが同意した場合)リンクされているすべてのプロファイルがマージされた連絡先のリストを取得することができます。ユーザーが関連するスコープを承認すると、その結果が people.connections.list オブジェクトとして返されます。リストに含まれている各人のオブジェクトには、resourceName プロパティが含まれます。このプロパティは people.get を呼び出して、その人物に対する追加のデータを取得するために使用できます。

API は HTTP および JSON を使用しているので、標準的な HTTP クライアントであれば、どのようなものでもリクエストの送信や応答の解析が可能です。ただし、アプリケーションは API へのアクセス権限を得なければならないので、サービスへのアクセスに必要な認証情報を取得するために、Google デベロッパー コンソールにプロジェクトを作成しなければなりません。実行しなければならないステップについては、 ここを参照してください。Google API やデベロッパー コンソールにまだ慣れていない場合は、まずこのビデオシリーズを見て知識を深めておけば、すぐに追いつけます。

接続して認証を受けると、以下のように(Java 向けの Google API クライアント ライブラリを使って)ユーザーの連絡先を取得することができます。

 ListConnectionsResponse response =   
     peopleService.people().connections().list("people/me").execute();  
 List<Person> connections = response.getConnections();  

people.connections.list メソッドの詳細を記述したドキュメントは、ここから参照できます。

必要なスコープが承認されている場合、連絡先のリストには、すべてのユーザーの社会的なつながりに関する詳細情報が含まれます。そのユーザーが連絡先スコープしか承認しなかった場合は、連絡先情報のみが返されます。

Person の各アイテムは resource_name と関連付けられているので、次の簡単な呼び出しを行うだけでその人物に関する追加データにアクセスできます。
Person person = peopleService.people().get("resourceName").execute();
この API 呼び出しの詳細については、ここを参照してください。

新しい People API を使用すると、複数のソースおよび API からデータをマージして 1 つのデータソースに統合することができます。さらに、ユーザーが許可した場合は、自宅の住所や電話番号、プライベート メールアドレス、誕生日など、以前には取得できなかったデータにもアクセスできます。

こうした機能やデータが新たに利用可能になり、既存のデータにも簡単にアクセスできるようになったことによって、次世代のクールなウェブやモバイル アプリを作り出そうという皆さんの意欲はかきたてられることでしょう。その結果、皆さんのアプリのユーザーや、そのユーザーが影響を及ぼす人々に喜んでいただけることを願っています。People API の詳細については、ここから公式ドキュメントを参照してください。

Posted by Eiji Kitamura - Developer Relations Team


wtm_blog_square.png
テクノロジーを軸に、さまざまな方面でキャリアを築いている女性をお招きしたトークセッションや、発展し続ける最新のウェブ機能を体験できるワークショップを実施します。事前に選択いただくワークショップでは、実機を使った Progressive Web App の Codelab または Design Sprint というアイデアのブレインストーミングのいずれに参加ただけます。お申込方法、当日のスケジュールは下記をご確認ください。
世界各地で、同じテクノロジーの分野で活躍する女性同士が交流できる機会となれば幸いです。
wtm.png

■Women Techmakers 2016 at Google Japan 

日程:2016 年 3 月 19 日(土)10:00 - 17:00
場所:Google 東京オフィス 六本木ヒルズ森タワー
定員:100 名
主催:グーグル株式会社

■当日のスケジュール

午前の部
10:00 - 10:30 : 受付
10:30 - 10:40 : ご挨拶
10:40 - 11:10 : キーノート Xinmei Cai(Google ソフトウェア エンジニア)
11:10 - 11:55 : 外部の講演者を招いたトーク セッション
  • 平 愛美 (フリーランス)
  • 大場 寧子 (株式会社万葉)
  • よしこ (Goodpatch, Inc.)
  • 藤原 香織 (Google ソフトウェア エンジニア)
12:00 - 13:00 : ランチ

午後の部 : 2 つのセッションから選択
13:05 - 15:05 : セッション A : Progressive Web Apps Codelab
13:05 - 15:05 : セッション B : Design Sprint
15:10 - 15:25 : 休憩
15:30 - 15:40 : 閉会の挨拶
16:00 - 17:00 : 懇親会

■申し込み方法

Women Techmakers のサイトよりお申し込みください。
※本イベントの一次募集は 3 月 5 日 23 時 59 分までになっております。

■よくある質問

Q : Codelab に参加する上で必要なスキルや機材などはありますか?
A : ある程度の Web 開発経験(HTML,  CSS,  Javascript)が必要です。また、開発をする上で必要になる PC(Chrome 47 以上をインストールした Mac あるいは Windows)をご持参ください。

Q : 本イベントは女性限定のイベントでしょうか?
A : 女性の方向けのプログラムとなっていますが、イベントの趣旨に賛同してくださる方であればどなたでも参加可能です。

Q : 交通費や宿泊費のサポートはありますか?
A : 交通費等は参加者の方のご負担となります。

Q : ドレスコードは?
A : ドレスコードはありません。過ごしやすい服装でお越しください。

なお、東京以外でも、GDG コミュニティの皆さんによるイベントが開催される予定です。ご興味がある方は Women Techmakers のサイトをご覧ください。多くの方からのお申し込みをお待ちしております。


■ IWD 2016 - Women Techmakers in Kyoto
日程:2016 年 4 月 2 日(土)13:00 - 18:00
場所:amu-Kyoto
定員:20 名
主催:GDG 京都
詳細:https://gdgkyoto.doorkeeper.jp/events/40923


グーグル株式会社 Women Techmakers 運営チーム


CSS カスタム プロパティ

最近のモダンなウェブサイトには、値の繰り返しを含む CSS ファイルを使用しているものがあります。たとえば、1 つのカラースキーム内の 2~3 色をページ全体で再利用する手法です。このようなデータを変更するのは手間もかかり、作業ミスも発生しやすくなります。変更が必要な箇所が、1 つまたは複数の CSS ファイル全体に散らばっているからです。この事態を改善するため、Chrome で CSS Custom Properties がサポートされるようになります。これによって、外部フレームワークを使用せずに CSS 内部でプロパティ変数を定義できるようになります。デベロッパーはドキュメント内の好きな場所で var() 関数を使って、Custom Property を参照することができます。

Custom Property の変更により、ウェブサイト内の複数のコンポーネントを更新可能

CSS Custom Properties は、Shadow Root をまたいで継承されます。したがって、内部のことが分からなくても、外観に微調整を加えたりテーマを設定したりする「Style  API」を提供する Web Component を実現できます。Polymer ライブラリではこのプラットフォーム機能を使って、コンポーネントのカスタマイズを簡略化しています。

Service Worker で Background Sync

ユーザーがサイトに滞在する時間がきわめて短く、そのサイトで行った変更がネットワークに送信される前に別のサイトに移動した場合、サイトでローカルの変更を反映しきれなかったり、同期に失敗したりすることがありました。たとえば、メール クライアントを使っていたユーザーが「送信」をクリックしてすぐに別のサイトに移った場合、送信中のメッセージが消失することがあります。新たに追加される Background Sync API は、ネットワークの信頼性を高めるためのものです。Service Worker は、スケジュールを作成してそのデバイス上での変更を反映するための 1 回限りの同期を実行します。これは、デバイスが次回ネットワークに接続するときに実行され、該当サイトが開かれているかどうかにはよりません。

ECMAScript 2015 サポートの改善

ES2015 仕様(ES6)は、大幅な変更が加わった JavaScript の最新仕様です。これによって、読みやすくて強力でメモリ利用効率の高いアプリケーション ロジックを書くことができるようになります。最新バージョンである Chrome の V8 エンジンでは、JavaScript ES2015 の機能の 91% がサポートされています。分割代入(destructuring)や関数のデフォルト パラメータを指定できるようになるため、配列やオブジェクトからデータを抽出したり、関数パラメータにデフォルト値を設定する際にボイラプレート コードを回避できるようになります。Proxy オブジェクトや Reflect API を使用すると、たとえばプロパティの検索や割り当てなど、以前は制御できなかった動作をカスタマイズすることができます。また、最新バージョンの Chrome では、strict(厳格)モードの外でも class などのブロックレベルの構造や let が 利用できるようになっています。

keygen および application/x-x509-user-cert

<keygen> エレメントは、HTML フォームの一部として使用してキーペアを生成することができます。これはユーザー セキュリティを強化するためのものですが、<keygen> と、MIME タイプが「application/x-x509-user-cert」のユーザー証明書が送信されると、それが悪用されてユーザーのセキュアな通信が阻害されたり、使用しているデバイスの機能への干渉が発生したり、同意なしにユーザーの行動が追跡されたりする恐れがあります。その対応として、<keygen> はデフォルトで空の文字列を返すようになります。また、MIME タイプ「application/x-x509-user-cert」で送信されたユーザー証明書は、自動的にダウンロードされたりインストールされることはなくなります。

今回のリリースのその他の機能


細かな変更

  • Chrome の CSP (Contents Security Policy) で、‘script-src http:’ が HTTP と HTTPS の両方に一致するようになります。これによって、デベロッパーがセキュアなリソースまで不用意に拒否することを防ぐことができます。
  • Fetch API の Enum、Request.modenavigate モードがサポートされるようになります。これによって、より正確に仕様に準拠するようになります。
  • 属性セレクターのマッチング処理で、大文字と小文字の違いを無視するオプションがサポートされます。
  • 'rel=noopener' を指定することで、オープン元のページを明示しないポップアップを作成できるようになります。
  • addEventListener() と removeEventListener() の最初の 2 つの引数が必須となります。また、ディクショナリの構文を使って "capture" オプションを指定できるようになります。これによって、より正確に仕様に準拠するようになり、柔軟性も向上します。
  • Chromium の TLS で、標準化バージョンの ChaCha-Poly1305 暗号スイートがサポートされます。
  • Navigator の仕様に含まれなくなっている Navigator.getStorageUpdates() が削除されます。
  • MouseEvent.webkitMovementX/Y は、プレフィックスなしのバージョンで置き換えられ、削除されます。
  • initTouchEvent は、より正確に仕様に準拠するため、TouchEvent コンストラクタで置き換えられます。initTouchEvent は廃止予定となります。Chrome 53 で完全に削除される予定です。
  • Object.observe() は、標準化の対象に含まれなくなったため廃止予定となります。将来のリリースで削除される予定です。
  • getComputedStyle(e).cssX の動作は、公式の仕様に含まれなくなったため、廃止予定となります。
  • RTCPeerConnection のレガシー メソッドの一部の非標準的な使用方法は廃止予定となります。これによって、Promise ベースの WebRTC 仕様の実装を利用できるようになります。
  • Document.defaultCharset は、より正確に仕様に準拠するため、廃止予定となります。
Posted by Eiji Kitamura - Developer Relations Team


Android 6.0 (Marshmallow) では、アプリでユーザー データを適切に取り扱えるよう、いくつかの変更が加えられています。その目的は、デベロッパーが適切な動作をするアプリを簡単に作れるようにすることです。Marshmallow の普及は進みつつあるため、ぜひこの点に挑戦していただきたいと考えています。

本稿は、 実行時 パーミッションとハードウェアの識別子について、ユーザーの信頼を得るために考慮するべき事項を中心に説明しています。また、アプリの開発において目指すべき点を分かりやすく説明している 新しいベストプラクティス のドキュメントも紹介します。

パーミッションの変更

Marshmallow では、 パーミッションの許可を得るタイミングがインストール時から実行時に変更されています。 これは SDK 23 以降で強制的に適用される変更なので、Android 6.0 を対象とするすべてのアプリとすべてのデベロッパーに影響します。アプリはいずれ更新しなければなりませんが、更新は注意深く行う必要があります。

実行時パーミッションとは、アプリが実際に機密性の高い情報を使用するタイミングで、アクセスのパーミッションを要求することです。こうすることで、アプリがそのパーミッションをなぜ要求するのか、その場でユーザーに説明を提示することができるようになります。これまでのように、インストール前に要求する可能性のある情報を全部長々と提示する必要はなくなるので、ユーザーを不安にさせません。

またパーミッションはグループに分類することもできるようになったので、ユーザーは技術的な難しい専門用語を理解していなくても、内容を理解したうえでパーミッションを与えるかどうかの判断を下すことができます。決定権をユーザーにゆだねることで、ユーザーはパーミッションを与えないこともできますし、以前に付与したパーミッションを取り消すこともできます。したがって、アプリ側で特に注意が必要な点は、拒否される可能性のあるパーミッションが必要な API 呼び出しに注意することと、パーミッションが拒否されてもそれ以外のアプリの機能を使い続けることができるようにエラー処理を工夫することです。

識別子の変更点

ユーザーの信頼を得るにあたってもう 1 つ重要な点は、入力されたデータを適切に処理する必要があることです。Marshmallow では、アプリのデベロッパーに許可していたデータへのアクセスが一部無効になっています。これは、デベロッパーが直接データにアクセスすることを防ぐためです。

最もわかりやすいのは、 ローカルの WiFi や Bluetooth の MAC アドレスへのアクセスが禁止されたことです。 WifiInfo オブジェクトの getMacAddress() メソッドと、BluetoothAdapter.getDefaultAdapter().getAddress() メソッドは、今後どちらも 02:00:00:00:00:00 という値を返すことになります。

ただし、 Google Play サービスではインスタンス ID が提供されており、デバイスで実行中のアプリケーションの各インスタンスは、この ID で区別します。インスタンス ID は、リセットできない端末固有のハードウェア ID に代わる信頼性の高い ID を提供します。インスタンス ID は、端末を出荷時の設定に戻すことでリセットできます。インスタンス ID のスコープは、アプリのインスタンスです。詳細については、Google Developers サイトのインスタンス ID とはを参照してください。

次のトピック

ユーザーがあなたのアプリを信頼するかどうかは、アプリの外観とそれを見た印象によって大きく左右されます。パーミッションや識別子の処理を誤ると、開発者が望んでいない、または意図していないトラッキングが行われるリスクが高まるので、ユーザーはそのアプリに対して、ユーザーに対する配慮に欠けているという印象を持つ恐れがあります。そこで、適切に動作するアプリの開発をサポートするため、以下のドキュメントを新たに公開しました。このドキュメントを活用すると、ユーザーにとって適切な動作のアプリであるかどうかをデベロッパー自身が確認することができます。
それでは、引き続きアプリ開発をお楽しみください。ユーザーがあなたのアプリを気に入ってくれますように。またそれが、あなたのアプリのレビューの評価値に反映されますように。

Posted by Yuichi Araki - Developer Relations Team


ニュース記事を提供しているメディアやコンテンツ提供者が、これまでのモバイル向けのウェブページに加えて、AMP HTML に準拠したウェブページを公開すると、Google のクローラーが AMP ページをキャッシュします。キャッシュされたコンテンツが検索クエリに関連が深いと判断された場合、検索結果にはキャッシュされたページの URL がリンクされます。検索結果に表示されたキャッシュ済みの AMP ページにユーザーがアクセスする場合には、キャッシュ済みのためコンテンツの取得までの時間が短く、また広告やアナリティクスといったタグは遅延読込されるため、記事の表示が瞬時に行われます。

すでに先日のブログポストで AMP ページの実装方法をご紹介しましたが、再度簡単に AMP ページの実装手順をご紹介します。なお AMP の仕様はまだ策定が進んでいる途中ですので、新規に対応される場合には常に GitHub にある最新の情報をご確認されることをおすすめします。

  1. AMP ページと正規版のページの URL の対応を検討する
  • 正規版の URL にパスを追加する 例) https://foo.com/article/amp/index.html
  • ファイル名に文字を追加する 例) https://foo.com/article/index.amp.html
  • URL パラメータを追加する 例) https://foo.com/article/index.html?amp
  • AMP ページ設置予定の URL に Google のクローラーがアクセスできるようにする
    • robots.txt を確認する
    • 正規版のページのメタタグに nofollow 等がないようにする
  • AMP HTML の仕様にしたがい、AMP ページを作成する
    • Required Markup の項目がすべてあるか確認する
    • Google の検索結果に表示されるためには schema.org に準拠したメタデータの付与が必要
  • validator を用いて AMP ページが正しくマークアップされているかいずれかの方法で確認する
    • URL に #development=1 というフラグメントをつけて Google Chrome の開発者ツールで確認
    • node.js 製の validator をコマンドラインで実行して確認する
  • Structured Data Testing Tool を使ってメタデータが正しく記述されているかを確認する
  • Search Console の AMP レポートツール を使って AMP ページがインデックスされているか確認する
    • Google のクローラー側でエラーを検出した場合はこちらでレポートされるのでよく確認する

    AMP プロジェクトはオープンソース プロジェクトであり、いまも多くの方々から多くの新機能や改善点がソースコードや Issue Tracker を通じて実装・提案され、随時取り入れられています。ぜひ Google 検索で AMP のスピードを体感してみてください。皆様の AMP プロジェクトへの参加と AMP ページのご対応を楽しみにお待ちしております!

    Posted by Yoshifumi Yamaguchi - Developer Relations Team


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


    Android Studio 2.0 は、正式な Android IDE の最新リリースです。ビルドのパフォーマンスとエミュレータのスピードに重点を置き、アプリの開発環境を改善します。今回のアップグレードの注目点は、コードの変更を速やかに編集し、表示できる Instant Run や、さらに高速になった Android エミュレータなどの新機能を備えた Android Studio 2.0 です。最終リリースの準備期間中は、ベータ リリース チャンネルで Android Studio 2.0 ベータ版をダウンロードできます。Android Studio 2.0 リリースには、次のような多くの新機能が実装されています。

    下の Android Studio Tool Time ビデオの最新の回をご確認ください。主要な機能について説明しています。


    Android Studio 2.0 ベータ版の新機能

    Instant Run

    11 月に最初の Instant Run プレビューが発表されました。今回の最新のベータ リリースでは、コールド スワップと呼ばれる新機能が導入されています。

    Android Studio 2.0 の Instant Run を使用すると、アプリを Android 端末または Android エミュレータで実行しながら、素早くアプリのコードを変更できます。Android Studio 2.0 では、コードを変更するたびにアプリ全体の再ビルドと再デプロイを待つ必要がなく、コードの増分やリソースの変更のみの増分的なビルドとプッシュを試行します。行ったコードの変更によっては、変更の結果を 1 秒以内に確認することも可能です。最新の Gradle プラグイン('com.android.tools.build:gradle:2.0.0-beta2’)を使用するようにアプリをアップデートするだけでこの機能を利用でき、時間を節約できます。他にコードを変更する必要はありません。プロジェクトが Instant Run を使うよう正しく設定されている場合、ツールバーの [Run] ボタンの横に稲妻のマークが表示されます。


    Instant Run ボタン

    Android Studio 2.0 は、アプリを初めてコンパイルしてデバイスにデプロイする際に、バックグラウンドでコードを監視しており、それに基づいてどのようにコードやリソースを入れ替えるかを決定しています。Instant Run 機能は、次のスワップ方法のいずれかを使用して、ベスト エフォート ベースでアプリをアップデートします。

    Instant Run は Android Studio 2.0 のファースト プレビューから大きく変更されており、より多くの種類のコードやリソースの変更に対応しました。さらに多くのコードの変更に対応できるよう、Android Studio の将来のリリースに向けて継続して改善される予定です。ご提案がある場合は、お気軽に機能リクエストをお送りください。また、Instant Run の詳細はこちらでご確認ください。


    App Indexing

    Android Studio 2.0 では、App Indexing のサポートがさらに簡単になりました。App Indexing を設定すると、Google 検索ユーザーはアプリを表示できます。これは、アプリのマニフェストで指定した URL パターンをインデックス化し、アプリからの API コールを使用して、アプリのコンテンツを既存ユーザーおよび新規ユーザーの両方に表示する仕組みです。特に、アプリ コンテンツの URL をサポートすると、ユーザーは自分のデバイスの Google 検索結果からこれらのリンクを直接開くことができます。



    App Indexing API コードのアプリへの挿入



    App Indexing のテスト



    App Indexing のテスト結果


    Android エミュレータ

    *ベータ版でアップデート* このベータ リリースには、高速になった新しい Android エミュレータの修正と小規模な機能強化も含まれています。中でも便利なのは、エミュレータ ツールバーの回転コントロールのアップデートです。マルチ タッチがサポートされているため、ピンチやズームの操作を使用するアプリを簡単にテストできるようになります。マルチ タッチ機能を使用するには、キーボードの Alt キーを押しながらマウスを右クリックして、基準となる点の中心を指定するか、左マウス ボタンをクリックおよびドラッグしてズームします。



    マルチ タッチによるピンチおよびズーム操作


    今後について

    Android Studio 2.0 は重要なリリースであり、ベータ リリースをチェックして新機能をワークフローに取り入れる絶好のチャンスです。ベータ リリースは品質の安定度にはほとんど問題がなく、バグはほとんど無いと思われます。しかし、一般的なベータ リリースと同様に、まだバグが存在している可能性があります。何らかの問題が見つかった場合はお知らせください。修正に取りかかります。Android Studio を既にご使用中の方は、ナビゲーション メニューからベータ チャンネルのアップデートを確認できます(Windows/Linux の場合は [Help] → [Check for Update]、OS X の場合は [Android Studio] → [Check for Updates])。ベータ版にアップデートすると、新しいバージョンの Android Studio と Android エミュレータにアクセスできるようになります。

    Google+ で Android Studio 開発チームからの情報を常にチェックしてください。

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

    コースは 4 つの講座で構成されており、画像認識からテキスト分析までの幅広い問題に対応するために使用される、主要な構成要素を順に説明していきます。最初の講座は、機械学習に精通した人にはなじみのある基本に重点を置いており、データと実験プロトコルをセットアップし、単純な分類モデルでトレーニングを行います。2 番目の講座は、最初の講座に続く形で構成され、最初に用いた単純なモデルを、より深くより強力にする仕組みを説明します。またその際に起こりうる拡張性にかかわるすべての問題を取り上げ、特に正則化とハイパーパラメータ チューニングについて説明します。3 番目の講座は、畳み込みネットワークに関するすべての事項と画像認識について、最後の 4 番目の講座では、一般的なテキストとシーケンスのモデルおよび、埋め込みと再帰型ニューラルネットワークについて説明します。コースを終えたときには、自分のマシン上でこれらの多様なモデルを実装し、その知識をご自身の問題を解決するために応用できるようになっているでしょう。

    本コースの目的は、機械学習ファンに対し、ディープ ラーニング手法で現実の興味深い問題を解決する近道を提供することにありました。このコースを共有できることを大変嬉しく思います。また、Udacity のオンラインコースデザイン・制作チームは素晴らしく、共同のコース制作は大変楽しいものでした。コースのさらなる詳細については、Udacity のブログ投稿コース概要をご覧ください。

    また本コースは、現在行われている、オンライン学習とコミュニティサポートを組み合わせた Study Jams プログラムの対象コースの 1 つです。同じコースを受講している仲間とディスカッションをしながら受講を進めてみませんか。参加申し込みをご希望の方は、Study Jams 特設サイト参加登録から「[上級] Deep Learning (ud730)」コースをご選択のうえお申し込みください。


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


    Fabulous は、デューク大学の先進後知恵センターで行われた研究から生まれたアプリです。このアプリは不適切な行動を慎み、健全な習慣を身に付けるための取り組みを始め、最終的にはユーザーが健全に幸福な暮らしを送ることを支援します。

    ユーザーはアプリ内で App Invites を活用し、自分の体験を友人や家族と共有しています。 今や App Invites によるインストール数は、招待によってFabulous アプリをインストールした数全体の 60% を占めるまでになっています。共有ボタンのクリック数も、App Invites が使われるようになってから 10% 増加しています。Fabulous のユーザー維持率にも増加が見られ、App Invites 経由でインストールしたユーザーの場合、アプリの顧客生涯価値 (LTV) は 2 倍になっているとのことです。Fabulous はシンプルなユーザー エクスペリエンスを実現しました。SMS と電子メールを1 つのインターフェースに統合したので、他のユーザーとのレシピの共有の操作が簡単になりました。

    さらに、App Invites 経由で獲得したユーザーは、他のチャンネル経由のユーザーよりも、アプリを使い続ける可能性が 2 倍になることも分かりました。

    Fabulous の最高技術責任者(CTO)の Amine Laddhari 氏は、「App Invites の導入はほんの 2~3 時間で完了しましたが、自力で同様のソリューションを構築した際は数日かかりました。とても分かりやすかったです」とコメントしました。

    Fabulous の事例詳細はこちらをご覧ください。


    Yummly は料理作りという行為を、パーソナル化した共有可能な体験ととらえている、レシピ検索プラットフォームです。ユーザー基盤を広げ、Android プラットフォーム上で認知度を高めることが望まれていました。Yummly は、ユーザーがこのアプリを家族や友人に紹介できるよう App Invites を導入し、特定のレシピやディナーのアイデア、買い物リストを共有する機能も追加しました。

    App Invites を使った場合のインストール率は、他の共有チャンネルに比較して約 60% 向上しました。 その上 Yummly は、Google Analytics とのシームレスな統合も活用しています。こうした統合機能を有し、招待の送信や承認、最終的なインストールの数といったデータを正確に追跡できる共有チャンネルは App Invites だけです。

    Yummly のプロダクトマネージャーである Melissa Guyre 氏は、「App Invites の統合プロセスはシームレスでした。Google Analytics との連携による秀逸な追跡機能は、思いがけない特典でした」とコメントしました。

    Yummly の事例詳細はこちらをご覧ください。

    App Invites は Android と iOS に対応しています。App Invites をアプリに組み込む方法は g.co/appinvites をご覧ください。

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


    コホート レポートで変更の効果や新規ユーザーによる累積値を計測し、比較する

    コホート レポートを使用すると、セッション、累積購入額、カスタム イベントなどの任意のイベントについて、新しいユーザーのコホートによる累積イベント値と比較できます。これは、ゲームモデルを決定する際に、その影響を分析できる貴重な情報となります。たとえば、変更前にゲームを開始したユーザーと、変更後にゲームを開始したユーザーを考察できます。変更の効果を計測または比較できるため、ゲーム内ストアでアイテムすべてを 2 倍の価格に設定した場合、変更後にゲームを開始したセッションの累積数が、変更前にゲームを開始したユーザよりも多くなったか、少なくなったかを確認することもできます。


    C++ および iOS SDK と Unity プラグインのアップデートによる Player Stats API のサポート

    C++、iOS SDK、Unity プラグインがアップデートされ、基本的なプレイヤーの統計、購入、離脱の予測を含む Player Stats API がサポートされるようになりました。サンプル ゲームを確認し、Play Games Services の詳細をご覧ください。ゲーム開発会社 Auxbrain が明かす、Google Play ゲームサービスで成功するための秘けつもご覧いただけます。

    Posted by Khanh LeViet - Developer Relations Team
    Share on Twitter Share on Facebook


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


    図 1.第三者が偽の電子メールでサーバーにアクセス可能


    これはユーザー エクスペリエンスが悪いというだけではなく、顧客データが盗まれ、悪用されるというリスクの問題でもあります。これを防ぐため、ユーザーがアプリにサインインする際に Google からトークンを取得し、このトークンをサーバーに渡すようにします。サーバーは、このトークンが本当に Google がそのアプリの正規ユーザー宛てに発行したものかどうかを確認します(オーディエンス設定に基づいて実行します。下図参照)。この時点でサーバーは、サインインしようとしているのがこのアプリの正規ユーザーであり、不正な攻撃者ではないことを確認できます。その後、サーバーは要求された詳細情報を返します。


    図 2.第三者の偽のトークンを拒否する

    このステップを見てみましょう。

    ステップ 1: Google にサインインすると、Android アプリは ID トークン(*)を取得します。こちらはこのプロセスの一例です。これを実行するには、GoogleSignInOptions オブジェクトを作成するときに requestIdToken メソッドを呼び出します。

     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)  
             .requestIdToken(getString(R.string.server_client_id))  
             .requestEmail()  
             .build();  
    
    これには、サーバーのクライアント ID を取得する必要があります。この方法についての詳細は、こちらをご覧ください(ステップ 4 を参照)。

    Android アプリで取得されたトークンは、HTTPS でサーバーに POST できます。次にサーバーはトークンを認証します。

    (*)ID トークンは JSON Web Token であり、RFC7519 で定義されています。これは二者間の要求を安全に表現するためのメソッドであり、業界標準として公開されています。

    ステップ 2: サーバーは Android クライアントからトークンを受け取ります。次にサーバーは、Google API Client ライブラリで提供されているメソッドを使用してこのトークンを認証します。このトークンが Google によって発行されたものであること、そして対象オーディエンスがこのサーバーであることが認証されます。

    サーバーは GoogleIdTokenVerifier クラスを使ってトークンを認証し、その後、要求された識別情報データを抽出します。「sub」フィールド(getSubject() メソッドで取得する)では、安定した文字列識別子を取得できます。これを使用すれば電子メールアドレスが変更された場合でもユーザーを認証でき、データベースでユーザーを特定できます。ID トークン フィールドには他にも、名前、電子メールアドレス、写真へリンクされた URL などが利用できます。提供されたライブラリを使用してトークンを確認できる、Google App Engine でテスト済みのサーブレットのサンプルはこちらから入手できます。これらのライブラリを使えば、ネットワーク呼び出しがなくても、トークンをローカルで認証できます。

     GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)  
          // Here is where the audience is set -- checking that it really is your server  
          // based on your Server’s Client ID  
          .setAudience(Arrays.asList(ENTER_YOUR_SERVER_CLIENT_ID_HERE))  
          // Here is where we verify that Google issued the token  
          .setIssuer("https://accounts.google.com").build();  
     GoogleIdToken idToken = verifier.verify(idTokenString);  
     if (idToken != null) {  
          Payload payload = idToken.getPayload();  
          String userId = payload.getSubject();   
          // You can also access the following properties of the payload in order  
          // for other attributes of the user. Note that these fields are only  
          // available if the user has granted the 'profile' and 'email' OAuth  
          // scopes when requested. Even when requested, some fields may be null.  
          // String email = payload.getEmail();  
          // boolean emailVerified = Boolean.valueOf(payload.getEmailVerified());  
          // String name = (String) payload.get("name");  
          // String pictureUrl = (String) payload.get("picture");  
          // String locale = (String) payload.get("locale");  
          // String familyName = (String) payload.get("family_name");  
          // String givenName = (String) payload.get("given_name");  
    
    GoogleAuthUtil を使用してバックエンドに渡すトークンを取得している既存アプリをお持ちの場合、上記のような最新の ID トークン認証を行うライブラリやシステムに切り替える必要があります。サーバー側でのベスト プラクティスを実現するための推奨事項は、今後の記事でご紹介する予定です。

    この記事では、認証テクノロジーを使用して、ユーザーの本人認証を行う方法を説明しました。次回の記事では、Google Sign-In API を認証に使用して、ユーザーがアプリやバックエンド サービスから Google ドライブ などの Google サービスへアクセスする方法などを説明する予定です。

    Google の認証テクノロジーについての詳細は、デベロッパー向け Google Identity Platform サイトをご覧ください。

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

    Google Location Services on Android【中級】
    最適なモバイル経験を提供するためには、位置や状況にあわせてアプリをより良いものにすることが不可欠です。このコースでは、Location/Context API を活用して、位置情報に基いたアプリを作る方法を学びます。Fused Location Providerを使った実装、ユーザーが何をしているかを知ることができる Activity Recognition、 拡張現実でも利用されるGeofence について解説します。【目安学習期間】 2 週間
    Google Analytics for Android【中級】
    世界のどこで人々はこのアプリを利用しているのか、そして彼らはどのような時にアプリを利用するのか。このコースでは、利用状況に関するデータを Google Analytics に送信し、そのデータを分析する方法について学びます。合わせて、Google タグマネージャの利用方法も解説します。【目安学習期間】 2 週間
    Monetize Your Android App with Ads【中級】
    このコースでは、AdMob を利用してアプリをマネタイズする方法を学びます。なお、このコースを最大限に活用するには、Android アプリケーションの開発経験を持っている必要があります。
    【目安学習期間】 2 週間
    Add Google Maps to your Android App【中級】
    モバイル デバイスで用いる地図は、近年、私たちの日常生活を大きく変え、私たちはいつでもローカルな地図から世界地図までを道一本に至るまで見ることができるようになり、3D の画像 で主要都市を飛び交うことも可能になりました。Android 開発者として地図機能をビルド、または拡張したいと考えている方におすすめのコースです。【目安学習期間】 2 週間
    Add Google Sign-In to your Android Apps【中級】
    このコースでは、Google Identity Platform の利用方法を学びます。Google Identity Platform を利用することによって、ユーザーのクレデンシャルを利用したサインインを許可したり、アクセス許可を承諾したデータへのアクセスの方法を学びます。サンプルアプリから、皆さんのアプリにこのサービスを拡張する方法も紹介します。【目安学習期間】 2 週間

    Study Jams への参加をご希望される方は、こちらからお申し込みください。

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


    Google は Udacity と共同で Promises のオンライン コースを開発し、公開しました。これは、約 1 日で完結する短時間のコースで、Promises を使ってライブデータの読み込みと表示を行う「Exoplanet Explorer」アプリの構築が体験できます。Fetch API の使い方も学べるので、このコースを終えれば、XMLHttpRequest とはお別れです。

    この短期コースはシニア ウェブ デベロッパー Nanodegree コースの 必須科目でもあります。Nanodegree コースの受講は有料ですが、本コースを単体で受講する場合は無料です。どちらかのコースを受講して、コードをよりシンプルに、信頼性を高くする方法を本日から学びませんか。

    無料コースのお申し込みはこちらから。

    ※ 無料コースのご受講は、Udacity の受講を推進する Study Jams プログラムの一貫となります。上記の Study Jams 申し込みフォームに必要事項をご記入いただき、参加コースを「[上級] JavaScript Promises (ud898) 」としてご登録ください。その後、Udacity コース申し込みリンクをお送りします。 

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

    Android Development for Beginners【初級】

    Android アプリを構築する方法を学びたいがプログラミングは初めてという方、もしくはプログラミング経験はあるけれど、Android アプリの構築は初めてという方を対象としています。このコー​​スでは、2 つの簡単なアプリケーションを作成します。Android アプリ開発者になるためのスタートとしてこのコースはきっと役に立つでしょう。3 レッスン +  2 演習から構成されます。【目安学習期間】4 週間
    Developing Android Apps【中級】

    Android の基礎を、理論と実践の両面から学ぶことで、優れたアプリを構築するスキルを習得することができます。6 レッスン +  1 プロジェクトを通じて、ステップバイステップで Android アプリを開発するための最良の方法を実践的に学びます。Java、またはその他のオブジェクト指向プログラミング言語(例: C++、Objective C 、Pythonなど)の経験が 1 年以上ある方を対象としています。【目安学習期間】10 週間
    Advanced Android App Development【上級】


    このコースでは、中級コース「Developing Android Apps」で作成したお天気アプリ「Sunshine」を利用して、Android アプリの製品化プロセスを学びます。Android のアプリ品質ガイドライン、マテリアルデザイン、イメージのハンドリング、プロファイリングなどについても触れます。Android の開発者として、ユーザーに利用してもらえる製品レベルのアプリを作るための方法を学ぶことができます。少なくとも1〜2年のJava の経験および Android アプリの開発経験が必要です。【目安学習期間】6 週間


    なお、初級コースには日本語字幕がついています。スマートフォンでもなじみのある Android アプリ。この機会に、アプリ開発に挑戦してみませんか。

    Study Jams への参加をご希望される方は、こちらからお申し込みください。

    Posted by Takuo Suzuki - Developer Relations Team

    Share on Twitter Share on Facebook

    デベロッパー向けサンプル アプリで 3D オーディオを体験


    Android サンプル アプリ(デベロッパーの参照専用)の体験版を使用して、Cardboard デベロッパー向けサイトのドキュメントを読み、3D オーディオを今すぐ実感してください。デベロッパーの皆さんが創り出す新しいエクスペリエンスを見る(そして聴く)のを楽しみにしています。

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

    OS / Hardware は何を使っていますか?

    El Capitan の Mac をメインで使ってます。最近は、週の半分 Windows も使っています。Microsoft Surface Pro 3 の Windows 10 です。
    ブラウザはすべてのチャンネルの Chrome、Firefox の Stable と Nightly、Opera も Stable と Next、Safari と WebKit Nightly を使っています。Mac の VM には Windows 7、8.1、10 を入れて、なるべく多くのバージョンの IE と Edge を試せるようにしています。

    Mac で使っているツール類を教えてもらえますか?

    Alfred

    Alfred は欲しい物をすぐに探せるプロダクティビティツールです。ショートカットを設定することでアプリケーションのコントロールができたりします。プラグインに巨大なエコシステムがあって、例えば Zeno Rocha のプロジェクト alfred-workflows で便利なプラグインを多数ダウンロードすることができます。
    SublimeText のプラグインはもちろん、Package Managers では、npm、bower、gulp などのパッケージやプラグイン、CanIUse など、手先の操作でいろんなものを検索して利用することができます。他にも Colors で色のプレビューをしたり、Dashドキュメントを検索したりといったこともできます。

    Spotlight / Flashlight

    Alfred の代替として最近注目しているのが Spotlight です。Spotlight は Mac 標準の検索ツールで、Yosemite で Apple が大幅な機能追加をしたことで、Alfred の基本的な機能と同程度であれば、これで十分使えます。Flashlight というアプリを使えば、Spotlight にプラグインアーキテクチャを持ち込むことができるので、ウェブサイト内を検索をしたり、ノートを取ったり、リマインダーを設定したりといったことが Spotlight 内でできるようになります。

    BetterTouchTool

    BetterTouchTool は Mac 用のトラックパッドで、ジェスチャーをカスタマイズできるツールです。例えば 2 本指で横にスワイプするジェスチャーで Chrome のような特定のアプリを起動するといった用途に使うことができます。Yosemite のデフォルト設定よりもパワフルなのが特徴です。

    Spectacle

    最近はウィンドウ管理も重要になってきています。小さな画面を有効に活用するためには、画面をうまく分けたいですよね。そんな時に使えるのが Spectacle です。キーボードショートカットと組み合わせて使うことが多いのですが、みんなが使いたいようなオプションは大体揃っています。画面の左右半分に表示したいとか、そんな場面に便利です。

    Sip

    私はデザインすることもあるのですが、アプリやデモ、プレゼンテーションなどで適切なカラーパレットを使う必要があります。システムワイドで使えるカラーパレットツールとして使っているのが Sip です。最後に使った色のセットを覚えておいてくれるところが便利です。また、設定項目がたくさんあって、どんな色の組み合わせをデフォルトにしたいのかを選ぶことができます。今となっては Chrome 本体の DevTools が Color Picker 機能を提供しているので、以前と比べて使う機会は減りましたが、それでも便利なツールです。

    Sketch + Framer.js

    プロトタイピングとデザインをするのに使っているのは、Bohemian Coding の Sketch です。複数アートボード、ベクター、SVG 出力、グリッドなどのサポートが充実しているため、Framer.js と合わせて愛用しています。Framer.js は CoffeeScript に似たハイレベル言語を使ってモーションプロトタイプが作れるツールです。実はこれ、Google のデザイナーの間でもすごく人気で、広く使われています。例えばこの Material Design Contacts のサンプルアプリを見てみると、ただのプロトタイプにも関わらず、ブラウザでスクロールの動作を試すことができます。Framer.js がコピーペーストできるコードを生成してくれるわけではありませんが、デザイナーはこれをデベロッパーに渡すことで、最終的なコードを書いてもらうことができます。

    Dr.Cleaner

    たくさんのアプリを立ち上げていると、メモリ不足が問題になることがあります。TrendMicro が提供している無料の Dr.Cleaner を使えば、メモリとディスクの使用量を最適化してくれます。

    Mou

    ブログポストを書く時、Markdown アプリの Mou を使っています。Mou はシンプルな UI で、片側にソース、もう片側にプレビューを表示します。コードのハイライト機能もあります。HTML、PDF へのエクスポートにも対応していて、Tumblr にもポストできます。私はこれでポストを Google Drive や Dropbox に保存しています。もちろん GitHub Flavored Markdown にも対応しています。

    ImageOptim

    開発者ならフル解像度の画像を受け取るケースが多いと思います。ビルドプロセスでデバイスに合わせた解像度の最適化ができるのがもちろん良いのですが、ちょっとだけ試したい場合もありますよね。そういった時に使うのが ImageOptim です。PNGOut や PNGCrush、OptiPNG など、最新のツールもサポートしています。

    Chrome Extension は何を使っていますか?

    SnappySnippet

    SnappySnippet は DOM から直接 CSS や HTML を抜き出すことができる拡張機能です。例えばあるページにとても素敵なボタンがあって、それがどうやって作られているのか知りたいと思ったとします。そんな時にこれを使って DOM ノードを選択すると、再現するのに必要な CSS と HTML を抜き出してくれる、というわけです。また、JSBin のような別サーバーへの送信機能もサポートされています。

    DOMListener

    TodoMVC のテストに DOMListener が大活躍しています。これは DOM の変更点を監視、ブラウズ、フィルタすることができる拡張機能です。DevTools の Timeline  で変更点を監視するのによく似ていますが、DOMListener では同じことを DOM の変更に対して行うことができます。例えばシングルページアプリケーションで 新しい UI ピースを挿入したり、新しいビューを差し込んだりした場合、どんな DOM コンテントが追加されたのか、スタイルやテキストコンテントが追加されたのか、確認したり、フィルターすることもできます。これによりデバッグが非常に簡単になります。問題が発見できたら、DevTools に戻ってくる、というワークフローはとても便利です。

    The Great Suspender

    これはある意味私の生活を変えた拡張機能です。Chrome チームが消費メモリーの最適化に取り組んでいることはご存知と思います。作業は順調に進んでいるようですが、そうしている間にも、私のようにタブを大量に使う人間にとっては、これらのタブを消す必要があります。そこで役立つのが The Great Suspender です。
    これはタブを一定時間後に自動的に一時停止することで、Chrome のメモリや GPU のフットプリントを削減してくれるツールです。例えば 50 個のタブが開いていたとしても、実際に同時に使うのは 2 〜 3 個です。この拡張機能はそういったタブを軽量のプレースホルダーページに置き換え、Chrome が表示する必要のないページを見せないことでメモリーの消費を抑えてくれるものです。そしてバッテリーにも優しい。使い続けたいタブに戻ると、リロードするリンクが表示され、その URL に戻ることができます。
    この拡張機能に何より感謝しているのは、そういったタブに自分が滅多に戻らないということを教えてくれたことです。ページを開いても、実際に自分がそこに戻ることは非常に少ないということに気付かせてくれました。

    Page Ruler

    Page Ruler は Polymer チームの同僚がおすすめしてくれた拡張機能です。あるページを開いていて、何かのサイズを測りたい場合は、クリックしてエリアを選択するだけ。画面下部にバーが表示されて、幅や高さ、上下左右位置といった様々なサイズ情報を教えてくれます。もちろんガイドを表示するかも選ぶことができます。


    全二回のインタビューの前編として、今回はツール編をお届けしました。後編は開発環境編として、エディタやプラグイン、シェルについてのインタビューをお届けします。


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