Google Apps Script で 組み込みの Google サービスや 高度な Google サービスからプライベートデータにアクセスするには、ユーザーによる承認が必要です。
Google サービスの承認の仕組み
スクリプトで Google サービスへのアクセスが必要な場合、一般的なプロセスは次のようになります。
- 検出: Apps Script はスクリプトをスキャンして、使用する
サービス(
SpreadsheetAppやGmailAppなど)を特定します。 - スコープの決定: スキャンに基づいて、Apps Script はスクリプトの実行に必要なOAuth スコープのセットを特定します。
- 承認の確認: スクリプトが実行されると、ユーザーが これらのスコープをすでに承認しているかどうかが確認されます。
- ユーザーへのプロンプト: 承認がない場合は、権限の付与を求める ダイアログが表示されます。
- 実行: スクリプトが承認されると、そのユーザーのリクエストされたデータにアクセスできるようになります。
権限とスクリプトの種類
スクリプトが実行されるユーザー ID(つまり、アクセスできるデータ)は、次の表に示すように、スクリプトが実行されるシナリオによって異なります。
| スクリプトの種類 | スクリプトの実行ユーザー |
|---|---|
| スタンドアロン、Google Workspace アドオン、Google ドキュメント、Google スプレッドシート、Google スライド、Google フォームにバインド | キーボード操作を行うユーザー |
| スプレッドシートのカスタム関数 | 匿名ユーザー。 ただし、割り当て上限 はキーボード操作を行うユーザーに適用されます。 |
| ウェブアプリまたは Google サイト ガジェット | キーボード操作を行うユーザーまたはスクリプト オーナー( アプリのデプロイ時に選択したオプション によって異なります) |
| インストール可能なトリガー | トリガーを作成したユーザー |
アクセス権を付与する
Apps Script は、コードのスキャンに基づいて、承認スコープ(スプレッドシート ファイルや Gmail へのアクセスなど)を自動的に決定します。コメントアウトされたコードでも、承認リクエストが生成される可能性があります。スクリプトで承認が必要な場合は、実行時に承認ダイアログが表示されます。
以前に承認したスクリプトでも、コードの変更によって新しいサービスが追加された場合は、追加の承認が求められます。スクリプト オーナーのユーザー ID で実行されるウェブアプリとしてスクリプトにアクセスする場合、スクリプトで承認がリクエストされないことがあります。
アクセス権を取り消す
スクリプトのデータへのアクセス権を取り消すには、次の手順を行います。
- Google アカウントの [セキュリティ] セクションに移動します。
- [サードパーティ製のアプリとサービスへの接続] で [すべての接続を表示] をクリックします。
- アクセス権を取り消すスクリプトまたはアプリを選択します。
- [Delete all connections you have with APP_NAME] をクリックし、 [Confirm] をクリックします。
スコープを現在のドキュメントに限定する
スプレッドシート サービス、ドキュメント サービス、スライド サービス、フォーム サービスを使用する アドオンやその他のスクリプト を作成する場合は、アドオンまたはスクリプトが使用されているファイルへのアクセスのみを求めるように承認 ダイアログを設定できます。ユーザーのスプレッドシート、ドキュメント、フォームすべてへのアクセスを求める必要はありません。これを行うには、ファイルレベルのコメントに次の JSDoc アノテーションを追加します。
/**
* @OnlyCurrentDoc
*/
スクリプトに ライブラリ が含まれていて @OnlyCurrentDoc を宣言しているが、プライマリ スクリプトで現在のファイル以外のファイルへのアクセスが必要な場合は、反対のアノテーション @NotOnlyCurrentDoc を使用できます。
アドオンの承認ライフサイクル
アドオンは、スプレッドシート、
ドキュメント、スライド、フォーム
の場合、通常、ドキュメントに
バインドされたスクリプトと同じ承認モデルに従います。ただし、状況によっては、onOpen(e) 関数と onEdit(e)
関数が承認なしモードで実行され、追加の複雑さが発生します。詳しくは、アドオンの承認ライフサイクルのガイドをご覧ください。
OAuth アプリケーションのユーザー上限
OAuth を使用して Google ユーザーデータにアクセスするアプリケーション(Apps Script プロジェクトを含む)には、承認の上限が適用されます。詳しくは、 OAuth アプリケーションのユーザー上限 をご覧ください。
Apps Script での再認証の動作
Apps Script では、Google Cloud サービスの設定で構成された 再認証の頻度は 適用されません。これは、Apps Script がトリガーを使用して自動的に実行できるためです。トリガーは、ユーザーの直接的な操作なしで動作します。これらの自動実行では、再認証のプロンプトは表示されません。Apps Script アプリケーションでは、指定した期間(12 時間など)が経過しても、再認証を求めるメッセージは自動的に表示されません。
マニフェストで明示的なスコープを設定する
Apps Script は、関数呼び出しのコードをスキャンして、必要なスコープを自動的に判断します。より詳細な制御が必要な場合は、プロジェクト
マニフェスト(appsscript.json)でスコープを明示的に設定できます。公開されたスクリプトでは、必要な権限を最小限に抑えるために、この方法をおすすめします。
手順については、明示的なスコープを設定するをご覧ください。
トラブルシューティング
- トリガーの実行時に「承認が必要です」エラーが発生する: トリガーは、作成したユーザーが 承認する必要があります。新しい権限を必要とするコードを追加した場合は、スクリプト エディタで関数を 1 回手動で実行して、承認ダイアログを表示する必要があります。
- スコープが更新されない: コードを更新しても承認
ダイアログに変更が反映されない場合は、プロジェクトを保存して
エディタを更新してみてください。マニフェストで明示的なスコープを使用している場合は、新しいスコープを
oauthScopes配列に追加していることを確認してください。 - 「このアプリはブロックされています」または未確認のアプリの警告: スクリプトで機密性の高いスコープまたは制限付きスコープが使用されていて、Google による確認が行われていない場合に発生します。OAuth クライアントの確認をご覧ください。