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