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

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

GASでGoogleドライブのフォルダやファイルへの共有設定を付与する

今回の記事では、Googleドライブのフォルダやファイルに対して、GASを使ってアクセス権限を付与するやり方をお伝えします。アクセス権限とは、その名の通り、対象のフォルダやファイルにアクセスができる権限を指すのですが、手動で行う場合は共有メニューから設定を行います。

本記事では、その作業をGASを使ってどのようにアクセス権限を付与するのかを学んでいきます。

アクセス権限を取得や削除する方法は下記の記事を参考にしてください。

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

  • GASで一括アクセス権限を変更したい方
  • 自動的にアクセス権限を変更したい方

アクセス権限を付与するコード

本ページでは、アクセス権限を変更するメソッドをご紹介します。

  1. addCommenter(コメント権限を付与する)
  2. addCommenters(複数アカウントにコメント権限を付与する)
  3. addEditor(編集権限を付与する)
  4. addEditors(複数アカウントに編集権限を付与する)
  5. addViewer(閲覧権限を付与する)
  6. addViewers(複数アカウントに閲覧権限を付与する)
  7. setOwner(オーナー権限を設定する)

アクセス権限を付与するメソッドには上記のように様々なメソッドがあります。

権限のによるできることについては、下記のようになります。
上から権限が強い順に並べてあります。

オーナー権限

すべての権限を有する

オーナー権限にしかできないこと

  • フォルダやファイルの削除
  • オーナー権限の変更
編集権限

削除とオーナー権限の変更以外のすべての権限を有する

編集権限できること

  • フォルダやファイルの閲覧・編集
  • フォルダやファイルの共有権限の変更
  • ファイルのコピー
  • ファイルへのコメント
コメント権限

フォルダやファイルの閲覧とコメントをすることができる権限を有する

コメント権限でできること

  • フォルダやファイルの閲覧
  • オーナーにフォルダやファイルの他の人に共有権限を付与するリクエストを送信
  • ファイルのコピー
  • ファイルへのコメント
閲覧権限

フォルダやファイルの閲覧のみ可能な権限

閲覧権限でできること

  • フォルダやファイルの閲覧
  • オーナーにフォルダやファイルの他の人に共有権限を付与するリクエストを送信
  • ファイルのコピー

上位権限では下位権限でできる権限はすべて持っている

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

addCommenter(emailAddress)のサンプルコード

まずはコメント権限を付与するコードです。

引数に入れる値

サンプルコード

//ファイルにコメント権限を付与するコード
function sampleCodeForSetCommenterOfFileByEmail() {
  let emailAddress = "admin@for-dummies.net";
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFile = outputFolder.createFile(now + "コメント権限サンプルファイル","サンプルファイル", "text/plain");
  createdFile.addCommenter(emailAddress);
}

変数の説明

emailAddress = コメント権限を付与するメールアドレス
folder = マイドライブを代入
outputFolders = ドライブ内のすべてのフォルダを代入
outputFolder = サンプルファイル出力フォルダを代入(なければフォルダを作成して代入)
now = 現在の時刻をyyyMMddHHmmss形式で代入
createFile = 新しいファイルを作成して代入
createFolder = 新しいフォルダを作成して代入

上記のサンプルコードでは、Googleドライブ内から「サンプルファイル出力フォルダ」があれば、そのフォルダの中に新しいフォルダ/ファイルを作成して特定のアカウントにコメント権限を付与するようにしてあります。

コードをコピーして利用する際はemailAddressを修正してご利用ください。

メールアドレスを利用すれば簡単に対象のメールアドレスにコメント権限を付与することができます。メールアドレスにはGmail以外も設定することができますが、コメントをするにはGoogleにアクセスする必要がありますので、Gmail以外のアカウントにをコメント権限を付与してもあまり意味がありません。

権限の付与はGmailアカウントに付与するようにしよう

