Google Apps Scriptで共有ドライブをコントロールする

G Suite for Business以上には、Google Driveをファイルサーバのように扱える「Team Drive」こと「共有ドライブ」という機能があります。チームやプロジェクト単位で共有するドライブで、誰が見ても同じフォルダ・ファイル構成で、オーナーは特定個人ではなくチームドライブ自身がオーナーになるため、ファイルサーバから移行がしやすい機能ですね。

さて、このチームドライブですが、Google Apps Scriptから「作成」やファイルの移動が出来るのですが、これまでのようなDriveAppで単純に操作ができません。使えないわけではないのですが、以上のようなチームドライブの特性上そのままだと一部、操作ができないようになっている為です。

今回のまとめは、Google Apps Scriptからチームドライブを操作する一連の作業となります。

難易度:


今回使用するスプレッドシート

事前準備

Drive APIを有効にする

今回のスクリプトはDrive API v2を利用します。よって、以下の手順に従って、Drive APIをONにする必要性があります。

  1. スクリプトエディター画面に於いて、メニューの「リソース」⇒「Googleの拡張サービス」を開く
  2. Drive APIを探しだして、トグルをONにする

これでDrive APIがGoogle Apps ScriptでDrive APIを使えるようになります。場合によっては、Cloud Console側でもONにし、プロジェクト番号を紐つける必要性もあります。紐付け作業はこちらのページを参考にしてみてください。

図:Drive APIをオンにした

権限一覧を整備する

チームドライブにメンバーを追加や権限付与する場合には、スプレッドシートの権限一覧シートに於いてメンバーのメアド、権限を選択して整備する必要があります。この時、権限ですが、以下の通りとなります。

  • organizer : 管理者
  • fileOrganizer : コンテンツ管理者
  • writer : 投稿者
  • commenter : 閲覧者(コメント可)
  • reader : 閲覧者

管理者は複数設定できます。但し、1人に与えられる権限は1個です。

ソースコード

新規作成

  • チームドライブを直接作成するコードです。
  • 変数teamDriveには、ドライブのIDなどの情報が返ってきます。
  • ドライブのIDといっても、通常のフォルダと同じで、ドライブ直下のディレクトリのIDと同じです。
  • 名前を指定して作成を実行するだけです。

共有権限一覧取得

  • 対象のチームドライブ上に設定されている権限(メアドと権限名)を返します。

図:権限の一覧がダイアログで表示される

チームドライブ一覧

  • 現在用意されているチームドライブの一覧(名前とID)を返します。

チームドライブ管理者一覧

  • 対象のチームドライブに管理者権限を持っている人の一覧を返します。

チームドライブに権限付与

  • 対象のチームドライブに権限付与・新規メンバーの追加を行います。
  • スプレッドシートの権限一覧シートから設定を行います。

チームドライブにファイル作成

  • 通常のドライブと同じく、DriveAppにて新規ファイル作成が可能です。
  • ただし、ファイルのremoveやaddは使えません。あくまでも新規作成だけです。

チームドライブにフォルダコピー

  • これがちょっとややこしく、素直にDriveAppで.addメソッドで行おうとすると失敗します。
  • makeCopyメソッドで複製させます。
  • 移動の場合は、複製後に移動元のファイルをremoveすればOK
  • 今回のメソッドはフォルダ構造維持してまるごとコピーします。

チームドライブにファイル移動や削除

GASだけでチームドライブの間でファイルの移動ができるか?といったら答えはNoです。新規に作る分にはDriveAppが使えますが。チームドライブのファイルの編集自体はDrive APIを介して行う事ができます。

  • この方法では、コピーではなく移動ができています。なので、ファイルのIDが変更されることがありません。
  • ファイルの削除も編集作業なので、Drive APIを用いて行います。
  • チームドライブ間のファイルの移動も可能です。
  • targetfolderidが移動先のフォルダのID、fileidが移動させるファイルのIDになります。

関連リンク

共有してみる:

Google Apps Scriptで共有ドライブをコントロールする” に対して6件のコメントがあります。

  1. hajimechan より:

    チームドライブ内の特定のフォルダから、チームドライブ内の別のフォルダに、
    特定のスプレッドシートを移動させることは可能でしょうか。

    1. akanemaru2017 より:

      記事に、チームドライブ内のファイルの削除およびチームドライブ間ファイルの移動のコードを追加しておきました。
      こちらもDriveAppでは操作ができません。Drive APIを利用する事になります。

      1. hajimechan より:

        ありがとうございます!試してみます。

      2. hajimechan より:

        試したところ、成功しました。ありがとうございます。

        ただ、Drive APIを有効にする部分もGAS内で済ませたく「UrlFetchApp」を使って認証させようとしたのですが、うまくいかず困ってます。

        GASのスクリプトからDrive APIを有効化させることは可能でしょうか?

        1. akanemaru2017 より:

          Cloud Console側は、コードを記述するだけでDrive APIは有効になるようです。ですが、GAS側は手動で行わないと出来ないようです。
          https://qiita.com/tanaike/items/1d49f73ab05403d0fe4c

          ですが、Drive APIは様式さえ守れば、色々なアプリからHTTP通信で叩けるので、以下のサイトのようにUrlFetchAppにて直接APIを叩くことで同様のことは実現できます。
          ただし、コードがかなり冗長にはなるかと思います。
          https://stackoverflow.com/questions/48310761/how-to-make-a-drive-api-batch-request-with-urlfetchapp-in-google-apps-script

  2. tichikawa より:

    参考にさせてもらって助かりました。
    ところで自分の環境では権限の中に permission.deleted が trueなものがあって、
    それを除いて取得する必要がありました。

    あと、共有ドライブの『設定』は
    teamDrive.restrictions.xxx で見えるものっぽいですが、
    Drive.Drives.list({~, fields:’*’ }) とかも付けておかないと取れないもののようですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。