初心者でもわかるGoogle Apps Script活用のススメ

【コピペで使える】Googleドライブの共有設定をGASで取得する

今回の記事では、GASでフォルダやファイルの共有設定(アクセス権限)を取得する方法をご紹介します。

ファイルが多くなってくるとどのファイルが誰に共有されているのかを管理することが非常に大変になってきます。そんなときに、対象のフォルダに格納されたフォルダやファイルの共有設定を一括で自動的に取得できればとてもありがたいのではないでしょうか。

今回はそんな共有設定を一括で取得する方法をご紹介します。

本記事が役立つターゲット読者

  • 大量のフォルダやファイルを複数のアカウントに共有している方
  • 共有設定が誰にされているかわからない方
  • 共有権限を一括で修正したい方

共有設定の付与や削除については、別記事でまとめていますので、関連記事をご確認ください。

フォルダやファイルの共有設定を取得するコード

本ページでは、ドライブの共有設定を取得する方法をご紹介します。

  1. getAccess(指定したアカウントの共有権限を取得)
  2. getEditors(編集権限のあるアカウントを取得)
  3. getOwner(フォルダやファイルのオーナーのアカウントを取得)
  4. getSharingAccess(一般的なアクセス範囲を取得)
  5. getSharingPermission(一般的なアクセス権限を取得)
  6. getViewers(閲覧権限のあるアカウントを取得)

getCommentersというメソッドは現時点(2022年6月)では無いようです。仲間外れですね。

記事で紹介するメソッド一覧

getAccess(email)のサンプルコード

引数に入れる値

サンプルコード

const fileId = "1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ"; //https://docs.google.com/spreadsheets/d/1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ/

//メールアドレスで共有設定を取得するサンプルコード
function sampleCodeForGetAccessByEmail() {
  let email = "admin@for-dummies.net";
  let file = DriveApp.getFileById(fileId);
  let access = file.getAccess(email);
  console.log(access === DriveApp.Permission.OWNER);
}

変数の説明

fileId = ファイルID
email = 共有設定を取得したい対象アカウントのメールアドレス
file = 共有設定を取得したい対象のファイル
access = 対象アカウントの共有設定

上記のコードでは、メールアドレスを指定してそのアカウントがなんの権限を持っているのかを確認することができます。

返り値にはPermissionオブジェクトが返ってきますので、Permissionで紹介しているいずれかの値が返ってきます。

使用シーンとしては、ifなどを使って共有設定によって処理を分岐させたいときなどに利用します。例えば、上記のサンプルコードでは、対象のファイルはadmin@for-dummies.netがオーナーのファイルですので、console.logの出力結果はtrueとなります。

このように、共有設定によって処理を分けたい場合に有効なメソッドとなります。

これを応用すると、編集権限を持っていないユーザーがアクセスした場合に、権限を付与するといったことや、ファイルAへの編集権限があるアカウントのみファイルBへの編集権限を付与するといった処理につなげる事ができるようになります。

getAccess(user)のサンプルコード

引数に入れる値

サンプルコード

const fileId = "1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ"; //https://docs.google.com/spreadsheets/d/1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ/

//ユーザーオブジェクトで共有設定を取得するサンプルコード
function sampleCodeForGetAccessByUser() {
  let file = DriveApp.getFileById(fileId);
  let owner = file.getOwner();
  let access = file.getAccess(user);
  console.log(access === DriveApp.Permission.OWNER);
}

変数の説明

fileId = ファイルID
file = 共有設定を取得したい対象のファイル
owner = getOwnerで取得したユーザーオブジェクト
access = 対象アカウントの共有設定

これも、getAccess(email)と同じ結果になりますが、今回はユーザーオブジェクトで対象のアカウントを指定しています。
ユーザーオブジェクトは本記事でご紹介する下記のメソッドで取得ができます。

上記のファイルIDもadmin@for-dummies.netがオーナー権限を持っていますので、console.logの出力結果はtrueとなります。

オーナー権限以外と比較したい場合は、

  • DriveApp.Permission.VIEW(閲覧権限)
  • DriveApp.Permission.EDIT(編集権限)
  • DriveApp.Permission.COMMENT(コメント権限)
  • DriveApp.Permission.ORGANIZER(共有ドライブのコンテンツ管理者権限)
  • DriveApp.Permission.NONE(権限なし)

