共有ドライブのサポートを実装する

このドキュメントでは、Google Drive API を使用してアプリに共有ドライブのサポートを実装する方法について説明します。

共有ドライブは、マイドライブとは異なる組織、共有、所有権のモデルに従います。アプリで共有ドライブ上のファイルを作成して管理する場合は、アプリに共有ドライブのサポートを実装する必要があります。実装の複雑さは、アプリの機能によって異なります。

まず、アプリが次のオペレーションを実行するときに、リクエストに supportsAllDrives=true クエリ パラメータを含める必要があります。

Drive API v3

  • files.get
  • files.list
  • files.create
  • files.update
  • files.copy
  • files.delete
  • changes.list
  • changes.getStartPageToken
  • permissions.list
  • permissions.get
  • permissions.create
  • permissions.update
  • permissions.delete

Drive API v2

  • files.get
  • files.list
  • files.insert
  • files.update
  • files.patch
  • files.copy
  • files.trash
  • files.untrash
  • files.delete
  • files.touch
  • children.insert
  • parents.insert
  • changes.list
  • changes.getStartPageToken
  • changes.get
  • permissions.list
  • permissions.get
  • permissions.insert
  • permissions.update
  • permissions.patch
  • permissions.delete

supportsAllDrives=true パラメータは、アプリが共有ドライブ上のファイルを処理するように設計されていることを Google ドライブに通知します。

権限の読み取りまたは変更、変更の追跡、複数のコーパスの検索を行うアプリには、追加の共有ドライブ機能が必要です。このドキュメントの残りの部分では、これらのタスクを実行するために必要な追加の変更について説明します。

共有ドライブのコンテンツを検索する

list メソッドを files リソースで使用して、共有ドライブ内のユーザー ファイルを検索します。共有ドライブを検索するには、共有ドライブを検索するをご覧ください。

list メソッドには、共有ドライブ固有の次のクエリ パラメータが含まれています。

  • driveId: 検索する共有ドライブの ID。

  • corpora: クエリが適用されるアイテム(ファイルまたはドキュメント)の本文。 サポートされている本文は、userdomaindriveallDrives です。効率を高めるには、allDrives ではなく user または drive を使用してください。デフォルトでは、corpora は user に設定されています。

  • includeItemsFromAllDrives: マイドライブと共有ドライブの両方のアイテムを結果に含めるかどうか。存在しない場合、または false に設定されている場合、共有ドライブのアイテムは返されません。

  • supportsAllDrives: リクエスト元のアプリケーションがマイドライブと共有ドライブの両方をサポートしているかどうか。false の場合、共有ドライブのアイテムはレスポンスに含まれません。

次のクエリモードは、共有ドライブに固有のものです。

includeItemsFromAllDrives corpora クエリの説明
true user ユーザーがアクセスしたファイル(共有ドライブとマイドライブの両方のファイル)をクエリします。
true domain ドメインと共有されているファイル(共有ドライブとマイドライブの両方のファイル)をクエリします。
true drive 指定した共有ドライブ内のすべてのアイテムをクエリします。リクエストで driveId を指定する必要があります。
true allDrives ユーザーがアクセスしたファイルと、ユーザーがメンバーになっているすべての共有ドライブをクエリします。レスポンスに incompleteSearch:true が含まれる場合があります。これは、このリクエストで一部のコーパスが検索されなかったことを示します。

次のコードサンプルは、すべての共有ドライブとマイドライブでファイルを検索する方法を示しています。

Python

files = []
page_token = None
while True:
    response = drive_service.files().list(
        q="mimeType='application/vnd.google-apps.folder'",
        spaces='drive',
        corpora='allDrives',
        supportsAllDrives=True,
        includeItemsFromAllDrives=True,
        fields='nextPageToken, files(id, name)',
        pageToken=page_token
    ).execute()
    files.extend(response.get('files', []))
    page_token = response.get('nextPageToken', None)
    if not page_token:
        break

Node.js

let files = [];
let pageToken = null;
do {
  const response = await drive_service.files.list({
    q: "mimeType='application/vnd.google-apps.folder'",
    spaces: 'drive',
    corpora: 'allDrives',
    supportsAllDrives: true,
    includeItemsFromAllDrives: true,
    fields: 'nextPageToken, files(id, name)',
    pageToken: pageToken
  });
  files = files.concat(response.data.files);
  pageToken = response.data.nextPageToken;
} while (pageToken);

Java

List<File> files = new ArrayList<>();
String pageToken = null;
do {
  FileList result = driveService.files().list()
      .setQ("mimeType='application/vnd.google-apps.folder'")
      .setSpaces("drive")
      .setCorpora("allDrives")
      .setSupportsAllDrives(true)
      .setIncludeItemsFromAllDrives(true)
      .setFields("nextPageToken, files(id, name)")
      .setPageToken(pageToken)
      .execute();
  files.addAll(result.getFiles());
  pageToken = result.getNextPageToken();
} while (pageToken != null);

