[go: nahoru, domu]

この記事は Google Cloud プロダクト マネージャー、Christiaan Brand による Google Online Security Blog の記事 "Using a built-in FIDO authenticator on latest-generation Chromebooks" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

先日、最新世代の Chromebook の Chrome 76 以降で、ハードウェアベースの Titan セキュリティを活用したビルトイン FIDO 認証システムを有効にするオプションが提供されることをお知らせしました。企業の管理者は、サポート対象となるサービス(例: G Suite、Google Cloud Platform)において、エンドユーザーが端末の電源ボタンを使って特定の種類のアカウント乗っ取り攻撃を防ぐ操作を許可できるようになりました。ただし、この機能はデフォルトで無効になっています。管理者は、Google 管理コンソールで DeviceSecondFactorAuthentication ポリシーを変更して有効化できます。

この機能について詳しくご説明する前に、まずは FIDO テクノロジーによって解決できる主なユースケースを見てみましょう。続いて、この新しい拡張機能が企業の組織をサポートできる高度な要件をどのように満たしているのかについて確認します。

主なユースケース

FIDO テクノロジーは、以下をサポートすることにより、リライング パーティ(インターネット サービスとも呼ばれます)が 3 つの個別のユースケースに関する問題を解決することを目指しています。
  1. 新しい端末でサービスに初めてログインする際のフィッシング攻撃を防ぐ。
  2. 既にログインしている端末で、サービスに対してユーザーが本人であることを再検証する。 
  3. ユーザーが接続に使っている端末が以前にログインした端末と同じであるかを確認する。通常、これは企業で必要とされる。 
セキュリティのプロなら、3 番目のユースケースを 2 番目の特殊な例と解釈するかもしれません。しかし、この 2 つにはいくつかの違いがあります。次に示すのは、その点に少し踏み込んだ内容です。
  • ケース 2 で FIDO テクノロジーが解決しようとする問題は、端末に格納された秘密鍵のロックを解除してユーザーが本人であることを再検証することです。
  • ケース 3 では、FIDO テクノロジーは以前に作成したキーが元の端末にまだ存在するかどうかを確認します。その際、ユーザーが誰であるかという証拠は一切使われません。

ユースケース 1 の仕組み: ローミング セキュリティ キー

このユースケース全体が今まで認証したことのないまったく新しい端末にログインする前提なので、ユーザーが FIDO セキュリティ キー(取り外し可能、クロスプラットフォーム、またはローミング認証システム)を持っている必要があります。この定義によれば、Chrome OS 端末のビルトイン FIDO 認証システムはこの要件を満足できません。以前に設定されていない限り、ユーザーが本人かどうかを検証できないからです。初回のログイン時に、ユーザーが本人かどうかは、以前にアカウントに結びつけられたセキュリティ キー(Google の Titan Security Key など)が存在することによって検証されます。
Titan Security Key 


ユーザーのログインが成功すると、セキュリティ キーはユーザーがログインした端末を信頼します。通常、Cookie などのトークンを端末に配置することによって、この端末で既にユーザーが 2 要素目の認証を済ませていることをリライング パーティが「覚えておける」ようにします。この手順が完了すると、この端末で物理的な 2 要素目を要求する必要はなくなります。Cookie が存在することは、リライング パーティにとってこの端末が信頼できるという証しだからです。

必要に応じて、既に認識されている端末(たとえば金融サービス企業など、特に機密性が高く規制が厳しいサービス)のユーザーが正しいユーザであるかを検証することを定期的に要求するサービスもあるかもしれません。ほぼすべての場合、再認証の際に知識要素(パスワードなど)に加えて 2 要素目も再提示することを求める必要はないでしょう。この操作は既に初回認証で行っているからです。

なお、Chrome OS 端末では、ログインしていないときのデータは暗号化されます。これにより、悪意のあるアクセスに対してデータの保護を強化できます

ユースケース 2 の仕組み: 再認証 

ユースケース 2 はよく「再認証」と呼ばれ、同じユーザーが以前に検証した端末からサービスを使用していることをリライング パーティが再検証できるようにするものです。主にこれが発生するのは、パスワードの変更など、特に機密性が高いアクションを実行する場合や、金融サービス企業などの規制が厳しいサービスを使用する場合です。この場合、ビルトインのバイオメトリック認証システム(例: 指紋認証センサー、Android 端末の PIN など)を登録できます。こういった認証システムは、対象のサービスに対してユーザーが本人であることを簡単に再検証できる方法を提供します。実際、Android 端末では、いくつかの Google サービスに対してこのユースケースが最近有効化されました

さらに、こういった特定のソリューションには、セキュリティ面のメリットが存在します。つまり、リライング パーティは以前に発行された Cookie だけを信頼する必要はなく、(バイオメトリックを通して)適切なユーザーが存在することや、特定の端末で特定の秘密鍵が利用できることを検証できます。この検証は、ハードウェアに格納された鍵マテリアル(例: Pixel Slate の Titan セキュリティ)に基づいて行われることもあります。これは、リライング パーティを利用しているのが適切な端末の適切なユーザーであることを示す強力な要素になり得ます。

ユースケース 3 の仕組み: ビルトイン端末認証システム

最新世代の Chromebook のビルトイン FIDO 認証システムは、ユーザーが以前にログインした端末とリライング パーティを使用している端末が同じであるかを検証する際の課題を解決するために役立ちます。

先ほど、ユーザーが以前に認証されたことを覚えておくために、リライング パーティは初回のログイン時に Cookie やトークンをユーザーの端末に配置するのが一般的だと説明しました。端末に不正なソフトウェアが存在するなど、状況によっては、このトークンが持ち出される可能性もあります。定期的に「ビルトイン認証システムのタッチ」を求めれば、リライング パーティは以前にトークンを発行した正しい端末からの操作であることを認識できます。また、FIDO 認証システムは秘密鍵の持ち出しに対する保護が強化されているので、トークンが別の端末に持ち出されていないことを検証する際にも役立ちます。そのため、このシステムはハードウェア自体に格納されるのが一般的です。たとえば、最新世代の Chromebook(例: Pixel Slate)の場合、ハードウェアベースの Titan セキュリティによって保護されています。

Pixel Slate 端末にはハードウェアベースの Titan セキュリティが組み込まれている 

Chrome OS の実装では、FIDO の鍵のスコープは特定のログイン ユーザーに制限されています。つまり、実質的に端末上のすべてのユーザーにそれぞれ独自の FIDO 認証システムが必要で、ユーザーは境界を越えたアクセスはできません。このユースケースは、企業環境にとりわけ役立つと考えています。この機能がデフォルトで有効になっていないのはそのためです。管理者は、Google 管理コンソールを使って有効化できます。

ユーザーには、Titan Security KeyAndroid スマートフォン などのプライマリ FIDO セキュリティ キーを持つことを強くおすすめします。これは、G Suite でサポートされている「FIDO 再認証」ポリシーと組み合わせて使うとよいでしょう。
Google 管理コンソールでビルトイン FIDO 認証を有効化する

ビルトイン FIDO 認証システムをサービスの「セキュリティ キー」として Chrome OS 端末に登録することも技術的には可能ですが、別のマシンからサービスにログインする必要が生じた際にアカウントがロックアウトされるリスクが増すことになるので、避けた方がよいでしょう。

サポート対象の Chromebook

最新世代の Chromebook の Chrome 76 以降で、ハードウェアベースの Titan セキュリティを活用したビルトイン FIDO 認証システムを有効にするオプションが提供されます。Chromebook でこの機能を有効にできるかどうかを確認するには、chrome://system に移動して「tpm-version」エントリを確認します。「vendor」が「43524f53」であれば、Chromebook で Titan セキュリティが使われています。

Chromebook で chrome://system に移動する

まとめ

端的にご説明すると、この新しい拡張機能は、ユーザーが接続に使っている端末が過去にログインした端末と同じであることを確認したい企業に価値を提供できると、私たちは確信しています。しかしほとんどのユーザーは、アカウントのロックアウトを回避するために、Titan Security KeyAndroid スマートフォン、または他のベンダーのセキュリティ キーなどのローミング FIDO セキュリティ キーを使うべきです。

Reviewed by Eiji Kitamura - Developer Relations Team

この記事は G Suite デベロッパー アドボケート、Wesley Chun(@wescpy)による Google Developers Blog の記事 "Hangouts Chat alerts & notifications... with asynchronous messages" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

ほとんどのチャットボットは、ユーザーのリクエストに同期的に応答しますが、アラートや通知など、ユーザーの明示的なリクエストに基づかないアクションを行う場合もあります。本日の DevByte 動画では、G Suite のチーム コラボレーションおよびコミュニケーション ツールである Hangouts Chat で、 非同期的に ルームやダイレクト メッセージ(DM)にメッセージを送信する方法を紹介します。