が指定できます。

getEditors()のサンプルコード

引数に入れる値

引数の指定なし

サンプルコード

const fileId = "1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ"; //https://docs.google.com/spreadsheets/d/1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ/

//編集権限を持つアカウントのユーザーオブジェクトを取得するサンプルコード
function sampleCodeForGetEditors() {
  let file = DriveApp.getFileById(fileId);
  let editors = file.getEditors();
  for (let i in editors) {
    let name = editors[i].getName();
    let domain = editors[i].getDomain();
    let email = editors[i].getEmail();
    let photoUrl = editors[i].getPhotoUrl();
    let loginId = editors[i].getUserLoginId();
    console.log(name, domain, email, photoUrl, loginId);
  }
}

変数の説明

fileId = ファイルID
file = 共有設定を取得したい対象のファイル
editors = 対象ファイルの編集権限アカウントのユーザーオブジェクトの配列
name = 対象アカウントの表示名
domain = 対象アカウントのドメイン(メールアドレスの@マーク以下)
email = 対象アカウントのメールアドレス
photoUrl = 対象アカウントのプロフィール写真のURL
loginId = 対象アカウントのログインID(私が試したアカウントではメールアドレスと同じものが取得できました)

ユーザーオブジェクトはDriveAppのクラスの一つで、上記のように

  • メールアドレス
  • ドメイン
  • ユーザー表示名
  • プロフィール写真

を取得することができます。
ユーザーオブジェクトについては、DriveAppで使えるコード一覧でも項目がありますので、そちらでもご確認ください。

getSharingAccess()のサンプルコード

引数に入れる値

引数の指定なし

サンプルコード

const fileId = "1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ"; //https://docs.google.com/spreadsheets/d/1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ/

//一般的なアクセス範囲を取得するサンプルコード
function sampleCodeForGetSharingAccess() {
  let file = DriveApp.getFileById(fileId);
  let sharingAccess = file.getSharingAccess();
  console.log(sharingAccess === DriveApp.Access.ANYONE_WITH_LINK);
}

変数の説明

fileId = ファイルID
file = 共有設定を取得したい対象のファイル
sharingAccess = 一般的なアクセス範囲の取得

getSharingAccessは一般的なアクセス範囲がどこまでなのかを取得することができます。

一般的なアクセス範囲とは、共有設定を変更する画面の「リンクを知っている全員」や「制限付き」を設定できる部分です。

一般的なアクセス範囲の設定画面

一般的なアクセス範囲の選択肢は、Google Workspaceユーザーと無料のGmailユーザーで選択できる項目が異なります。

無料ユーザーの選択肢

  • 制限付き
  • リンクを知っている全員

Google Workspaceの選択肢

  • 制限付き
  • ドメイン内のリンクを知っている全員
  • リンクを知っている全員

Google Workspaceではドメイン内に限定して公開することができるため、セキュリティ性がより高くなっていますね。

getSharingAccessでは、Accessオブジェクトが取得できますので、DriveApp.Access.ANYONE_WITH_LINK(リンクを知っている全員)などで取得できる値と等しくなります。

DriveApp.Access.ANYONE_WITH_LINK以外には、次のようなものが指定できます。

  • ANYONE(Googleアカウントを持っていないユーザーも含む全員)
  • DOMAIN(ドメイン内の全員)
  • DOMAIN_WITH_LINK(ドメイン内のリンクを知っている全員)
  • PRIVATE(制限付き)

こちらも、getAccessと同じように、条件分岐などを利用してアクセス範囲などを設定したりすることができそうですね。

getSharingPermission()のサンプルコード

引数に入れる値

引数の指定なし

サンプルコード

const fileId = "1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ"; //https://docs.google.com/spreadsheets/d/1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ/

//一般的なアクセス権限を取得するサンプルコード
function sampleCodeForGetSharingPermission() {
  let file = DriveApp.getFileById(fileId);
  let sharingPermission = file.getSharingPermission();
  console.log(sharingPermission === DriveApp.Permission.VIEW);
}

変数の説明

