質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

2673閲覧

GASの承認が勝手に切れてしまう

Guruguru

総合スコア7

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

2クリップ

投稿2021/09/28 04:08

困っていること

GASとhtmlで「ファイルの提出用ページを作成し、提出されたファイルをGoogleドライブに保存する」というスクリプトを作成し、ウェブアプリとしてデプロイして運用していました。
そのファイル提出ウェブアプリ自体は問題なく運用できていたのですが、長期間(半年ほど?)放置してから再度そのファイル提出ウェブアプリを実行しようとすると承認エラーが発生してしまいました。

発生している問題・エラーメッセージ

その操作を実行するには承認が必要です。

試したこと

https://teratail.com/questions/278164
上記を確認し、現Apps Script ダッシュボードからGAS APIをオン

事前にオンにしていたが承認が切れてしまっていた

承認が切れてしまっている場合エラーとして検出できるようにGoogleAppsSctipt側のdoGet()関数にtryとcatchを追加しウェブアプリを実行、エラーをキャッチした際に任意のアドレス宛にメールを送信できるか試す

承認されていないため実行自体が出来ないようで、エラーメールが送信されない。また、実行結果にも残っていない

ウェブアプリを実行しようとして承認エラーが出た日に、登録しているGmail宛にエラーメールが届いていないか確認

届いていない

そのスクリプトをエディタから実行して承認し、ウェブアプリを再度実行

問題なく動作した

質問・要望

  1. 長期間使用しなかったとしても勝手に承認が切れないようにしたいのですが、可能でしょうか。
  2. 承認が切れている際にエラーメール等が届くように設定したいですが、可能でしょうか。
  3. どの程度の期間利用せずにいると承認が切れてしまうのか、どなたかご存じでしたらお教えください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

承認が切れないようにする方法が分からなかったため、現時点で行っている「承認が切れた際に分かるようにするための方法」を記載しておきます。
(無駄なスクリプトもあるかと思います。ご容赦ください)

方法:
トリガー実行日を任意の判定用セルに記録。
スプレッドシート起動時にその記録とスプレッドシート起動日を比較し、トリガー実行日<スプレッドシート起動日の場合はトリガーを再設定するようエラーメッセージを表示する

スクリプト

GAS