チャット ルームのボットを考えるとき、何が思い浮かぶでしょうか?ユーザーは、直前の四半期のヨーロッパでの販売数や、近隣の天気、次の映画上映時間を知りたいのかもしれません。何らかのリクエストに対応するボットがあるとすれば、ユーザーが行うのは、そのボットにダイレクト メッセージ(DM)を送るか、チャットルーム内でボットに @ メンションすることです。すると、ボットは(Hangouts Chat サービスからボットに送られた)リクエストに対応し、必要な処理を行った上で、その「スペース」(ルームまたは DM を表す汎用的な用語)でユーザーに応答します。

Hangouts Chat ボット フレームワークに関する以前の DevByte 動画では、ボットやフレームワークとは何かということに加え、Python と JavaScript の両方でこのタイプのボットを作る方法について説明しました。しかし、こういったボットはユーザーのリクエストに同期的に応答します。長時間にわたって実行されるバックグラウンド ジョブが完了したとき、遅れていたバスや列車がまもなく到着するとき、あるいはサーバーのうち 1 台がダウンしたときにユーザーが通知を受けたいような場合には、この方法は十分ではありません。このようなアラートは、ボットから送ることもできますが、モニタリング プログラムから送ることもできます。G Suite Dev Show の最新エピソードでは、この機能を両方のタイプのアプリケーションに組み込む方法について学習します。



動画を見ると、アラートや通知はいつでも着信する可能性がある「アウトオブバンド」メッセージであることがわかります。Hangouts Chat ボット フレームワークは、まとめて「スペース」と呼ばれるルームや DM に対して非同期メッセージを送るいくつかの方法を提供しています。最初の方法では HTTP ベースの REST API を、もう 1 つの方法では「着信 Webhook」と呼ばれるものを使います。

REST API は、ボットがスペースにメッセージを送るために使います。ボットは決して人間のユーザーではないので、Google サービス アカウントが必要になります。デベロッパー コンソールで Hangouts Chat ボット用のサービス アカウントを作成すると、API との通信に必要な認証情報をダウンロードできるようになります。次に示すのは、API を使ってスペースに対して非同期的にメッセージを送信する簡単な Python のサンプル スニペットです。
from apiclient import discovery
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials

SCOPES = 'https://www.googleapis.com/auth/chat.bot'
creds = ServiceAccountCredentials.from_json_keyfile_name(
        'svc_acct.json', SCOPES)
CHAT = discovery.build('chat', 'v1', http=creds.authorize(Http()))

room = 'spaces/<ROOM-or-DM>'
message = {'text': 'Hello world!'}
CHAT.spaces().messages().create(parent=room, body=message).execute()

API とサービス アカウントの代わりに使うことができるのが、着信 Webhook という考え方です。Webhook を使うと、完全なボット(モニタリング アプリ)を設定しなくても、任意のルームや DM に対してすばやく簡単にメッセージを送ることができます。さらに、Webhook は、会社の CRM(顧客管理システム)に新規顧客が追加された場合や、前述のさまざまなタイミングで実行されるカスタム ワークフローに組み込むこともできます。次に示すのは、着信 Webhook を使って非同期的にスペースと通信する Python スニペットです。
import requests
import json

URL = 'https://chat.googleapis.com/...&thread_key=T12345'
message = {'text': 'Hello world!'}
requests.post(URL, data = json.dumps(message))

着信 Webhook は単なる HTTP POST エンドポイントなので、コマンドラインから curl を使って Hangouts Chat スペースにメッセージを送ることもできます。
curl \
    -X POST \
    -H 'Content-Type: application/json' \
    'https://chat.googleapis.com/...&thread_key=T12345' \
    -d '{"text": "Hello!"}'

試してみたい方は、Hangouts Chat デベロッパー ドキュメント、特に上記の説明でリンク先となっているページをご覧ください。この動画で説明している Hangouts Chat サービスに非同期的にメッセージを送信する方法が、皆さんのボット開発スキルの向上に役立つことを願っています。


Reviewed by Eiji Kitamura - Developer Relations Team

この記事は App Maker デベロッパー アドボケート、Christian Schalk による Google Apps Developer Blog の記事 "Getting started with App Maker: a detailed walkthrough" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

先日、App Maker を一般公開しました。App Maker は、コードをほとんど書く必要がない G Suite 向けの新しい開発環境です。App Maker を使用して、ビジネスに使えるさまざまなアプリをビルドしたり、プロセスをカスタマイズして効率を向上させたりできます。

App Maker でアプリをビルドすることは簡単です。アプリのバックエンド データを宣言的に定義し、UI の外観をデザインし、コードによるカスタム動作を追加して(オプション)、アプリを迅速に公開できます。

概要を理解していただくために、次に、App Maker の主要なアプリ開発機能の簡単なチュートリアルを示します。

データ バックエンドの作成 

App Maker では、バックエンド データモデルが宣言的に作成されるため、多くのデータベース コードを記述する必要はありません。次の App Maker データモデルがサポートされます。
  • Cloud SQL - Google Cloud SQL に接続します(GCP アカウントが必要です)。 
  • Calculated - スクリプトまたは SQL で計算された仮想モデル。外部データ(JDBC、REST)にも接続します。 
  • Directory - 組織に関するデータを取得します。

データモデル フィールドを作成するには、ゼロから作成するか、既存の CSV または Google スプレッドシートを使用します。
データモデルの構造を定義した後、検証ルールを挿入して、保存可能なデータを制限することができます。
App Maker の Relation Editor を使用すると、データモデル間の関係(1 対多や多対多など)を簡単に作成できます。
App Maker のモデルエディタでは、カスタムクエリフィルタの設定、ロールに基づいたデータアクセスの保護、実行に基づいたデータイベントのトリガーなど、その他のさまざまな機能が提供されます。詳細は、データモデルのドキュメントをご覧ください。

UI のデザイン 

App Maker には、UI 要素(ウィジェット)をキャンバスにドラッグ&ドロップしてから、Property Editor を使用してウィジェットのプロパティを設定できる視覚的なデザイン環境が用意されているため、UI の開発を効率化することができます。必要に応じて、UI をより迅速に開発できるように、便利な UI 生成ウィザードを使用して、編集または挿入フォーム、表、さまざまなグラフなどが含まれた既成の UI 構造を作成することもできます。
UI の外観と操作性は CSS によって制御され、デフォルトでは、Google のマテリアル デザイン標準に準拠しています。エディタでは、さまざまなバリエーションのスタイルが利用できるため、プルダウン メニューを介して、または CSS を直接編集することにより、ウィジェットがレンダリングされる方法を簡単に切り替えることができます。

UI は App Maker のデータ バインディング機能を介してバックエンド データに結びつけられます。作成者はこの機能を使用して、ウィジェットのプロパティをデータモデル フィールドに結びつけることができます。

視覚的なデザイン、データ バインディング、Google マテリアルをデフォルトとして使用する CSS UI のスタイルを組み合わせることで、生産性の高い UI を作成できるようになります。App Maker の UI のコンセプトに関する詳細は、UI ドキュメントをご覧ください。

コードによるアプリの改良 

データベース通信や UI デザインに関しては、App Maker が煩雑な作業をすべて処理しますが、アプリの動作のカスタマイズが必要になる場合があります。このとき、App Maker のスクリプト機能が役立ちます。

App Maker で使用されるスクリプト言語は、ブラウザ(クライアント)とサーバーの両方で使用される JavaScript です。サーバーのランタイム環境は Apps Script です。このランタイム環境により、G Suite サービスの膨大なライブラリへのアクセスが提供され、Gmailドキュメントスプレッドシートカレンダー、その他のサービスの一般的な操作が実行されます。

App Maker には、便利なコード補完機能を備えた直感的に使用できるコードエディタが用意されているため、コードを記述するプロセスが効率化されます。
さらに、App Maker では、構文エラーのハイライト表示に加えて、インタラクティブな警告 / エラー表示機能が提供されています。App Maker のコーディング関連トピックの詳細については、スクリプトに関するドキュメントをご覧ください。

アプリのプレビューと公開 

最後になりましたが、App Maker には、アプリを自分ですばやくテストできる、使いやすいプレビュー機能が用意されています。アプリをユーザーに公開する準備ができたら、App Maker の包括的な公開(またはデプロイ)機能を利用できます。アプリのプレビューと公開の詳細については、公開ガイドをご覧ください。

すぐに App Maker を試してみる 

App Maker の機能の概念を把握できたら、App Maker コードラボに挑戦してみてください。注: G Suite Business / Enterprise または G Suite for Education を介して、自分のドメインで App Maker を有効にする必要があります。
App Maker についてさらに詳しく知りたい方は、developers.google.com/appmaker にアクセスするか、最新情報にご注目ください。


Reviewed by Eiji Kitamura - Developer Relations Team