fileId = ファイルID
file = 共有設定を取得したい対象のファイル
sharingPermission = 一般的なアクセス権限の取得

getSharingPermissionでは一般的なアクセス権限を取得することができます。

一般的なアクセス権限とは、共有設定画面の「閲覧者」「閲覧者(コメント可)」「編集者」を選択する部分です。

一般的なアクセス権限の設定画面

getSharingPermissionでは、Permissionオブジェクトが取得できますので、DriveApp.Permission.EDIT(編集者)などで取得できる値と等しくなります。

getOwner()のサンプルコード

引数に入れる値

引数の指定なし

サンプルコード

const fileId = "1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ"; //https://docs.google.com/spreadsheets/d/1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ/

//オーナー権限を持つアカウントのユーザーオブジェクトを取得するサンプルコード
function sampleCodeForGetOwner() {
  let file = DriveApp.getFileById(fileId);
  let owner = file.getOwner();
  let name = owner.getName();
  let domain = owner.getDomain();
  let email = owner.getEmail();
  let photoUrl = owner.getPhotoUrl();
  let loginId = owner.getUserLoginId();
  console.log(name, domain, email, photoUrl, loginId);
}

変数の説明

fileId = ファイルID
file = 共有設定を取得したい対象のファイル
owner = 対象ファイルのオーナー権限アカウントのユーザーオブジェクト
name = 対象アカウントの表示名
domain = 対象アカウントのドメイン(メールアドレスの@マーク以下)
email = 対象アカウントのメールアドレス
photoUrl = 対象アカウントのプロフィール写真のURL
loginId = 対象アカウントのログインID(私が試したアカウントではメールアドレスと同じものが取得できました)

ユーザーオブジェクトはDriveAppのクラスの一つで、上記のように

  • メールアドレス
  • ドメイン
  • ユーザー表示名
  • プロフィール写真

を取得することができます。
ユーザーオブジェクトについては、DriveAppで使えるコード一覧でも項目がありますので、そちらでもご確認ください。

getEditorsやgetViewersは複数形で記述されますが、オーナーは一つのファイルにつき1つのアカウントしかいませんので、getOwnerと単数形で記述します。

getViewers()のサンプルコード

引数に入れる値

引数は指定なし

サンプルコード

const fileId = "1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ"; //https://docs.google.com/spreadsheets/d/1LIS5eWCxlkgTRqKPdJ3ziUCcwFmLOlrejIekDlKsjkQ/

//閲覧権限を持つアカウントのユーザーオブジェクトを取得するサンプルコード
function sampleCodeForGetViewers() {
  let file = DriveApp.getFileById(fileId);
  let viewers = file.getViewers();
  for (let i in viewers) {
    let name = viewers[i].getName();
    let domain = viewers[i].getDomain();
    let email = viewers[i].getEmail();
    let photoUrl = viewers[i].getPhotoUrl();
    let loginId = viewers[i].getUserLoginId();
    console.log(name, domain, email, photoUrl, loginId);
  }
}

変数の説明

fileId = ファイルID
file = 共有設定を取得したい対象のファイル
viewers = 対象ファイルの閲覧権限アカウントのユーザーオブジェクトの配列
name = 対象アカウントの表示名
domain = 対象アカウントのドメイン(メールアドレスの@マーク以下)
email = 対象アカウントのメールアドレス
photoUrl = 対象アカウントのプロフィール写真のURL
loginId = 対象アカウントのログインID(私が試したアカウントではメールアドレスと同じものが取得できました)

ユーザーオブジェクトはDriveAppのクラスの一つで、上記のように

  • メールアドレス
  • ドメイン
  • ユーザー表示名
  • プロフィール写真

を取得することができます。
ユーザーオブジェクトについては、DriveAppで使えるコード一覧でも項目がありますので、そちらでもご確認ください。

まとめ

今回の記事では、フォルダやファイルの共有設定を取得するメソッドをまとめてご紹介しました。

実際の利用シーンでは、共有設定を取得するだけでなく、その後条件分岐や権限の付与 / 削除などをするためのメソッドと併用しながら、より複雑な処理につなげていくことになると思います。

今回はそのベースとなる機能を学びました。

Exit mobile version