フォルダにはaddCommenterは使えないのですが、それはそもそもフォルダにはコメントをする機能がそもそも無いからです。

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

引数に入れる値

サンプルコード

//Userオブジェクトを使ってファイルにコメント権限を付与するコード
function sampleCodeForSetCommenterOfFileByUser() {
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFile = outputFolder.createFile(now + "コメント権限サンプルファイル","サンプルファイル", "text/plain");
  let file = DriveApp.getFileById("16w3ZcseTDFSDqWOQB4ZlJkq9qYfwaRPn02OOJNiPqyQ");
  let viewers = file.getViewers();
  for (let i in viewers) {
    let user = viewers[i];
    createdFile.addCommenter(user);
  }
}

変数の説明

folder = マイドライブを代入
outputFolders = ドライブ内のすべてのフォルダを代入
outputFolder = サンプルファイル出力フォルダを代入(なければフォルダを作成して代入)
now = 現在の時刻をyyyMMddHHmmss形式で代入
createFile = 新しいファイルを作成して代入
createFolder = 新しいフォルダを作成して代入
file = Userオブジェクトを取得するためのファイル
viewers = fileで指定したファイルの閲覧権限のUserオブジェクト
user = Userオブジェクト

DriveAppのUserクラスオブジェクトを使ってコメント権限を付与するやり方です。
DriveAppでUserクラスオブジェクトを取得するメソッドは下記の通りです。

  1. getEditors(編集権限を持つUserを配列で取得)
  2. getOwner(オーナー権限を持つUserを取得)
  3. getViewers(閲覧権限を持つUserを配列で取得)

addCommenter(user)では要するに、他のファイルの権限と同じ権限を対象のファイルに付与することが得意なメソッドだと言えると思います。

面白いことに、addCommenterはメソッドとして存在しますが、getCommenterは存在しません(2022年6月7日執筆時点)。あとで追加されるかもしれませんね。

getOwnerが複数形でないのは、オーナー権限を持つアカウントは常に1つのアカウントだから単数形なのですね。英語を勉強しているとこのあたりが理解しやすくて助かります。

皆さん、プログラムの勉強には英語の知識がとても相性が良いです

ということで、addCommenter(user)ではUserオブジェクトを他のファイルから取得して、それを使ってファイルにコメント権限を付与するという流れになります。

addCommenters(emailAddresses)のサンプルコード

引数に入れる値

サンプルコード

//複数のユーザーに一括でファイルにコメント権限を付与するコード
function sampleCodeForSetCommentersOfFileByEmails() {
  let emailAddresses = ["admin@for-dummies.net", "xxxx@for-dummies.net"];
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFile = outputFolder.createFile(now + "コメント権限サンプルファイル","サンプルファイル", "text/plain");
  createdFile.addCommenters(emailAddresses);
}

変数の説明

emailAddresses = メールアドレスを配列で代入
folder = マイドライブを代入
outputFolders = ドライブ内のすべてのフォルダを代入
outputFolder = サンプルファイル出力フォルダを代入(なければフォルダを作成して代入)
now = 現在の時刻をyyyMMddHHmmss形式で代入
createFile = 新しいファイルを作成して代入
createFolder = 新しいフォルダを作成して代入

addCommenter(emailAddress)の使い方と殆ど変わりませんが、addCommenterを複数形にして、単一のメールアドレスを引数としていたところを配列でメールアドレスを複数入れたものを引数として渡してあげれば、一括でコメント権限を付与することができます。

addEditor(emailAddress)のサンプルコード

次に編集権限を付与するコードです。使い方はコメント権限を付与するaddCommenter(emailAddress)と全く同じですが、コメント権限以外のアクセス権限については、ファイルだけでなくフォルダにも権限付与することができます

引数に入れる値

サンプルコード

//フォルダに編集権限を付与するコード
function sampleCodeForSetEditorOfFolderByEmail() {
  let emailAddress = "admin@for-dummies.net";
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFolder = outputFolder.createFolder(now + "編集権限サンプルフォルダ");
  createdFolder.addEditor(emailAddress);
}