この記事は G Suite デベロッパー アドボケート、Wesley Chun(@wescpyによる Google Developers Blog の記事 "Developing bots for Hangouts Chat" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

先日、Hangouts Chat一般公開しました。この次世代のメッセージング プラットフォームは、チーム内でコミュニケーションを取って連携する新たな場を G Suite のユーザーに提供します。また、アーカイブと検索、より緊密な G Suite の統合、個別のスレッド化されたチャットルームを作成する機能を備えています。デベロッパー向けの新しい重要な機能として、ボット フレームワークおよび API が組み込まれています。ボットの使用により、一般的なタスクの自動化、情報の照会、その他の負荷のかかる作業の実行など、私たちの仕事の方法を大きく変えることができます。

Hangouts Chat では、書式なしテキストによる応答に加えて、 カードと呼ばれる高機能なユーザー インターフェース(UI)を使ったボット応答を表示することもできます。 この応答では、ヘッダー情報、構造化データ、イメージ、リンク、ボタンなどがレンダリングされます。さらに、ユーザーはこれらのコンポーネントを操作して、表示されている情報をアップデートすることもできます。G Suite Dev Show のこの最新のエピソードをご覧いただくと、アップデート可能なインタラクティブなカードを備えたボットを作成する方法を学習できます。


この動画で説明しているように、メッセージを受け取った際のボットの最も重要な動作は、イベントタイプを判別して、適切なアクションを実行することです。たとえばボットは、一般的に専門用語で「スペース」と呼ばれるチャットルームやダイレクト メッセージ(DM)で目的の「ペーパーワーク」が追加または削除されたときに、その「ペーパーワーク」を実行します。

最もよくあるシナリオは、ユーザーが送信した通常のメッセージを受信することです。この場合、ほとんどのボットは、リクエストの処理に関して「自分の仕事」を実行します。最後のイベントタイプは、ユーザーがインタラクティブなカードをクリックすると発生します。ボットは、標準的なメッセージを受信した場合と同じように、カード自体のアップデートなど、必要なアクションを実行します。これらの 4 つのイベントタイプをまとめた次の擬似コードは、イベントタイプに応じてボットが実行する可能性が高いアクションを表しています。
function processEvent(req, rsp) {
  var event = req.body; // event type received
  var message;          // JSON response message

  if (event.type == 'REMOVED_FROM_SPACE') {
      // no response as bot removed from room
      return;

  } else if (event.type == 'ADDED_TO_SPACE') {
    // bot added to room; send welcome message
    message = {text: 'Thanks for adding me!'};

  } else if (event.type == 'MESSAGE') {
    // message received during normal operation
    message = responseForMsg(event.message.text);

  } else if (event.type == 'CARD_CLICKED') {
    // user-click on card UI
    var action = event.action;
    message = responseForClick(
        action.actionMethodName, action.parameters);
  }

  rsp.send(message);
};

このボットの疑似コードおよび動画で紹介したボットは 同期的に応答します。時間がかかる操作またはアウトオブバンド通知を発行する操作を実行するボットは、メッセージを スペース非同期的に 送信できます。これらの操作には、ジョブ完了通知などのメッセージ、サーバーがダウンした場合のアラート、新しいリードが CRM(顧客管理)システムに追加された際の営業チームに対する ping などが含まれます。

Hangouts Chat では、JavaScript、Python、Google Apps ScriptGoogle App Engine など、多くの言語とプラットフォームがサポートされます。Apps Script 上で実行されている JavaScript を使用することは、組織内でボットをオンラインで実行する最も簡単で速い方法の 1 つですが、ボットを Node.js に簡単に移植して、さまざまなホスティング オプションに使用することもできます。同様に、App Engine を使用すると、拡張性が向上し、Python 以外の追加言語(Java、PHP、Go など)をサポートできます。また、ボットを Flask に移植して、その他のホスティング オプションに使用できます。1 つの重要なポイントはプラットフォームの柔軟性です。つまり、デベロッパーはあらゆる言語、スタック、クラウドを使用して、ボットの実装を作成およびホストすることができます。ボットは、Hangouts Chat サービスから HTTP POST リクエストを受け取るだけで機能します。

先月の Google I/O 2018 で、Hangouts Chat チームリーダーと私は、長時間にわたり、より高いレベルのボット フレームワークの概要について発表を行いました。フレームワークに関するこの包括的なツアーでは、サンプル ボットの多数のライブデモに加えて、さまざまな言語とプラットフォームを紹介しています。次の 40 分ほどのセッションをご覧ください。


使い始めるにあたって、ボット フレームワークの導入に関する投稿をご覧ください。こちらの投稿では、動画で紹介されている投票ボットの Python App Engine バージョンについて詳しく説明しています。Hangouts Chat 用のボットの開発に関する詳細は、コンセプト ガイドとボットを作成する「方法」をご覧ください。ご自分の組織、顧客、そして世界を対象にボットをビルドできます。デベロッパーの皆さんがビルドするすばらしいボットを見るのを楽しみしています。



Reviewed by Eiji Kitamura - Developer Relations Team

この記事は Google Calendar API プロダクト マネージャー、Ernesta Orlovaitė、G Suite デベロッパー アドボケート、Wesley Chun(@wescpy)による G Suite Developers Blog の記事 "Hangouts Meet now available in the Google Calendar API " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

たくさんのデベロッパーが Google Calendar API を使って Google カレンダーのイベントの読み取りや作成、変更を行っています。そしてこういったイベントは、対面の会議ばかりでなく、リモート会議を表すこともよくあります。今年は(*原文公開当時)Hangouts Meet の導入によって G Suite エンタープライズにビデオ通話のリンクや電話番号が追加され、ユーザーが高機能なカンファレンスを体験できるようになりました。そして本日(*原文公開当時)より、Google Calendar API からすべてのカンファレンス情報にアクセスできるようになります。このアップデートによって、デベロッパーは以下のことができるようになります。
  • イベントに関連するカンファレンス データを読み取る 
  • あるイベントから別のイベントにカンファレンス データをコピーする 
  • イベントで使う新しいカンファレンスの生成をリクエストする 
API は、すべてのバージョンの Hangouts をサポートしています。

カンファレンス データを読み取る 

カンファレンス情報は、新しく追加された conferenceData という event の属性に保存されています。conferenceData は、カンファレンスを作成する際に使ったソリューション(Hangouts Meet など)や、一連のエントリ ポイント(ビデオ通話リンクや電話番号など)についての情報を提供します。ユーザーがカンファレンスの通話に参加するために必要な情報はすべてそろっています。

ユーザー エクスペリエンスをさらに向上させるために、アイコンやユーザーが読みやすいラベルにもアクセスして皆さんの製品で使っていただくことができます。JSON 形式の conferenceData は次のようになります(もちろん、実際のミーティング ID や電話番号は異なります)。
"conferenceData": {
  "entryPoints": [
   {
    "entryPointType": "video",
    "uri": "https://meet.google.com/wix-pvpt-njj",
    "label": "meet.google.com/wix-pvpt-njj"
   },
   {
    "entryPointType": "more",
    "uri": "https://tel.meet/wix-pvpt-njj?pin=1701789652855",
    "pin": "1701789652855"
   },
   {
    "entryPointType": "phone",
    "uri": "tel:+44-20-3873-7654",
    "label": "+44 20 3873 7654",
    "pin": "6054226"
   }
  ],
  "conferenceSolution": {
   "key": {
    "type": "hangoutsMeet"
   },
   "name": "Hangouts Meet",
   "iconUri": "https://blogger.googleusercontent.com/img/proxy/AVvXsEiUIHz-NgXI9vIyWFw_i4SRScmLsO5A8HsaewAv9vcquXYaJl8_3Nf0FfGqPh5lG_VF5QrL977jukLkCrHHWe7nFq1rL550o7YFE8t4Ssm0veyIJsXhlSa6AVg1IZlwt_ABhCTkERtnFNe32jNkMFfEIF4ZadjPxlaFd78ZpDYhJM-7Ym26aPfRijHe_KIEiyemAn7xEsQuhqWoOuM="
  },
  "conferenceId": "wix-pvpt-njj",
  "signature": "ADwwud9tLfjGQPpT7bdP8f3bq3DS"
 }

次のように、カンファレンスのソリューション名やアイコンを取得して表示できます。
var solution = event.conferenceData.conferenceSolution;

var content = document.getElementById("content");
var text = document.createTextNode("Join " + solution.name);
var icon = document.createElement("img");
icon.src = solution.iconUri;

content.appendChild(icon);
content.appendChild(text);
上のコードの結果は、次のようなユーザー インターフェースになります。

イベント間でカンファレンスをコピーする 

情報を表示するだけでは不十分で、情報を更新したい場合もあります。複数のカレンダー イベントでカンファレンスの詳細が同じである場合は特に、これがあてはまります。たとえば、応募者と面接者向けに個別のイベントを設定する採用アプリを開発しているとします。その場合、面接者が特定されないようにしつつ、すべての参加者が確実に同じカンファレンスの通話に参加できるようにする必要があります。これを実現するには、あるイベントから別のイベントにカンファレンス情報をコピーします。具体的には、conferenceData に書き込みを行うだけです。

既存の Hangouts カンファレンスのみがコピーされるようにして、ユーザーを悪意のある人物から保護するため、Google Calendar API は signature フィールドを使ってコピーされたカンファレンス データを毎回検証しています。そのため、signature フィールドも忘れずにコピーするようにしてください。

イベントで使う新しいカンファレンスを作成する 

デベロッパーは、API を使ってカンファレンスの作成をリクエストすることもできます。これは、イベントを作成または更新する際に、conferenceDataVersion リクエスト パラメータを 1 に設定して conferenceData.createRequest を提供するだけで実行できます。カンファレンスは非同期的に作成されますが、リクエストのステータスはいつでも確認できるので、何が起こっているかをユーザーに知らせることができます。たとえば、既存のイベントで使うカンファレンスの生成をリクエストする場合は、次のようにします(ここでも、リクエストやイベントの ID は異なります)。
var eventPatch = {
  conferenceData: {
    createRequest: {requestId: "7qxalsvy0e"}
  }
};

gapi.client.calendar.events.patch({
  calendarId: "primary",
  eventId: "7cbh8rpc10lrc0ckih9tafss99",
  resource: eventPatch,
  sendNotifications: true,
  conferenceDataVersion: 1
}).execute(function(event) {
  console.log("Conference created for event: %s", event.htmlLink);
});
この呼び出しの直後に返されるレスポンスには、まだ完全な conferenceData が含まれていない場合があります。これは、status が pending になっていることからわかります。
"conferenceData": {
  "createRequest": {
   "requestId": "7qxalsvy0e",
   "conferenceSolutionKey": {
    "type": "hangoutsMeet"
   },
   "status": {
    "statusCode": "pending"
   }
  }
 }
statusCode が success に変わると、カンファレンス情報が設定されます。最後に、Google カレンダー クライアントを開発している場合、3 つの Hangouts ソリューション(コンシューマー Hangouts、クラシック Hangouts、Hangouts Meet)のうち、カンファレンスの作成にはどれが使われるか、あらかじめ知りたい場合もあるかもしれません。この情報は、calendar の conferenceProperties の中にある allowedConferenceSolutionTypes を確認するとわかります。

この機能を使ってみたい方は、カンファレンス データの管理について記載されているドキュメント ページをご覧ください。今回の Google Calendar API の新機能を使って皆さんが作るアプリを楽しみにしています。


Reviewed by Eiji Kitamura - Developer Relations Team

この記事は G Suite デベロッパー アドボケート、Wesley Chun@wescpyによる Google Apps Developer Blog の記事 "G Suite Developers Blog: Gmail add-ons framework now available to all developers" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

メールは今でも企業における運営の中心的役割を担っています。今年、企業のワークフローを加速させる Gmail アドオンのプレビュー版を公開したのはそのためです。それ以来、すばらしいアプリケーションを構築するパートナーが登場しています。そして本日より(英語版記事公開当時)、Gmail アドオンのプレビュー版がすべてのデベロッパーに解放されます。これで、誰でも Gmail アドオンを開発できるようになります。

Gmail アドオンを使うと、アプリの機能を Gmail に組み込み、Gmail を拡張してすばやいアクションを実行させることができるようになります。Gmail アドオンは、単純なテキスト ダイアログ、イメージ、リンク、ボタン、フォームなどを含めることができるネイティブ UI コンテキスト カードを使って構築されており、必要なときに表示されます。そのため、ユーザーはクリックするだけでアプリに組み込まれたさまざまな機能を使うことができます。

Gmail アドオンは簡単に作成でき、一度アドオンのコードを書くだけで、ウェブでもモバイルでも動作します。また、豊富なウィジェット パレットから選択してカスタム UI を作成することもできます。たとえば、メッセージの内容に応じてカードを表示させるアドオンを作ることができます。動画では、メールの領収書を照合して経費の報告を簡単にできるようにするアドオンの作り方を紹介していますので、ぜひご覧ください。

動画を見ると、アプリの中核機能に 3 つのコンポーネントがあることがわかります。最初のコンポーネントは、すべての Gmail アドオンのエントリ ポイントとなる getContextualAddOn() です。データはここで収集され、Gmail UI 内でカードが作成されて表示されます。アドオンは受信トレイにあるメールの領収書の経費報告を処理するので、 createExpensesCard() がメッセージを解析して関連するデータを取り出し、フォームに表示してユーザーがデータを送信する前に確認または更新できるようにします。最後の submitForm() では、データを取得して Google スプレッドシートの「expenses」スプレッドシートに新しい行を追加し、データを書き込みます。これは、編集したり、上司の承認を得るために送信することができます。

Gmail アドオンを試してみるには、ドキュメントをご確認ください。アドオンを作成するのはどのようなものかを確認したい方は、順を追って ExpenseIt を構築できるコードラボをご覧ください。現時点では、アドオンを公開することはできませんが、このフォームに記入すると、公開機能がオープンされたときに通知を受け取ることができます。皆さんの Gmail アドオンのリリースを楽しみにしています。

Reviewed by Eiji Kitamura - Developer Relations Team

この記事は G Suite デベロッパー プラットフォーム エンジニア、Timmerman(@granttimmerman)による Google Apps Developer Blog の記事 "Introducing the Slides API Codelab" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

昨年秋、Google Slides API がリリースされました。それ以来、パートナーやデベロッパーなどの皆さんは、プログラムからスライドを生成するアプリやツールを作っています。そういったスライドは、有名な md2googleslides のように PC でもモバイルでも動作しています。

最近リリースされた Slides API コードラボでは、Google の BigQuery と Slide API を使って 350 万のレポジトリを分析し、「トップ 10 OSS ライセンス」プレゼンテーションを作成する例を取り上げ、順を追って説明しています。これは、Slides API を学習するにはまたとない題材です。特に、ビッグデータ、プレゼンテーションの自動作成、オープンソースに興味がある方におすすめです。
Slides API コードラボのプレビュー

Slides API コードラボ スタートガイド 

コードラボを使ってみるには、レポジトリをクローンします。最初にスクリプトを実行すると、いくつかのステップに分けてプレゼンテーションを作成することがわかります。start ディレクトリでサンプルアプリを実行すると、次のような「TODO」が表示されます。
-- Start generating slides. --
TODO: Get Client Secrets
TODO: Authorize
TODO: Get Data from BigQuery
TODO: Create Slides
TODO: Open Slides
-- Finished generating slides. --

GitHub 情報のクエリには、BigQuery ですでに公開されているパブリック データセットを使います。BigQuery を使うと、Google のインフラにある大量のデータセットに対して数秒でクエリを実行することができます。BigQuery のパブリック データセットの利用や、独自のデータセットのアップロードは、bigquery.cloud.google.com から行うことができます。このコードラボではオープンソース ライセンスに注目しているので、GitHub のパブリック レポジトリのクエリを実行し、そのライセンスを取得します。
WITH AllLicenses AS (
  SELECT * FROM `bigquery-public-data.github_repos.licenses`
)
SELECT
  license,
  COUNT(*) AS count,
  ROUND((COUNT(*) / (SELECT COUNT(*) FROM AllLicenses)) * 100, 2) AS percent
FROM `bigquery-public-data.github_repos.licenses`
GROUP BY license
ORDER BY count DESC
LIMIT 10
GitHub オープンソース ライセンス クエリ
パブリックやプライベートなデータセットは無限にあります。BigQuery でどのようなデータを分析できるか、Google Slides API を使ってどのようなプレゼンテーションを自動生成できるかを想像してみてください。Slides API コードラボの目的は、その両方をすばやく学んでいただくことです。Slides API やこのコードラボに関する問題点、質問は、GitHub または Stack Overflow でお尋ねください。

皆さんのアプリのリリースを楽しみにしています。


Reviewed by Eiji Kitamura - Developer Relations Team

この記事は Google Drive プロダクト マネージャー、Rio Akasaka、G Suite デベロッパー アドボケート、Wesley Chun(@wescpy)による G Suite Developers Blog の記事 "Identifying app usage in your Google Drive audit logs" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

G Suite 管理者(または管理者向けのアプリを作っているデベロッパー)にとって重要なのは、企業で社員が使っているさまざまなアプリやそのアクセス状況について理解しておくことです。本日は、それを簡単に行うために、Admin SDK の Reports API を使って Google Drive の監査ログ内のアプリ ID(originating_app_id)を取得する方法を紹介します。

現在、Drive Android アプリ、Drive iOS アプリ、Google Chrome、あるいは Google Drive のファイルを利用、変更、作成するさまざまなサードパーティ製アプリ(Smartsheet や Asana など)のうち、ログに記録されたユーザーのアクティビティの実行元をアプリで判別できます。これによって、組織内で利用されているアプリやその利用頻度、利用状況について詳しく把握できます。

ログに表示される App ID は数値である点に注意してください。アプリ名を取得したい場合は、Google Drive REST API を使って別のリクエストを行う必要があります。Drive のアクティビティ リクエストを通じてすでに情報を取得している場合は、ログに originating_app_id が表示されているはずです。この情報を問い合わせる際に利用できる 2 つの HTTP リクエストを次に示します。

GET 
https://www.googleapis.com/admin/reports/v1/activity/users/userKey

または
GET 
https://www.googleapis.com/admin/reports/v1/activity/users/all/applications/drive

この新機能の詳細については、ドキュメントをご覧ください。皆さんや他の G Suite 管理者がドメイン内のアプリの利用状況を詳しく理解できるように、ぜひこの機能をコードに組み込んでみてください。皆さんが作るアプリを楽しみにしています。


Reviewed by Eiji Kitamura - Developer Relations Team

この記事はソフトウェア エンジニア、Amos Yuen、G Suite デベロッパー アドボケート、Wesley Chun(@wescpy)による G Suite Developers Blog の記事 " Google People API now supports updates to Contacts and Contact Groups" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

本日(*原文公開当時)より、Google People API に連絡先と連絡先グループ用の新しいエンドポイントを追加しました。昨年、古い Contacts API を置き換えることを念頭に、読み取り専用のエンドポイントに対応した Google People API をリリースしました。今回、書き込み用のエンドポイントを追加したことにより、その目的に一歩近づきました。デベロッパーが連絡先を作成、削除、更新できるようになっただけでなく、連絡先グループ用のエンドポイントも追加されているため、連絡先グループの読み書きもできるようになっています。

この API にアクセスするには、まずアプリケーションが認可を受ける必要があるため、Google Developers Console で People API を有効にしてプロジェクトを作成し、サービスにアクセスできるようにします。実行しなければならないステップについては、ここを参照してください。Google API や Developers Console にまだ慣れていない場合は、シリーズの第 1 弾であるこの動画を見て知識を深めておけば、すぐに追いつけます。


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

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

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

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

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

List emailAddresses = new ArrayList<>();
emailAddresses.add(new EmailAddress().setValue("john.doe@gmail.com"));
contactToUpdate.setEmailAddresses(emailAddresses);

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

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


Reviewed by Eiji Kitamura - Developer Relations Team

この記事は G Suite デベロッパー アドボケート、Wesley Chun(@wescpy)による G Suite Developers Blog の記事 "Modifying events with the Google Calendar API" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

Google Calendar APIメール内のマークアップを使ってユーザーのカレンダーにイベントを登録している方もいるでしょう。うれしいことに、これらのツールを使うとアプリから自動的かつシームレスにイベントを登録でき、ユーザーの時間を大幅に節約できます。しかし、もし予定が変わったらどうなるでしょう。その場合を考慮して、アプリからイベントの変更もできるようにしておく必要があります。

メールによるマークアップでは更新もサポートしていますが、できることは限られます。そこで本日の動画では、Calendar API を使ってイベントを変更する方法を紹介しましょう。合わせて、繰り返しの予定を登録する方法も紹介しています。どうぞご覧ください。

あなたの商品に興味を持っている潜在顧客がいて、1、2 回の打ち合わせを設定する場合を考えてみましょう。顧客の興味が増し、商品が最終候補リストに入ると、定期的な打ち合わせが求められます。CRM では、ユーザーの手を煩わせることなくこのような予定を調整できるようにする必要があります。同じように、「友人とのディナー」イベントも、友人と親しくなるにつれて、「また今度」から隔月になるかもしれません。どちらのイベントも、下のような JSON リクエスト ペイロードで日付を調整したり、繰り返し登録できます。
var TIMEZONE = "America/Los_Angeles";
var EVENT = {
    "start": {"dateTime": "2017-07-01T19:00:00", "timeZone": TIMEZONE},
    "end":   {"dateTime": "2017-07-01T22:00:00", "timeZone": TIMEZONE},
    "recurrence": ["RRULE:FREQ=MONTHLY;INTERVAL=2;UNTIL=20171231"]
};

このイベントは、Calendar API の events().patch() メソッドを 1 回呼び出すだけで更新できます。Python を使う場合は、次のようにして API サービスのエンドポイント GCAL に対して更新する有効な EVENT_ID を指定し、上のリクエスト データを渡します。
GCAL.events().patch(calendarId='primary', eventId=EVENT_ID,
    sendNotifications=True, body=EVENT).execute()

Google カレンダーにイベントを登録する方法を紹介した動画を見逃した方は、こちらをご覧ください。また、公式 API ドキュメントもご覧いただけます。さらに、Google Apps Script を使っている方は、プログラムを利用して Calendar サービスから Google カレンダーにアクセスできます。

ぜひこの情報を活用してアプリを改良し、さらに便利でタイムリーな機能をユーザーに提供しましょう。


Reviewed by Eiji Kitamura - Developer Relations Team

この記事は G Suite デベロッパーアドボケート、Wesley Chun(@wescpy)による G Suite Developers Blogの記事 "Using field masks with update requests to Google APIs" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
 
先日、Google API に対して読み取り(GET)リクエストを呼び出す際に、フィールド マスクを使ってレスポンス ペイロードとして返されるデータ量を削減する方法を紹介しました。本日(*原文公開当時)は、フィールド マスクの別のユースケースであるアップデート リクエストについて紹介しましょう。  
 
このシナリオでは、以前と似ているものの、少し異なる目的でフィールド マスクを利用します。この方法を使う場合、フィールド マスクはフィルターとして動作しますが、どちらかといえば、どの API フィールドをアップデートするかを制御するビットマスクのような働きになります。次の動画では、Google Sheets API と Slides API を使ったいくつかの例を挙げてアップデート フィールド マスクの使用方法について説明しています。ぜひご覧ください。  
次に示すサンプル JSON ペイロードでは、(cell ディレクティブによって)セルの太字属性を true に設定するリクエストを行っています。その際のフィールド マスク(fields)は、リクエストを繰り返しているようにも見えます。  
{
    "repeatCell": {
        "range": {
            "endRowIndex": 1
        },
        "cell": {
            "userEnteredFormat": {
                "textFormat": {
                    "bold": true
                }
            }
        },
        "fields": "userEnteredFormat/textFormat/bold",
    }
}

「これは冗長ではないか?」と思うかもしれません。しかし、上の例は 2 つの部分からなる点に注目してください。1)リクエストが望む変更点についてのデータを提供します。2)たとえば、1 行目のすべてのセルの userEnteredFormat/textFormat/bold 属性というような形で、フィールド マスクで何をアップデートするかを指定します。もう少し明示的に説明するために、斜体のような別のマスクを追加してみましょう。これでアップデート フィールド マスクに、太字と斜体の両方のフィールドが設定されました。  
"fields": "userEnteredFormat/textFormat(bold,italic)"

