高度な Google サービス

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

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

高度な Google サービスを使用する手順は次のとおりです。

ステップ 1: 詳細サービスを有効にする

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

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

  1. Apps Script プロジェクトを開きます。
  2. 左側の [エディタ] をクリックします。
  3. 左側の [サービス] の横にある [サービスを追加] をクリックします。
  4. 高度な Google サービスを選択し、[追加] をクリックします。

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

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

{
  "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 によって自動的に作成される)を使用している場合は、この手順をスキップします。API は、ステップ 1 でサービスを追加すると自動的に有効になります。

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

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

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

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

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

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

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

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

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 Calendar API のドキュメントには、対応する HTTP リクエスト構造が示されています。

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

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

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

  1. Body: イベント リソース(JavaScript オブジェクト)。
  2. Path: 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 メソッドの場合は、スクリプトのマニフェスト ファイルで必要な OAuth スコープを手動で指定します。

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

高度なサービスのサポート

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

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