1//■シートの表示リフレッシュ用関数 2function flush(){ 3 SpreadsheetApp.flush(); // シートの再描画,これだけで書き込み遅延を解消できるはずなのだが,できない 4 SpreadsheetApp.flush(); // シートの再描画,なぜか二回続けると書き込み遅延を解消できるようだ 5} 6 7//■日付を0時0分0秒で設定し直して比較できるようにgetTimeする関数 8function getYMD(date){ 9 date.setHours(00); 10 date.setMinutes(00); 11 date.setSeconds(00); 12 date.setUTCMilliseconds(00); 13 date = date.getTime(); 14 return date; 15} 16 17//■トリガーが起動していない場合の判定用関数 18function onOpen(){ 19 var ss = SpreadsheetApp.getActive(); 20 21 //スプレッドシート起動日の0時0分0秒を取得 22 var date = new Date(); 23 var start = getYMD(date); 24 25 //Example実行日の0時0分0秒を取得 26 var sh2 = ss.getSheetByName("シート2");//判定用に作成した任意のシートの名前 27 var sh2openss = sh2.getRange("G2");//判定に使用する任意のセル 28 var sh2openssJudge = sh2openss.getValue(); 29 sh2openssJudge = new Date(sh2openssJudge); 30 sh2openssJudge = getYMD(sh2openssJudge); 31 32  //今現在の日付とトリガーExampleの日付を比較 33 if(sh2openssJudge==start){ 34 console.log("トリガー設定済"); 35 return; 36 } 37 38 //実行をstaySecond秒ディレイ 39 var staySecond = 15; 40 Utilities.sleep(staySecond * 1000); 41 42 flush();//画面再読込 43 44 //Example実行日再取得、再判定 45 sh2openssJudge = sh2openss.getValue(); 46 sh2openssJudge = new Date(sh2openssJudge); 47 sh2openssJudge = getYMD(sh2openssJudge); 48 if(sh2openssJudge<start){ 49 console.warn("要トリガー再設定"); 50 var ui = SpreadsheetApp.getUi() 51 var menu = ui.createMenu("動作確認"); 52 menu.addItem("全トリガー再設定",'fnmenu');// 53 menu.addToUi(); 54 55 Browser.msgBox('【エラー】\n\nトリガーが正常に動作していません。\nメニューバーの「動作確認」から「全トリガー再設定」を実行してください。'); 56 } 57} 58 59function Example(動作確認を行いたいメインの関数名)() {//スプレッドシート起動時に実行 60 var date = new Date(); 61 var ss = SpreadsheetApp.getActive(); 62 var sh2 = ss.getSheetByName("シート2");//判定用に作成した任意のシートの名前 63 var sh2openss = sh2.getRange("G2");//判定に使用する任意のセル 64sh2openss.setValue(date);//トリガー実行時の日時を判定用セルにセット 65 66 /* 67  関数内の処理内容記述 68 */ 69} 70 71 /* 72 必要な数だけ関数記述して必要に応じてresetAllTriggers内でトリガー設定 73 */ 74 75//■全トリガーの削除・再設定関数 76function resetAllTriggers(){ 77 var ss = SpreadsheetApp.getActive(); 78 79 //元々セットされていたトリガーが残っていれば検出して削除 80 var triggers = ScriptApp.getProjectTriggers(); 81 for(var i=0; i < triggers.length; i++) { 82 if (triggers[i].getHandlerFunction() == 'Example(動作確認を行いたいメインの関数名)'||/*セットしていたトリガーの個数分判定*/) { 83 ScriptApp.deleteTrigger(triggers[i]); 84 } 85 } 86 87 // newTriggerメソッドでトリガーを再設定 88 ScriptApp.newTrigger('Example(動作確認を行いたいメインの関数名)') 89 .forSpreadsheet(ss) 90 .onOpen() // スプレッドシート起動時のトリガー 91 .create(); 92 93 /* 94 必要なトリガーの数だけ同様に設定 95 */ 96 97 return "<p>トリガーチェック完了</p> 全トリガー再設定済"; 98} 99 100//■ウェブアプリとして実行するためのdoGet 101//https://zenn.dev/datsukan/articles/f525e0f7af6859 102//⇒スクリプトからトリガー記述していたが動かなくなる時があったため、上記リンク先に従いトリガー作成スクリプトをウェブアプリとしてデプロイして実行することにした 103//https://qiita.com/yuma-ito-bd/items/df8b1c5ebca3d976fc8f 104//⇒そのままデプロイしてもHeadバージョンが指定されなかったため、上記リンク先の手順を参考に旧エディタ>公開>マニフェストから配置>Version 0クリックするとHeadバージョンのURLが表示される 105function doGet(e) { 106 var html = HtmlService.createTemplateFromFile('Index'); 107 return html.evaluate(); 108} 109 110//■メニューバーからのトリガー再設定用関数 111//Webアプリとしてデプロイした本アプリへのリンクをgetUi().showModelessDialogメソッドで表示(Browser.msgBox();ではリンクではなく文字列になってしまうため) 112function fnmenu(){ 113 var htmlOutput = HtmlService 114 .createHtmlOutput('<p>トリガー再設定リンク:<a href=" WebアプリとしてデプロイしたURLを記述" target="blank">再設定はこちら</a></p>') 115 .setSandboxMode(HtmlService.SandboxMode.IFRAME) 116 .setWidth(400) 117 .setHeight(300); 118 SpreadsheetApp.getUi().showModelessDialog(htmlOutput, '【 トリガー再設定 】'); 119} 120

HTML

1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 </head> 6 <body> 7 test 8 <?!= resetAllTriggers(); ?> 9 10 <p>このタブを閉じてください。</p> 11 </body> 12</html>

投稿2021/10/30 06:59

編集2021/10/30 07:08
Guruguru

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問