ただし、フィールド マスクに両方の要素が存在しても、アップデート データを提供しているのは太字だけです。リクエスト本体には、italic を設定するデータは指定されていません。この場合、すべてのセルがリセットされます。つまり、セルがもともと斜体になっていれば、API リクエストの完了後に斜体が解除されます。逆に、最初からセルが斜体になっていない場合は、セルはそのままになります。この機能を使うと、あるセルの範囲を元に戻したり、以前の設定をリセットしたりする機能を実現できます。その他の例や、アップデート リクエストへのフィールド マスクの活用方法については、先ほどの動画をご覧ください。  
 
フィールド マスクを使って API ペイロードの部分的な応答を取得する方法の詳細については、こちらの動画や 2 回シリーズの 1 回目の投稿をご覧ください。両方(読み取りおよびアップデート)のユースケースに関する総合的な記事については、Google Slides API ドキュメントのガイドをご覧ください。 ぜひフィールド マスクをお楽しみください!  
 
 
Posted by Eiji Kitamura - Developer Relations Team

この記事は Google Developers エキスパート、Bruce Mcpherson および Romain Vialard、G Suite デベロッパー アドボケート、Wesley Chun@wescpy)による G Suite Developers Blog の記事 "Using Google Sheets filters in Add-ons with Google Apps Script" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

