高度な Google サービス

Google Apps Script の拡張サービスを使用すると、HTTP インターフェースを使用する場合よりも少ない設定で、特定の公開 Google API に接続できます。拡張サービスは、これらの Google API のシンラッパーです。Apps Script の組み込みサービスとよく似ており、たとえば、自動補完機能が提供され、Apps Script が認可フローを自動的に処理します。スクリプトで使用する前に、拡張サービスを有効にしてください。

拡張サービスを有効にする

Google の拡張サービスを使用するには、次の手順を行います。

ステップ 1: 拡張サービスを有効にする

Apps Script エディタを使用するか、マニフェストを編集して、拡張サービスを有効にします。

方法 A: エディタを使用する

  1. Apps Script プロジェクトを開きます。
  2. 左側の [Editor] をクリックします。
  3. 左側の [**サービス**] の横にある [**サービスを追加**] をクリックします。
  4. Google の拡張サービスを選択し、[追加] をクリックします。

方法 B: マニフェストを使用する

マニフェスト ファイルを編集して、拡張サービスを有効にします。たとえば、Google ドライブの拡張サービスを有効にするには、enabledAdvancedServices フィールドを dependencies オブジェクトに追加します。

{
  "timeZone": "America/Denver",
  "dependencies": {
    "enabledAdvancedServices": [
      {
        "userSymbol": "Drive",
        "version": "v3",
        "serviceId": "drive"
      }
    ]
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

拡張サービスを有効にすると、自動補完で使用できるようになります。

ステップ 2: Google Cloud API を有効にする(標準の Google Cloud プロジェクトのみ)

デフォルトの Google Cloud プロジェクト(Apps Script によって自動的に作成される)を使用している場合は、この手順をスキップしてください。ステップ 1 でサービスを追加すると、API が自動的に有効になります。

標準の Google Cloud プロジェクトを使用している場合は、拡張サービスに対応する API を手動で有効にします。API を手動で有効にするには:

  1. ** Google Cloud コンソール** で、スクリプトに関連付けられたクラウド プロジェクトを開きます。

  2. コンソールの上部にある検索バーをクリックし、API 名の一部(「Calendar」など)を入力して、名前が表示されたらクリックします。

  3. [API を有効にする] をクリックします。

  4. Google Cloud コンソールを閉じて、スクリプト エディタに戻ります。

メソッド シグネチャの決定方法

通常、拡張サービスは、対応する公開 API と同じオブジェクト、メソッド名、パラメータを使用しますが、メソッド シグネチャは Apps Script で使用できるように変換されます。通常、スクリプト エディタの自動補完 機能で、作業を開始するのに 十分な情報が提供されます。次のルールでは、Apps Script が公開 Google API からメソッド シグネチャを生成する方法について説明します。

Google API へのリクエストでは、パスパラメータ、クエリ パラメータ、リクエスト本文、メディア アップロード添付ファイルなど、さまざまな種類のデータを受け入れることができます。一部の拡張サービスでは、特定の HTTP リクエスト ヘッダー (たとえば、Calendar の拡張 サービスなど)を受け入れることもできます。

Apps Script の対応するメソッド シグネチャには、次の引数があります。

  1. リクエスト本文(通常はリソース)を JavaScript オブジェクトとして指定します。
  2. パスまたは必須パラメータを個別の引数として指定します。メソッドに複数のパスパラメータが必要な場合は、API エンドポイント URL に記載されている順に表示されます。
  3. メディア アップロード添付ファイルを Blob 引数として指定します。
  4. 省略可能なパラメータ(通常はクエリ パラメータ)を、パラメータ名を値にマッピングする JavaScript オブジェクトとして指定します。
  5. HTTP リクエスト ヘッダーを、ヘッダー名をヘッダー値にマッピングする JavaScript オブジェクトとして指定します。

メソッドに特定のカテゴリの項目がない場合、シグネチャのその部分は省略されます。

次の例外に注意してください。

  • メディア アップロードを受け入れるメソッドの場合、パラメータ uploadType は自動的に設定されます。
  • Google API で delete という名前のメソッドは、Apps Script では remove という名前になります。これは、delete が JavaScript の予約語であるためです。
  • HTTP リクエスト ヘッダーを受け入れるように拡張サービスが構成されていて、リクエスト ヘッダーの JavaScript オブジェクトを設定する場合は、省略可能なパラメータの JavaScript オブジェクトも設定する必要があります(省略可能なパラメータを使用しない場合は空のオブジェクトに設定します)。

例: Calendar.Events.insert

カレンダー イベントを作成するには:

Google カレンダー API のドキュメントには、対応する HTTP リクエスト構造が記載されています。

  • HTTP 動詞: POST
  • リクエスト URL: https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events
  • リクエスト本文: イベント リソース

  • クエリ パラメータ: sendUpdatessupportsAttachments など。

Apps Script では、これらの入力を並べ替えることでメソッド シグネチャが決定されます。

  1. 本文: イベント リソース(JavaScript オブジェクト)。
  2. パス: calendarId(文字列)。
  3. 省略可能なパラメータ: クエリ パラメータ(JavaScript オブジェクト)。

結果として得られるメソッド呼び出しは次のようになります。

const event = {
  summary: 'Lunch',
  location: 'Deli',
  start: {
    dateTime: '2026-01-01T12:00:00-05:00'
  },
  end: {
    dateTime: '2026-01-01T13:00:00-05:00'
  }
};
const calendarId = 'primary';
const optionalArgs = {
  sendUpdates: 'all'
};

Calendar.Events.insert(event, calendarId, optionalArgs);

拡張サービスと HTTP のどちらを使用すべきか

各 Google 拡張サービスは、公開 Google API に関連付けられています。Apps Script では、拡張サービスを使用するか、 UrlFetch を使用して API リクエストを直接行うことで、これらの API にアクセスできます。

**拡張サービス メソッドを使用する場合** 、Apps Script は 認可フローを処理し、自動補完をサポートします。 拡張サービスを使用する前に有効にしてください。

UrlFetch メソッドを使用して API に直接アクセスする場合、Google API は 外部 API として扱われます。この方法では、API のすべての側面を使用できます。ただし、API の認可を処理する必要があります。

次の表に、2 つの方法を比較します。

機能 拡張サービス UrlFetch(HTTP)
認可 自動的に処理される 手動での処理が必要
自動補完 利用可能 利用不可
機能のスコープ API のサブセットの場合がある すべての API 機能にフルアクセスできる
複雑さ 簡単 複雑(ヘッダーの構築とレスポンスの解析が必要)

コードの比較

コードサンプルは、拡張サービスを使用してカレンダー イベントを作成する場合と、UrlFetchApp を使用する場合の複雑さの違いを示しています。

拡張サービス:

const event = {
  summary: 'Lunch',
  location: 'Deli',
  start: { dateTime: '2026-01-01T12:00:00-05:00' },
  end: { dateTime: '2026-01-01T13:00:00-05:00' }
};

const optionalArgs = {
  sendUpdates: 'all'
};

Calendar.Events.insert(event, 'primary', optionalArgs);

UrlFetch(HTTP):

const event = {
  summary: 'Lunch',
  location: 'Deli',
  start: { dateTime: '2026-01-01T12:00:00-05:00' },
  end: { dateTime: '2026-01-01T13:00:00-05:00' }
};
const url = 'https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=all';
const options = {
  method: 'post',
  contentType: 'application/json',
  headers: {
    Authorization: `Bearer ${ScriptApp.getOAuthToken()}`
  },
  payload: JSON.stringify(event)
};

UrlFetchApp.fetch(url, options);

UrlFetchApp メソッドの場合は、スクリプトの manifest file に必要な OAuth スコープを手動で指定します。

可能な限り拡張サービスを使用し、拡張サービスが利用できない場合や、必要な機能を提供していない場合にのみ UrlFetch メソッドを使用してください。

拡張サービスのサポート

拡張サービスは Google API のシンラッパーであるため、使用中に発生する問題は通常、Apps Script ではなく基盤となる API の問題です。

拡張サービスの使用中に問題が発生した場合は、基盤となる API のサポート手順に沿って報告してください。