//ファイルに編集権限を付与するコード
function sampleCodeForSetEditorOfFileByEmail() {
  let emailAddress = "admin@for-dummies.net";
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFile = outputFolder.createFile(now + "編集権限サンプルファイル","サンプルファイル", "text/plain");
  createdFile.addEditor(emailAddress);
}

変数の説明

emailAddress = 編集権限を付与するメールアドレス
folder = マイドライブを代入
outputFolders = ドライブ内のすべてのフォルダを代入
outputFolder = サンプルファイル出力フォルダを代入(なければフォルダを作成して代入)
now = 現在の時刻をyyyMMddHHmmss形式で代入
createFile = 新しいファイルを作成して代入
createFolder = 新しいフォルダを作成して代入

上記のサンプルコードでは、コメント権限の付与と同じようにGoogleドライブ内から「サンプルファイル出力フォルダ」があれば、そのフォルダの中に新しいフォルダ/ファイルを作成して特定のアカウントに編集権限を付与するようにしてあります。

コードをコピーして利用する際はemailAddressを修正してご利用ください。

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

引数に入れる値

サンプルコード

//Userオブジェクトを使ってフォルダに編集権限を付与するコード
function sampleCodeForSetEditorOfFolderByUser() {
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFolder = outputFolder.createFolder(now + "編集権限サンプルフォルダ");
  let file = DriveApp.getFileById("16w3ZcseTDFSDqWOQB4ZlJkq9qYfwaRPn02OOJNiPqyQ");
  let editors = file.getEditors();
  for (let i in editors) {
    let user = editors[i];
    createdFolder.addEditor(user);
  }
}

//Userオブジェクトを使ってファイルに編集権限を付与するコード
function sampleCodeForSetEditorOfFileByUser() {
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFile = outputFolder.createFile(now + "編集権限サンプルファイル","サンプルファイル", "text/plain");
  let file = DriveApp.getFileById("16w3ZcseTDFSDqWOQB4ZlJkq9qYfwaRPn02OOJNiPqyQ");
  let editors = file.getEditors();
  for (let i in editors) {
    let user = editors[i];
    createdFile.addEditor(user);
  }
}

変数の説明

folder = マイドライブを代入
outputFolders = ドライブ内のすべてのフォルダを代入
outputFolder = サンプルファイル出力フォルダを代入(なければフォルダを作成して代入)
now = 現在の時刻をyyyMMddHHmmss形式で代入
createFile = 新しいファイルを作成して代入
createFolder = 新しいフォルダを作成して代入
file = Userオブジェクトを取得するためのファイル
editors = fileで指定したファイルの編集権限のUserオブジェクト
user = Userオブジェクト

addEditors(emailAddresses)のサンプルコード

引数に入れる値

サンプルコード

//複数のユーザーに一括でファイルにコメント権限を付与するコード
function sampleCodeForSetEditorsOfFileByEmails() {
  let emailAddresses = ["admin@for-dummies.net", "xxxx@for-dummies.net"];
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFile = outputFolder.createFile(now + "サンプルファイル","サンプルファイル", "text/plain");
  createdFile.addEditors(emailAddresses);
}

変数の説明

emailAddresses = メールアドレスを配列で代入
folder = マイドライブを代入
outputFolders = ドライブ内のすべてのフォルダを代入
outputFolder = サンプルファイル出力フォルダを代入(なければフォルダを作成して代入)
now = 現在の時刻をyyyMMddHHmmss形式で代入
createFile = 新しいファイルを作成して代入
createFolder = 新しいフォルダを作成して代入

addEditor(emailAddress)の使い方と殆ど変わりませんが、addEditorを複数形にして、単一のメールアドレスを引数としていたところを配列でメールアドレスを複数入れたものを引数として渡してあげれば、一括で編集権限を付与することができます。