Google Apps Script を使っているデベロッパーの皆さんは、アップデートされた Google Sheets API の豊富な機能と、最近リリースされた Advanced Sheets Service にアクセスできます。Advanced Service を使用すると、ネイティブ Apps Script オブジェクトを使用した場合と比較して、デベロッパーが現在の API 機能に(ネイティブ サポートを待つことなく)アクセスできるというメリットがあります。たとえば、Advanced Service を使うと、デベロッパーはスプレッドシート フィルタにアクセスしてアドオンを強化できます。

フィルタ機能 

Sheets API を使うと、フィルタで絞り込んだ列を取得したり、スプレッドシートに対して新しいフィルタを設定したりできます。また、Advanced Sheet Service を使うと、アドオンにフィルタを認識させ、新しいフィルタを適用してスプレッドシート UI に表示されているデータを変更できます。さらに、任意Apps Script Advanced Service を併用することで、直接 REST API を使用する場合に必要となる UrlFetch サービスの使用や認証フローの管理なしに、スプレッドシートやその他の Google API に簡単にアクセスできるようになります。次のスニペットは、指定されたスプレッドシートのフィルタで絞り込まれた行のインデックスを返します。API ドキュメントに示されているように、Google スプレッドシートの「行を非表示」メニュー項目を使って手動で非表示にした行のリストを取得することも可能です。このコードサンプルでは、フィルタで除外された行だけを返しています。

 function getIndexesOfFilteredRows(ssId, sheetId) {
  var hiddenRows = [];
  
  // limit what's returned from the API
  var fields = "sheets(data(rowMetadata(hiddenByFilter)),properties/sheetId)";
  var sheets = Sheets.Spreadsheets.get(ssId, {fields: fields}).sheets;  
  
  for (var i = 0; i < sheets.length; i++) {
    if (sheets[i].properties.sheetId == sheetId) {
      var data = sheets[i].data;
      var rows = data[0].rowMetadata;
      for (var j = 0; j < rows.length; j++) {
        if (rows[j].hiddenByFilter) hiddenRows.push(j);
      }
    }
  }
  return hiddenRows;
} 
コード スニペット内の fields パラメータは、Sheets API レスポンスで返される内容をアプリに関係する値のみに制限します。詳しくは、Sheets API ドキュメントのこちらのページか、フィールド マスクについての最新動画をご覧ください。