curl

curl -X GET \
  'https://www.googleapis.com/drive/v3/files?corpora=allDrives&includeItemsFromAllDrives=true&supportsAllDrives=true&fields=nextPageToken%2Cfiles(id%2Cname)' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Accept: application/json'

ACCESS_TOKEN は、アプリの OAuth 2.0 トークンに置き換えます。

共有ドライブの変更を追跡する

list メソッドを changes リソースで使用して、共有ドライブの変更を追跡します。詳細については、ユーザーと共有 ドライブの変更を追跡するをご覧ください。

list メソッドには、共有ドライブ固有の次のクエリ パラメータが含まれています。

  • driveId: 変更が返される共有ドライブ。指定した場合、変更 ID は、ファイルの現在の状態を提供する共有ドライブ内のアイテムの変更を参照します。特定の共有ドライブの変更を参照するには、共有ドライブ ID と変更 ID の両方を識別子として使用する必要があります。

  • includeItemsFromAllDrives: 共有ドライブのファイルまたは変更を変更リストに含めるかどうか。

  • supportsAllDrives: リクエスト元のアプリケーションが共有ドライブをサポートしているかどうか。false の場合、共有ドライブと共有ドライブ内のファイルの両方を含む共有ドライブのアイテムは返されません。

次のクエリモードは、共有ドライブに固有のものです。

includeItemsFromAllDrives driveId クエリの説明
true いいえ 変更は、ユーザーがアクセスした共有ドライブの内外のファイルに対する変更と、ユーザーがメンバーになっている共有ドライブに対する変更を反映しています。
true はい 変更は、指定した特定の共有ドライブと、その共有ドライブ内のアイテムに対する変更を反映しています。

次のコードサンプルは、共有ドライブの変更を追跡する方法を示しています。

Python

# 1. Get the start page token for the shared drive.
response = drive_service.changes().getStartPageToken(
    supportsAllDrives=True,
    driveId='SHARED_DRIVE_ID'
).execute()
start_page_token = response.get('startPageToken')

# 2. List changes starting from the page token.
response = drive_service.changes().list(
    pageToken=start_page_token,
    supportsAllDrives=True,
    includeItemsFromAllDrives=True,
    driveId='SHARED_DRIVE_ID'
).execute()
changes = response.get('changes', [])

Node.js

// 1. Get the start page token for the shared drive.
const tokenResponse = await drive_service.changes.getStartPageToken({
  supportsAllDrives: true,
  driveId: 'SHARED_DRIVE_ID'
});
const startPageToken = tokenResponse.data.startPageToken;

// 2. List changes starting from the page token.
const response = await drive_service.changes.list({
  pageToken: startPageToken,
  supportsAllDrives: true,
  includeItemsFromAllDrives: true,
  driveId: 'SHARED_DRIVE_ID'
});
const changes = response.data.changes;

Java

// 1. Get the start page token for the shared drive.
StartPageToken tokenResult = driveService.changes().getStartPageToken()
    .setSupportsAllDrives(true)
    .setDriveId("SHARED_DRIVE_ID")
    .execute();
String startPageToken = tokenResult.getStartPageToken();

// 2. List changes starting from the page token.
ChangeList changesResult = driveService.changes().list(startPageToken)
    .setSupportsAllDrives(true)
    .setIncludeItemsFromAllDrives(true)
    .setDriveId("SHARED_DRIVE_ID")
    .execute();
List<Change> changes = changesResult.getChanges();

curl

# 1. Get the start page token for the shared drive.
curl -X GET \
  'https://www.googleapis.com/drive/v3/changes/startPageToken?supportsAllDrives=true&driveId=SHARED_DRIVE_ID' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Accept: application/json'

# 2. List changes starting from the page token.
curl -X GET \
  'https://www.googleapis.com/drive/v3/changes?pageToken=START_PAGE_TOKEN&supportsAllDrives=true&includeItemsFromAllDrives=true&driveId=SHARED_DRIVE_ID' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Accept: application/json'

次のように置き換えます。

  • SHARED_DRIVE_ID: 共有ドライブの ID。
  • ACCESS_TOKEN:アプリの OAuth 2.0 トークン。
  • START_PAGE_TOKEN: 共有ドライブのスタートページトークン。

SHARED_DRIVE_ID は、共有ドライブの ID に置き換えます。

ドライブ UI で共有ドライブのサポートを有効にする

ドライブ UI を使用して共有ドライブのコンテンツにアクセスするには、Google Cloud コンソールの Google Drive API の [ドライブ UI 統合] タブで [共有ドライブのサポート] チェックボックスがオンになっていることを確認してください。詳細については、ドライブ UI 統合を構成するをご覧ください。

Google Picker を共有ドライブで使用する

Google Picker では、共有 ドライブ内のアイテムを選択できます。共有ドライブのサポートを有効にして、ピッカーに共有ドライブ ビューを追加する方法について詳しくは、Google Picker APIをご覧ください。