Google Apps Script(GAS)で自動生成したGoogleドキュメントに対し、特定のユーザーやグループへの共有権限を付与しようとした際、権限が反映されない現象が発生することがあります。スクリプト自体はエラーなく終了しているのに、共有設定が有効にならないケースが多く、原因の特定に時間がかかる場合があります。本記事では、この問題の原因をコードレベルで切り分け、修正手順を具体的に解説します。特に、会社の管理下にあるアカウントで運用する場合の注意点についても触れます。
【要点】この記事で確認すること
- 最初に見る場所: スクリプトエディタの「リソース」→「高度なGoogleサービス」、またはOAuth同意画面のスコープ設定を確認してください。
- 切り分けの軸: コード上の権限付与方法(DriveApp vs Advanced Drive Service)、スクリプトの実行モード、スコープの有無の3軸で切り分けます。
- 注意点: 会社PCではIT管理者によるOAuthスコープのホワイトリスト制限がかかっている可能性があるため、勝手に承認画面を変更せず管理者へ相談してください。
ADVERTISEMENT
目次
1. 共有権限が付かない原因を特定する
自動生成したドキュメントの共有権限が付かない原因は、大きく分けて「スクリプトのコード」「APIの有効化」「OAuthスコープ」「実行環境の制限」の4つに分類できます。それぞれの原因を順に確認することで、問題の切り分けが可能です。
1.1 コード上の問題:DriveApp.addEditor()の制限
もっとも多いのが、DriveApp.addEditor()を使用しているケースです。DriveApp.addEditor()は、スクリプト実行ユーザーがドキュメントのオーナーである場合にのみ機能します。スクリプトがサービスアカウントや別のユーザー権限で実行されていると、権限付与がスキップされたりエラーになったりします。また、DriveApp.addEditor()はドキュメントの共有設定を変更するための適切なスコープ(https://www.googleapis.com/auth/drive.file)を必要とします。
1.2 高度なGoogleサービス(Advanced Drive Service)の未有効化
より細かい権限制御が必要な場合は、高度なGoogleサービスであるDrive API(v2またはv3)を有効にして、Drive.Permissions.insert()やDrive.Permissions.create()を使用します。ただし、このサービスをスクリプトエディタで明示的に有効化していないと、スクリプト実行時に「ReferenceError: Drive is not defined」が発生します。権限が付かない現象の裏で、このエラーがキャッチされずに無視されているケースもあります。
1.3 OAuthスコープの不足
スクリプトに必要なスコープが設定されていない場合、権限付与が拒否されます。特に、会社のGoogle Workspaceアカウントでは、管理者がOAuthスコープを制限していることがあります。例えば、「drive.file」スコープだけでは、他のユーザーに権限を付与する操作が許可されない場合があります。実際には「drive」スコープ(広範なアクセス)が必要なケースもあります。
| 権限付与方法 | 必要なスコープ | オーナー制限 | 推奨用途 |
|---|---|---|---|
| DriveApp.addEditor() | drive.file | あり(実行ユーザーがオーナー) | 単純な権限追加 |
| Drive.Permissions.insert() | drive (full) または drive.file + manage permissions | なし(オーナー権限不要) | 複雑な権限設定 |
2. スクリプトの修正ポイント
原因を特定したら、コードを修正します。ここでは、代表的な修正方法を3つ紹介します。
2.1 DriveApp.addEditor()からDrive APIへの切り替え
DriveApp.addEditor()で権限が付かない場合、高度なGoogleサービスであるDrive APIを使用します。まず、スクリプトエディタの「リソース」→「高度なGoogleサービス」で「Drive API」を「オン」にします。次に、以下のようなコードで権限を追加します。
例:
var fileId = 'xxxxxxxx';
var resource = {
'type': 'user',
'role': 'writer',
'emailAddress': 'user@example.com'
};
Drive.Permissions.insert(resource, fileId);
2.2 スコープの明示的な指定
OAuthスコープが不足している場合は、スクリプトのマニフェストファイル(appsscript.json)にスコープを追加します。または、スクリプトエディタの「プロジェクトの設定」からスコープを確認し、必要に応じて再承認を促します。会社のアカウントでは、管理者が承認したスコープしか使えないため、管理者に追加を依頼してください。
2.3 実行モードの確認
スクリプトがトリガーやウェブアプリとして実行される場合、実行ユーザーがドキュメントのオーナーとは限りません。特に、時間主導型トリガーではトリガー作成者の権限で実行されます。そのため、ドキュメントのオーナーが実行ユーザーとは異なる場合、権限が付与されないことがあります。この問題を回避するには、サービスアカウントを使用するか、ドキュメントのオーナー権限をスクリプト実行ユーザーに委譲する必要があります。
3. 具体的な修正手順
ここでは、DriveApp.addEditor()からDrive APIに切り替える具体的な手順を説明します。以下の順序で進めてください。
- スクリプトエディタを開き、メニューから「リソース」→「高度なGoogleサービス」をクリックします。
- 表示された一覧から「Drive API」のスイッチを「オン」にし、下の「Google Cloud Platform(GCP)プロジェクト」のダイアログで「Drive API」を有効化します(まだの場合はリンクからAPIライブラリで有効化)。
- スクリプトにDrive APIを使用するためのコードを追加します。既存のDriveApp.addEditor()をコメントアウトし、代わりにDrive.Permissions.insert()を使用します。
- スクリプトのマニフェストファイル(appsscript.json)を開き、必要なOAuthスコープを追加します。例:”oauthScopes”: [“https://www.googleapis.com/auth/drive”]
- 変更を保存し、スクリプトを再実行します。初回実行時には認証ダイアログが表示されるので、必要な権限を承認します。
- 生成されたドキュメントの共有設定を確認し、権限が正しく付与されているか検証します。
手順4で追加するスコープは、会社のポリシーによっては承認されない場合があります。その場合は管理者に連絡し、プロジェクトのOAuth同意画面にスコープを追加してもらう必要があります。
4. 失敗パターンと対処法
実際によく発生する失敗パターンを3つ紹介します。
4.1 「Drive is not defined」エラー
高度なGoogleサービスを有効にしていない場合に発生します。対処法は、上記手順1〜2でDrive APIを有効にすることです。ただし、GCPプロジェクトが正しくリンクされていないと、有効化してもエラーが続くことがあります。その場合は、GCPコンソールでプロジェクトを確認し、Drive APIが有効になっているか直接チェックしてください。
4.2 権限は付与されたが表示されない
スクリプトが正常終了しても、ドキュメントの共有設定にユーザーが追加されていないように見える場合があります。これは、スクリプトが異なるファイル(コピーやテンプレート)に対して権限を設定している可能性が高いです。生成されたドキュメントのIDをログ出力して、正しいファイルを操作しているか確認してください。
4.3 会社アカウントで認証が通らない
会社のGoogle Workspaceアカウントでは、管理者がOAuthスコープのホワイトリストを設定しているため、承認画面で「このアプリはブロックされました」と表示されることがあります。この場合、管理者にスクリプトのスコープ(特にdriveスコープ)を承認してもらう必要があります。また、内部アプリとしてGoogle Workspace Marketplaceに公開する方法もあります。
5. 管理者に確認すべき設定
会社のGoogle Workspace環境でスクリプトを動作させる場合、以下の設定を管理者に確認してください。
- OAuthスコープの制限: 管理者コンソールの「APIとサービス」→「OAuth同意画面」で、利用可能なスコープが制限されていないか確認します。必要に応じて、driveスコープを追加してもらいます。
- APIの有効化: GCPプロジェクトでDrive APIが有効になっているか確認します。管理者がAPIの利用制限をかけている場合があります。
- サービスアカウントの利用: スクリプトをサービスアカウントで実行する場合、そのサービスアカウントにドメイン全体の権限委譲が必要なことがあります。管理者に依頼して設定してもらいます。
6. よくある質問
Q1. DriveApp.addEditor()でエラーは出ないのに権限が付かないのはなぜですか?
A. スクリプト実行ユーザーがドキュメントのオーナーでない場合、addEditor()は何もせずに終了することがあります。エラーを起こさないため気づきにくいですが、オーナー権限を確認してください。
Q2. Drive.Permissions.insert()を使用しても権限が付かない場合は?
A. スコープが不足している可能性が高いです。スクリプトの実行ログでGoogle APIsコンソールのエラーを確認するか、マニフェストファイルにdriveスコープを追加してみてください。
Q3. サービスの有効化は全てのユーザーに影響しますか?
A. 高度なGoogleサービスの有効化はスクリプトプロジェクト単位です。ただし、GCPプロジェクトのAPI有効化はプロジェクト全体に影響するため、他のスクリプトに影響を与える可能性があります。管理者と相談の上で行ってください。
7. まとめ
自動生成したGoogleドキュメントの共有権限が付かない場合、まずはスクリプトの権限付与方法とOAuthスコープを確認してください。DriveApp.addEditor()はシンプルですがオーナー制限があるため、高度なGoogleサービスのDrive APIを使う方が安定します。会社のアカウントでは管理者による制限が影響することが多いため、早めに管理者へ相談することをおすすめします。スクリプトの実行ユーザーとドキュメントのオーナーが一致しているかも重要なチェックポイントです。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Office・仕事術の人気記事ランキング
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【PDF】PDFのサムネイルプレビューが表示されない!エクスプローラーの設定とAcrobat環境設定
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【Excel】文字がセルの枠からはみ出す・隠れる!「折り返して表示」と「縮小して全体を表示」の使い分け
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
- 【Outlook】メール本文が「文字化け」して読めない!エンコード設定の変更と修復手順