アドオンによるフィルタの使用例 

スプレッドシートには、高度なフィルタを使用するアドオンがたくさんあります。以下は良い例です。
  • Yet Another Mail Merge: スプレッドシートからメール キャンペーンを送信できるアドオンです。このアドオンは、スプレッドシートのフィルタで絞り込まれた行のみを処理します。たとえば、イベントに登録している人のリストがあり、登録者の一部しか受け付けておらず、確認メールを出したい場合を考えてみましょう。Yet Another Mail Merge とアップデートされた API を使うと、受け付けていない人を除外することができるので、アドオンはその人々に確認メールを送らずにスキップします。
  • Sankey SnipChord Snip: Google スプレッドシートの UI では利用できない特殊な種類のチャートを作成できるアドオンです。アドオンにフィルタを認識させると、フィルタで絞り込まれたデータがチャートとして視覚化されます。次の Chord Snip アドオンのサンプルをご覧ください。
もちろん、API を使ってスプレッドシートのフィルタの追加、更新、削除もできます。これは、特定のステータスを持つ行をすばやくユーザーに表示したい場合に便利です。ワークフローの承認アドオンを構築する場合の例をあげれば、承認待ちの行のみをユーザーに表示できます。下のスニペットは、指定されたスプレッドシートにリクエストされたフィルタを適用するものです。API ドキュメントでは、これを標準基本フィルタ オブジェクトと呼んでいます。

function setSheetBasicFilter(ssId, BasicFilterSettings) {
  //requests is an array of batchrequests, here we only use setBasicFilter
  var requests = [
    {
      "setBasicFilter": {
        "filter": BasicFilterSettings
      }
    }
  ];
  Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);
}

Yet Another Mail Merge などの大量メールツールは、メールの送信、オープン、クリックをトラッキングしています。トラッキング レポートはスプレッドシートのサイドバーから利用でき、オープンされたメールの数をクリックすると、自動的にフィルタが適用されて、ステータスが「opened」の行のみが表示されるようになります。


スプレッドシートに適用されるフィルタは、直接 Sheets API から制御したり、Apps Script アプリと Advanced Sheets Service を使ったアドオンから制御できます。ぜひこの機能を使って最高のユーザー エクスペリエンスを提供してください。

投稿者について 

Romain Vialard は、Google Developer エキスパートです。数年間を G Suite コンサルタントとして過ごし、現在は、Yet Another Mail MergeForm Publisher などのアドオンを含む G Suite および Google Apps ユーザー向けの製品に注力しています。

Bruce Mcpherson は、Google Developer エキスパート、独立コンサルタント、ブロガーで、Going GASGoogle Apps Script for BeginnersGoogle Apps Script for Developers の作者でもあります。


Posted by Eiji Kitamura - Developer Relations Team

この記事は Google Drive プロダクト マネージャー、Rio Akasaka、G Suite デベロッパー アドボケート Wesley Chun(@wescpy)による Google Apps Developer Blog の記事 "New Google Drive metrics now accessible from Reports API" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

Admin SDK Reports API新しいメトリクスが導入されたという記事をもうお読みいただいたかもしれません。この新しいメトリクスを使うと、ドメイン内からユーザーについて簡単かつ確実に確認できます。本日より、この機能に基づき、管理者やデベロッパーはドメインの内外でどのようにファイルが共有されているかを今まで以上に詳細に把握できます。変更点は、以下の通りです。
  1. 昨年導入された一連のメトリクスを補う新しいメトリクス 
  2. 監査イベントに関する新しい可視性情報 
  3. Reports API における既存メトリクスのサポートの終了

新しいメトリクス

昨年導入された一連のメトリクスを補ういくつかの新しいメトリクスを作成しています。新しいメトリクスを使うと、以下のようなことが可能になります。
  • ファイルやファイルの共有ステータスを把握し、セキュリティやレポートに活用できます。以下の古いメトリクスは、新しいメトリクスによって置き換えられます。
    num_docs_internally_visible, num_docs_externally_visible, num_docs_shared_outside_domain.
  • ユーザー グループ(共同編集者、閲覧者、作成者、共有者)についてのサマリー統計など、ドメイン内の製品の利用状況がわかるようになります。 Google Drive、ドキュメント、スプレッドシート、スライド、フォーム、図形描画などの製品について、1 日以上、7 日以上、30 日以上のアクティブ ユーザーといった主要な利用状況のメトリクスを活用できるようになります。 
  • 可視性や所有アイテムの変更を事前に計算する差分メトリクスにより、ドメイン内の「変更点」の計算が簡単になります。

新しい可視性情報 

すべての監査イベントに新しい可視性情報が追加されます。これによって、ドメイン内外での別の共有につながるパーミッションの変更イベントをすばやく特定できます。詳細をご覧ください

既存メトリクスのサポートの終了 

ドメインのユーザーや Google Drive のファイルに関する信頼性の高いタイムリーなデータが求められていることは認識していますが、ドライブのデータやインフラがかなり拡大しているため、メトリクスに関連する困難な技術的トレードオフが発生しています。その結果、本日より 1 年後に Reports API でこちらの既存メトリクスのサポートが終了し、管理コンソールでも利用できなくなります。これらのメトリクスは、2018 年 5 月 14 日以降は利用できません。

Reports API を始める場合や、ドメインの報告に使う別のメトリクスを探す場合は、公式ドキュメントをご覧ください。この機能が皆さんのレポートに役立つことを願っています。


Posted by Eiji Kitamura - Developer Relations Team

この記事は デベロッパー プログラム エンジニア、Ryan Roth、G Suite デベロッパー アドボケート、Wesley Chun による G Suite Developers Blog の記事 "A new issue tracker for G Suite developers" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Google Cloud Platform チームが Issue Tracker をアップグレードしたという記事をすでにお読みいただいているかもしれません。Google 内部でも、これと同じシステムが使われているため、Google と皆さんとの間の協調作業が改善されることになります。報告された問題は Google 内部で広く公開され、対応中の問題も皆さんの目に触れやすくなります。本日(*原文公開当時)より、G Suite デベロッパーの皆さんも新しい Issue Tracker を使えるようになります。既存の問題は、すでに旧システムから移行されています。新しい Issue Tracker では、皆さんが発見したバグやお気に入りの機能リクエストを報告できます。なお、Issue Tracker の参照やアップデートを行うには、Google 認証情報を使ってログインする必要があります。

G Suite デベロッパー向けの新しい Issue Tracker 

G Suite API やデベロッパー ツールには、それぞれの「コンポーネント」番号があり、それを使って検索できます。参考までに、すべてのリストを以下に掲載します。ここから、お使いいただいている Google API に関連する問題を参照したり、リンクをクリックして問題を報告したり、新機能や足りない機能をリクエストすることができます。
ご利用にあたっては、ドキュメント ページよくある質問をご覧ください。詳しくは、Google Cloud Platform のお知らせもご覧ください。今まで以上に皆さんと密接に連携できることを楽しみにしています。


Posted by Eiji Kitamura - Developer Relations Team

この記事はプロダクト マネージャー Rodrigo Paiva、ソフトウェア エンジニア Nicholas Watson、デベロッパー アドボケート Wesley Chun による G Suite Developers Blog の記事 "Updates to end user consent for 3rd-party apps and Single Sign-on providers" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

