Cross Technology

Unity、VR、MR、ARを中心とした技術ブログ

Google Apps Scriptで「スクリプトにはその操作を行う権限がありません。」が出た時の対処法

先日、勉強会の開催のためにGoogleフォームを準備していました。Googleフォームではメールアドレスを入力してもらうと、送信完了時に、「お申し込みありがとうございました」のような内容が入ったメールを自動返信させる機能を作ることができます。

この機能は以前作ったことがあるのですが、そのまま使ったところ自動返信メールが届きませんでした。

今回はエラー回避方法を紹介しますが、その前にGoogleフォームの概要、および回避するために使うGoogle Apps Scriptについても簡単に説明します。

1. Googleフォームとは?

Googleフォームとは、アンケートを作り、回答を集計できるサービスです。以下のページからアクセスすると使うことができます。

Google フォーム - アンケートを作成/分析できる無料サービスです

アンケートの作り方はすでに色々なところで紹介されているので省略します。たとえば、以下のサイトではとてもわかりやすく解説されています。

初めてのGoogleフォーム:作り方と活用方法を紹介します! | デスクワーク ラボ

簡単作成!Googleフォームを使ったアンケートの作り方・回答集計

回答者がGoogleフォームを使ったアンケートに回答して送信ボタンを押すと、このようなページに遷移します。

Googleフォーム回答後の画面例

これがGoogleフォームの基本機能です。ここにメールの自動返信をつけるには、Google Apps Scriptを使います。

2. Google Apps Scriptとは?

Googleが公開しているアプリ(例:スプレッドシート、カレンダー、Gメール)などの機能を拡張できる仕組みです。Javascriptベースで作るための開発環境がWeb上に準備されており、色々な処理を作ることができます。

何ができるのか、についてはこちらに詳しく書かれていたので参考にさせていただきました。

【保存版】初心者向け実務で使えるGoogle Apps Script完全マニュアル

余談ですが、Google Apps ScriptはGASと略されるようです。以後、この記事でもGASと表記します。

3. 自動返信機能を作る方法

作成方法は色々なサイトで紹介されておりました。その中でもっともわかりやすかったサイトを紹介いたします。

【最新版 コピペでOK】Googelフォームを使って自動返信の問合せフォームを作る。 | WEB担当者の備忘録

この通りに実行すると自動返信の機能を作ることができます。

4. マニフェストに権限を追加する

ようやく本題です。先ほどのサイトに沿って、以下の記述をしておくと、処理が失敗した時にメールが届きます。

var admin = '/*処理が失敗した時に通知してほしいメールアドレス*/';
try{
/*必要な処理を書く*/
}catch(e){
    MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message);
 } 

しかし、動作確認をしたところ、100%の確率で以下の内容を含むメールが届きました。また、原因がよくわかりませんが、自動返信メールは来たり来なかったりしました。


スクリプトにはその操作を行う権限がありません。その操作を行うには「
(https://www.googleapis.com/auth/gmail.send ||
https://www.googleapis.com/auth/gmail.compose ||
https://www.googleapis.com/auth/gmail.modify || https://mail.google.com/ ||
https://www.googleapis.com/auth/gmail.addons.current.action.compose)」権限が
必要です。

こちらの記事のおかげで、マニフェストを開いて必要な権限を追加することで解決できそうとわかりました。

Google Apps Scriptに追加されたマニフェストについて

マニフェストは、スクリプトエディタの「表示」から「マニフェストファイルを表示」を選択すると表示される「appsscript.json」というファイルです。ここで出て来たファイルに、先ほどのメールで届いた権限を追加したところ、エラーが出なくなりました。

最終的に「appsscript.json」はこのようになりました。

{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "oauthScopes": ["https://www.googleapis.com/auth/script.send_mail",
                  "https://www.googleapis.com/auth/spreadsheets",
                  "https://www.googleapis.com/auth/gmail.modify",
                  "https://www.googleapis.com/auth/gmail.send",
                  "https://www.googleapis.com/auth/gmail.compose",
                  "https://mail.google.com/",
                  "https://www.googleapis.com/auth/gmail.addons.current.action.compose"
  ],
  "exceptionLogging": "STACKDRIVER"
}

5. 終わりに

自動返信メールが来たり来なかったり、という現象の原因は不明なままです。来る場合でも来るまでの時間がバラバラでした。しかし、エラーがなくなった後はフォームを送信した直後に自動返信メールが届くようになったので、ひとまず解決にしたいと思います。

Google Apps Scriptはたまに仕様変更があるらしく、それが原因で以前の内容が使えなくなった可能性があります。そのため、今後また変わる可能性がありそうです。