addViewer(emailAddress)のサンプルコード

次は閲覧権限を付与するコードです。

引数に入れる値

サンプルコード

//フォルダに閲覧権限を付与するコード
function sampleCodeForSetViewerOfFolderByEmail() {
  let emailAddress = "admin@for-dummies.net";
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.getFolders();
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFolder = outputFolder.createFolder(now + "閲覧権限サンプルフォルダ");
  createdFolder.addViewer(emailAddress);
}

//ファイルに閲覧権限を付与するコード
function sampleCodeForSetViewerOfFileByEmail() {
  let emailAddress = "admin@for-dummies.net";
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFile = outputFolder.createFile(now + "閲覧権限サンプルファイル","サンプルファイル", "text/plain");
  createdFile.addViewer(emailAddress);
}

変数の説明

emailAddress = コメント権限を付与するメールアドレス
folder = マイドライブを代入
outputFolders = ドライブ内のすべてのフォルダを代入
outputFolder = サンプルファイル出力フォルダを代入(なければフォルダを作成して代入)
now = 現在の時刻をyyyMMddHHmmss形式で代入
createFile = 新しいファイルを作成して代入
createFolder = 新しいフォルダを作成して代入

上記のサンプルコードでは、Googleドライブ内から「サンプルファイル出力フォルダ」があれば、そのフォルダの中に新しいフォルダ/ファイルを作成して特定のアカウントに閲覧権限を付与するようにしてあります。

コードをコピーして利用する際はemailAddressを修正してご利用ください。

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

引数に入れる値

サンプルコード

//Userオブジェクトを使ってフォルダに閲覧権限を付与するコード
function sampleCodeForSetViewerOfFolderByUser() {
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFolder = outputFolder.createFolder(now + "閲覧権限サンプルフォルダ");
  let file = DriveApp.getFileById("16w3ZcseTDFSDqWOQB4ZlJkq9qYfwaRPn02OOJNiPqyQ");
  let viewers = file.getViewers();
  for (let i in viewers) {
    let user = viewers[i];
    createdFolder.addViewer(user);
  }
}

//Userオブジェクトを使ってファイルに閲覧権限を付与するコード
function sampleCodeForSetViewerOfFileByUser() {
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFile = outputFolder.createFile(now + "閲覧権限サンプルファイル","サンプルファイル", "text/plain");
  let file = DriveApp.getFileById("16w3ZcseTDFSDqWOQB4ZlJkq9qYfwaRPn02OOJNiPqyQ");
  let viewers = file.getViewers();
  for (let i in viewers) {
    let user = viewers[i];
    createdFile.addViewer(user);
  }
}

変数の説明

folder = マイドライブを代入
outputFolders = ドライブ内のすべてのフォルダを代入
outputFolder = サンプルファイル出力フォルダを代入(なければフォルダを作成して代入)
now = 現在の時刻をyyyMMddHHmmss形式で代入
createFile = 新しいファイルを作成して代入
createFolder = 新しいフォルダを作成して代入
file = Userオブジェクトを取得するためのファイル
viewers = fileで指定したファイルの閲覧権限のUserオブジェクト
user = Userオブジェクト

addViewers(emailAddresses)のサンプルコード

引数に入れる値

サンプルコード

//複数のユーザーに一括でファイルに閲覧権限を付与するコード
function sampleCodeForSetViewersOfFileByEmails() {
  let emailAddresses = ["admin@for-dummies.net", "xxxx@for-dummies.net"];
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFile = outputFolder.createFile(now + "サンプルファイル","サンプルファイル", "text/plain");
  createdFile.addViewers(emailAddresses);
}

変数の説明

emailAddresses = メールアドレスを配列で代入
folder = マイドライブを代入
outputFolders = ドライブ内のすべてのフォルダを代入
outputFolder = サンプルファイル出力フォルダを代入(なければフォルダを作成して代入)
now = 現在の時刻をyyyMMddHHmmss形式で代入
createFile = 新しいファイルを作成して代入
createFolder = 新しいフォルダを作成して代入