Google は、ユーザーのデータやアカウント情報を安全に保つことに細心の注意を払っています。皆さんが作成しているアプリで、ユーザーデータへのアクセスが必要だったり、ユーザーのパスワード変更を支援することがあるため、Google は引き続き、ポリシー変更に関する最新情報をお届けしてまいります。本日(*原文公開当時)は、同意画面とサードパーティ アプリに関連する変更についてご案内します。2017 年 4 月 10 日より、アプリのデベロッパーまたはサードパーティのシングル サインオン(SSO)プロバイダが提供している G Suite 機能のユーザーは、ID サービスで認証認可を行った際にリダイレクトされる場合があります。通常ユーザーは認証認可時に、どのアカウントで認証しようとしているのか、どのパーミッションをアプリに与えようとしているのかを理解します。

この変更は、以下のプラットフォームで実施されます。
  • iOS 向けの Google およびサードパーティ製のアプリ
  • iOS および Android のモバイル ブラウザ
  • ウェブブラウザ(Chrome、Firefox などの最新ブラウザ)
標準認証ライブラリを使用する Android アプリでは、すでに適切なアカウント情報の選択が求められるようになっているため、ユーザーは今回の変更による影響を受けません。

わかりやすくなったアプリでの新しいパーミッションのリクエスト

アプリでは、ユーザーに対してアカウント情報と認証情報に関する同意画面を表示し、単純明快なプロセスにすることが重要になります。新たな変更点の 1 つは、非標準のパーミッションがリクエストされた場合、そのパーミッションのみがアプリのサブ同意画面で表示される点です。 

現在は、アプリがパーミッションをリクエストすると、すべてのパーミッションが一括で表示されます。しかし、ユーザーは標準の「メールアドレス」や「プロフィール」に同意するだけでなく、リクエストされるパーミッションについてさらに詳しい情報を確認できる方が望ましいでしょう。アカウントをクリックして選択することによって、主要なパーミッションに同意します。サブ同意画面は、アプリが追加パーミッションをリクエストした場合のみ表示されます。

ユーザーの同意が必要になるのは、サブ同意画面に表示される非標準パーミッションのみです。 
この変更に合わせて、アプリ名もわかりやすく表示されるようになります。また、ユーザーは連絡先情報をクリックしてデベロッパーに連絡することもできます。ユーザーがすばやくサポートや補助を受けることができるように、アプリのデベロッパーの皆さんは公開用のメールアドレスを掲載するようにしてください。詳しくは、デベロッパー ガイドをご覧ください

サードパーティのシングル サインオン(SSO)サービスも使っている G Suite ユーザーがアプリを使う場合は、必要に応じて hdlogin_hint パラメータを使うことをおすすめします。サードパーティ SSO 認証フローが変更された場合でも、パラメータが提供されていれば考慮されます。詳しくは、ドキュメントの OpenID Connect ページをご覧ください。

サードパーティ SSO リダイレクト関連の変更点

G Suite ユーザーは、サードパーティ SSO プロバイダにログインする際にリダイレクトされることに気づくかもしれません。どのアカウントでもログインしていない場合、ユーザーはサードパーティ SSO プロバイダにログインした後にアカウントを確認する必要があります。これは、ユーザーが正しい G Suite アカウントでログインしていることを確認するためのものです。
エンドユーザーは、Google アカウントにログインした直後に、確認のためにアカウントを選択する必要があります。 
前述のように、クリックしてアカウントを選択すると、ユーザーは「メールアドレス」と「プロフィール」に同意したことになります。非標準の追加パーミッションがリクエストされた場合、ユーザーがそれに同意すると、リダイレクトされてアプリに戻ります。

ユーザーが hd ヒントに一致する 1 つまたは複数のアカウントにすでにログインしている場合、すべてのアカウントが Account Chooser に表示されます。ユーザーは適切な G Suite アカウントを選択する必要があります。その選択後にサードパーティ SSO プロバイダにリダイレクトされ、アプリに戻ります。
複数の Google アカウントにログインしているユーザーは、適切なアカウントを選択する必要があります。

アップデートは 2017 年 4 月より

以上の変更によって、すべてのプラットフォームでユーザーがパーミッションについて細かく把握できるようになります。認証に Google を使用している場合も、サードパーティ SSO プロバイダを利用している場合も同様です。iOS 端末では、すでに新たなページが挿入されるようになっています。各ブラウザでの変更は、2017 年 4 月 10 日より実施される予定です。


Posted by Eiji Kitamura - Developer Relations Team

この記事は G Suite デベロッパーアドボケート、Wesley Chun による G Suite Developers Blog の記事 "Using field masks with Google APIs for partial response" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

Google API(G Suite API だけでなく、YouTube や Google Cloud Platform API を含むほとんどの Google API)を使ってアプリを作成する場合、API 呼び出しの応答ペイロードで返されるデータを意識することが重要になります。そうしないと、必要以上のデータが返され、モバイルかサーバー バックエンドかを問わず、アプリのパフォーマンスに影響が出る場合があります。

そのため、ほとんどの Google API では、フィールド マスクを使って応答ペイロードに必要なデータだけを含めることが可能です。フィールド マスクを思い通りに使いこなしていただくために、さまざまな Google API でのフィールド マスクの使い方を説明する動画(英語)を公開しました。
API を呼び出す際にフィールド マスクを使って fields または part パラメータを指定すると、応答ペイロードに含めるフィールドを厳密に指定することができます。多くの場合、必要なデータを絞り込めば、API が応答データの作成にかかる時間も短くなります。次に、Gmail API を使って送信者のアドレスを取得する Python 呼び出しの例を示します(サービス エンドポイントが GMAIL である場合)。
     addresses = GMAIL.users().settings().sendAs().list(
             userId='me'
     ).execute().get('sendAs')

Client Libraries(Python 呼び出しなど)を使う場合でも、HTTP で直接 GET https://www.googleapis.com/gmail/v1/users/userId/settings/sendAs を使う場合でも、API からは次のペイロードが返されます。
     {
       "sendAs": [{
         "sendAsEmail": string,
         "displayName": string,
         "replyToAddress": string,
         "signature": string,
         "isPrimary": boolean,
         "isDefault": boolean,
         "treatAsAlias": boolean,
         "smtpMsa": {
           "host": string,
           "port": integer,
           "username": string,
           "password": string,
           "securityMode": string
         },
         "verificationStatus": string
       }, ...]
     }

この sendAs 配列には、各送信者アドレスについてすべての情報が格納されています。では、Gmail API を使って、上記のすべてのデータを取得せずユーザーのメールの署名を変更できることはご存じでしょうか。これは、1 つのフィールド、最大でも 2 つのフィールドを使って実行できます。必要になるのは sendAsEmail で、必要に応じて isPrimary フラグを使います。フィールド マスクで sendAs の属性名を指定すると、不要なフィールドはすべて除外できます。次の Python コードでは、フィールド マスクを太字で強調しています(フィールド マスクを指定していない上のコードと比べてみてください)。
     addresses = GMAIL.users().settings().sendAs().list(
             userId='me', fields='sendAs(sendAsEmail,isPrimary)'
     ).execute().get('sendAs')
フィールド マスクは、Google API 呼び出しの応答から不要なデータを除外します。

この動画シリーズのパート 2(近日公開)では、アップデートを行う API 呼び出しでフィールド マスクを使う事例について紹介する予定です。また、いくつかの活用法や、読み取りとアップデートの両方の呼び出しにおけるフィールド マスクの使い方を説明する予定です。さらに、1 回の API 呼び出しで両方を使えることも紹介します。ご期待ください。

フィールド マスクを使って API ペイロードの部分的な応答を取得する方法の詳細については、Client Libraries のドキュメントのこちらのセクションをご覧ください。両方(読み取りおよびアップデート)のユースケースに関する総合的な記事については、Google Slides API ドキュメントのガイドをご覧ください。


Posted by Eiji Kitamura - Developer Relations Team

[この記事は Wesley Chun@wescpy)、G Suite デベロッパー アドボケートによる G Suite Developers Blog の記事 "Formatting text with the Google Slides API" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

 プレゼンテーションで、オーディエンスにアイデアを伝えるために写真や画像を使うのは常識です。そのため、優れたプレゼンテーションを作成するベスト プラクティスの 1 つは、全体的にテキストをなるべく少なくすることです。つまり、プレゼンテーションにテキストを 入れる なら、(わずかに)使うテキストは印象的 かつ 視覚的にも美しいものでなければなりません。ソフトウェア アプリケーション、たとえば Google Slides API で生成されるスライドであれば、手で作るスライドよりもなおさらそれが重要になります。

先日、G Suite チームは Slides API の初版をリリースし、まったく新しいカテゴリのアプリケーションへの扉を開きました。それ以降、この API の持つ可能性をみなさんに実現していたくため、スライドのテキストや画像を置き換える方法やスプレッドシートのデータからスライドを生成する方法など、いくつかの動画を公開しています。今回は、主要 API の 3 つの使用例の最後となる、テキストの書式設定についてお伝えしましょう。