addViewer(emailAddress)の使い方と殆ど変わりませんが、addViewerを複数形にして、単一のメールアドレスを引数としていたところを配列でメールアドレスを複数入れたものを引数として渡してあげれば、一括で閲覧権限を付与することができます。

setOwner(emailAddress)のサンプルコード

最後に、オーナー権限を付与するコードです。

オーナー権限の変更はオーナー特権ですので、setOwnerはオーナーしか実行することはできません

このメソッドだけ追加するを意味するaddではなくsetOwnerのようにsetが使われています。

これもファイルのオーナーは一つのアカウントしかいないということを考えれば理解がしやすいです。
addは加えていくイメージですので、2つ以上のアカウントも追加をしていくことができますが、setは固定するイメージですので、1つのアカウントがオーナーとして固定されていくため、複数のアカウントにはオーナー権限を付与することができません

ここでもう一度
皆さん、プログラムの勉強には英語の知識がとても相性が良いです

引数に入れる値

サンプルコード

//ファイルにオーナー権限を付与するコード
function sampleCodeForSetOwnerOfFileByEmail() {
  let emailAddress = "admin@for-dummies.net";
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFile = outputFolder.createFile(now + "サンプルファイル","サンプルファイル", "text/plain");
  createdFile.setOwner(emailAddress);
}

変数の説明

emailAddress = コメント権限を付与するメールアドレス
folder = マイドライブを代入
outputFolders = ドライブ内のすべてのフォルダを代入
outputFolder = サンプルファイル出力フォルダを代入(なければフォルダを作成して代入)
now = 現在の時刻をyyyMMddHHmmss形式で代入
createFile = 新しいファイルを作成して代入
createFolder = 新しいフォルダを作成して代入

上記のサンプルコードでは、Googleドライブ内から「サンプルファイル出力フォルダ」があれば、そのフォルダの中に新しいフォルダ/ファイルを作成して特定のアカウントにオーナー権限を付与するようにしてあります。

コードをコピーして利用する際はemailAddressを修正してご利用ください。

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

引数に入れる値

サンプルコード

//Userオブジェクトを使ってファイルにオーナー権限を付与するコード
function sampleCodeForSetOwnerOfFileByUser() {
  let folder = DriveApp.getRootFolder();
  let outputFolders = folder.searchFolders("title = 'サンプルファイル出力フォルダ'");
  let outputFolder = (outputFolders.hasNext()) ? outputFolders.next() : folder.createFolder("サンプルファイル出力フォルダ");
  let now = Utilities.formatDate(new Date(), "JST", "yyyMMddHHmmss");
  let createdFile = outputFolder.createFile(now + "サンプルファイル","サンプルファイル", "text/plain");
  let file = DriveApp.getFileById("16w3ZcseTDFSDqWOQB4ZlJkq9qYfwaRPn02OOJNiPqyQ");
  let user = file.getOwner();
  createdFile.setOwner(user);
}

変数の説明

folder = マイドライブを代入
outputFolders = ドライブ内のすべてのフォルダを代入
outputFolder = サンプルファイル出力フォルダを代入(なければフォルダを作成して代入)
now = 現在の時刻をyyyMMddHHmmss形式で代入
createFile = 新しいファイルを作成して代入
createFolder = 新しいフォルダを作成して代入
file = Userオブジェクトを取得するためのファイル
user = Userオブジェクト

まとめ

ということで、結構長くなりましたが、GASでGoogleドライブ上のフォルダやファイルに権限を付与する方法をサンプルコードを使って学んできました。

非常に簡単にできることが理解できたと思いますが、これで複数のフォルダやファイルの編集権限や閲覧権限などを一括で変更することができるようになりましたね。

Exit mobile version