Google スライド内のテキストは、API リクエストを送信して操作できます。Google Sheets API と同じく、リクエストは JSON ペイロード形式で API の batchUpdate() メソッドに送信します。次に示すのは、スライド内のある図形(shapeID)の中にテキストを挿入する JavaScript です。
{
    "insertText": {
        "objectId": shapeID,
        "text": "Hello World!\n"
}


動画をご覧頂ければ、上の例のリクエストのように、テキストを 書き込む 操作はテキストの読み取りや書式設定よりも複雑ではないことがおわかりと思います。テキストの読み取りや書式設定は、どちらもスライド内のテキストがどのような構造になっているかを理解している必要があるからです。書き込みに必要なのはコピー(オプションでインデックスも指定できますが、指定しなかった場合のデフォルトは 0)だけです。

スライドの図形に正常に「Hello World!」が挿入されると、次のリクエストで「Hello」だけを太字にできます。
{
    "updateTextStyle": {
        "objectId": shapeID,
        "style": {
            "bold": true
        },
        "textRange": {
            "type": "FIXED_RANGE",
            "startIndex": 0,
            "endIndex": 5
        },
        "fields": "bold"
}


上記のような 1 つ以上のリクエストを requests という配列に格納できたら、API を 1 回呼び出すだけでその操作を実行できます(サービス エンドポイントを SLIDES、スライドデッキ ID を deckID としています)。

SLIDES.presentations().batchUpdate(presentationId=deckID,
        body=requests).execute()

Google スライドのテキストの構造やスタイル設定について理解を深めたい方は、ドキュメントのテキスト コンセプト ガイドをご覧ください。DevByte で取り上げたコードサンプルの 全容 については、さらに詳しく取り上げている投稿をご覧ください。一般的な API の操作の他のサンプルは、こちらのページをご覧ください。これらの動画やデベロッパー リソースが次のすばらしいアプリの作成に役立つことを願っています。ぜひ、ユーザーのために印象的なプレゼンテーションの作成を自動化するアプリを作ってみてください。


Posted by Eiji Kitamura - Developer Relations Team

[この記事は Wesley Chun、G Suite デベロッパー アドボケートによる G Suite Developers Blog の記事 "Formatting cells with the Google Sheets API" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

今年開催された Google I/O で、新しくなった Google スプレッドシート API が発表されました(発表のすべての内容は、こちらからご覧いただけます)。アップデートされた API には、以前のバージョンでは利用できなかった多くの新機能が含まれています。たとえば、PC 版およびモバイル版スプレッドシートのユーザー インターフェース機能のうち、API からアクセスできるものが増えました。以前のバージョンの API にはなかった機能の 1 つが、スプレッドシート内のセルの書式設定です。本日の DevByte 動画では、この機能を取り上げています。


以前に公開したスプレッドシート API の動画では、リレーショナル データベースから行を読み込み、新しい Google スプレッドシートにデータを移す簡単なスクリプトについて説明しながら、プログラムから Google スプレッドシート データの書き込みや読み込みを行う方法を紹介しました。本日は、その動画のコードを使って作成したスプレッドシートを取り上げます。

スプレッドシートの書式設定を行うには、一連の JSON ペイロード形式のリクエスト コマンドを作成し、それを API に送信します。次に示すのは、リクエスト(この例では 1 つだけ)の配列からなるサンプル JavaScript オブジェクトです。これは、自動的に作成される既定のスプレッドシート(ID が 0)の先頭行を太字にします。
{"requests": [
    {"repeatCell": {
        "range": {
            "sheetId": 0,
            "startRowIndex": 0,
            "endRowIndex": 1
        },
        "cell": {
            "userEnteredFormat": {
                "textFormat": {
                    "bold": true
                }
            }
        },
        "fields": "userEnteredFormat.textFormat.bold"
    }}
]}
ここでは、1 つ以上のリクエストが変数 requests に格納されており、スプレッドシートの ID は SHEET_IDとしています。API にリクエストを送信するには、HTTP POST で https://sheets.googleapis.com/v4/spreadsheets/{SHEET_ID}:batchUpdate に送ります。Python を使うと、次のような 1 回の呼び出しで実現できます。
SHEETS.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID,
        body=requests).execute()

動画のコードの詳細については、さらに詳しく説明しているブログ投稿をご覧ください。皆さんのご想像どおり、一番難しいのは API を呼び出す際に送信する JSON ペイロードを作成するところです。この部分は、一般的な操作のサンプルを参考にすることをおすすめします。玩具会社で顧客の注文を管理する Node.js アプリの書き方を説明している JavaScript コードラボもご覧ください。この例では、本日取り上げた玩具の注文データを使っていますが、データはリレーショナル データベース内にあります。本日の動画では、これと同等のスプレッドシートを主に取り上げていますが、また別の機会に、新しい Google スライド API とこのスプレッドシートのデータを使ってスライドを生成する方法を紹介する予定です。ご期待ください。

G Suite API を使って今後のアプリを強化するにあたって、これらのリソースをご活用いただければ幸いです。G Suite Dev Show のチャンネルを購読し、今後取り上げてほしいトピックについてお知らせください。


Posted by Eiji Kitamura - Developer Relations Team

[この記事は Wesley Chun、G Suite デベロッパー アドボケートによる G Suite Developers Blog の記事 "G Suite Developers Blog: Introducing the Google Slides API " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Google I/O 2016 で、デベロッパーの皆様に向けて Google Slides API のプレビューが行われました。それ以降、この API の機能をご覧いただくために、さまざまなアーリーアクセス パートナーやデベロッパーとも協力し、フルスピードで開発を進めてきました。そして本日(*原文公開当時)Slides API v1 が一般公開され、初めてプログラムを通じてスライドにアクセスできるようになったことをお知らせします。

Slides API は、プレゼンテーションの作成方法を変革し、新天地を切り開きます。PC やモバイル端末を使って手作業でスライドを作成する必要はもうありません。小売品の一覧、住宅 / 地所、ホテル / 宿泊設備、レストラン / メニュー、会場 / イベントなど、「カタログ化」された資産に関する業務データは、既存のスライド テンプレートを使ってすぐにプレゼンテーション化できます。今までは、そういったスライドの作成には莫大なデータ(そして時間)が必要だったため、手作業で行うのは大変なことでした。API を使ったアプリケーションを活用すれば、そのようなスライドを簡単に生成し、短時間で好きなようにカスタマイズできます。

API を使う際には、リクエストごとに JSON ペイロードを作成します(複数のコマンドをバッチ化して API に送信することをお勧めします)。これによりスライドのユーザー インターフェースから行うアクションがプログラムからも利用できるようになったと考えればわかりやすいかと思います。新しい API の動作を理解していただくために、いくつかの一般的な操作を行うリクエストの中身を紹介しましょう。

// 新規スライドの作成(タイトルと本体のレイアウト)
{
    "createSlide": {
        "slideLayoutReference": {
            "predefinedLayout":"TITLE_AND_BODY"
        }
    }
},
// テキストボックスにテキストを挿入
{
    "insertText": {
        "objectId": titleID,
        "text":"Hello World!"
    }
},
// テキストのパラグラフに箇条書き記号を追加
{
    "createParagraphBullets": {
        "objectId": shapeID,
        "textRange": {
            "type":"ALL"
        }
    }
},
// テキスト「変数」をイメージで置換
{
    "replaceAllShapesWithImage": {
        "imageUrl": imageURL,
        "replaceMethod":"CENTER_INSIDE",
        "containsText": {
            "text": "{{COMPANY_LOGO}}"
        }
    }
}

デベロッパーによるこの API の使用例については、G Suite ブログの投稿でご覧いただけます。第 1 弾として、Conga、Trello、Lucidchart、Zapier などのパートナーが統合した例をご紹介しています。


まずは、G Suite デベロッパー向けの新しいシリーズである上の DevByte をご覧ください。この動画では、API を使ってテンプレート内の「変数」(プレースホルダ)を希望のテキストやイメージに置き換えて新しいスライドを作成する方法を実演しています。コードのサンプルについてさらに詳しく知りたい方は、こちらのブログ投稿もご覧ください。Python デベロッパー以外の方は、Google API クライアント ライブラリがサポートしている任意の言語で疑似コードとして利用できます。開発環境を問わず、同じ「土台」を利用してさまざまなコンテンツから多くのユーザー向けのスライドを生成できます。Slides API の機能を紹介する他の動画にもご期待ください。

Slides API は、本日より、Google Developers コンソールのプロジェクトから利用できます。スムーズにプロジェクトを開始できるように、詳しくは API の概要とクイックスタートが掲載された公式ドキュメントや、さまざまな言語や環境のサンプルコードをご覧ください。この初めての API を使ったすばらしいスライド生成アプリケーションの登場を楽しみにしています。


Posted by Eiji Kitamura - Developer Relations Team