【裏技】GAS(Google Apps Script)の実行制限を超えてみよう!

Google Apps Script(GAS)を使用してスクリプトを実行する際、GASの制限にやりたいことが阻まれることがたまにあります

そこで、本記事では、GASの制限を超えるための小技を解説していきます!
今回は以下の2点の小技を解説したいと思います

  • GASを使用してメール送信の制限回数を突破する方法
  • トリガーを使用して特定の時間にスクリプトを実行する方法
こーすけ先生

今回は趣向を変えて…
GASの制限を突破していこうと思うんだ

がすぴょん

正気ですか?????

がすぴょん

こーすけ先生、以前…「使用制限や上限を意識することが大切」って言ってましたよね???

こーすけ先生

もちろん、その考えは大切だよ

こーすけ先生

そのマインドは持った上で、今回は一休さん的思考で
上限突破するぞ!って記事だから!

がすぴょん

ふっ…不安だ……

この記事の執筆者について
  • GASの人
  • ITベンダSEとして12年勤務する中で民間、金融、官公庁の現場を一通り経験済
  • 現在は公務員をやりながら起業に向けて着々と準備中
GASなら任せろ!

GAS(Google Apps Script)を活用して、手動での作業を自動化することで、時間と労力を節約できるようになります

​GASを極めたい方や、業務の効率化を図りたい方は、ぜひこの記事を読んください!
難しいことはGASに任せて、我々人間は楽しちゃいましょう!

こーすけ先生

当ブログでは実際に仕事でGASを扱っている私が、GASの魅力について徹底的に取り上げていきます!

目次

【裏技】GASの制限を超える小技集 

本記事で取り組む演習
  • GASの自動メール送信回数を突破!
  • トリガーを指定した任意の時間に実行!
こーすけ先生

よしっ!早速、限界超えてこう!

【小技1】GASの自動メール送信回数を突破しよう

第3回:GASの制限回数を意識しながら各種サービスにアクセスしてみようにおいて、GASのGmailApp(またはMailApp)を通したメール送信には制限回数があるとお伝えしました

こーすけ先生

これに偽りはなく、以下のプログラムでもわかる通り、メール送信するたびに残回数は減っていきます!

(事象確認)まずは普通にメールを上限いっぱいに送ってみる

function gaslog_SendEmail() {
  console.log(MailApp.getRemainingDailyQuota());
  // MailApp.getRemainingDailyQuota()は残送信回数を確認する関数
  for (let mIdx=0; mIdx<10; mIdx++) {
    GmailApp.sendEmail('*******@gmail.com', 'Gメール送信回数確認','');
    console.log(MailApp.getRemainingDailyQuota());
  }
}
11:24:16	お知らせ	実行開始
11:24:17	情報	100
11:24:18	情報	99
11:24:19	情報	98
11:24:20	情報	97
11:24:21	情報	96
11:24:24	情報	95
11:24:25	情報	94
11:24:25	情報	93
11:24:26	情報	92
11:24:29	情報	91
11:24:30	情報	90
11:24:29	お知らせ	実行完了

MailApp.getRemainingDailyQuota() は、GASを通じて送信できる残りのメール送信回数をコンソールに表示するための関数です

 for (let mIdx=0; mIdx<10; mIdx++) {
    GmailApp.sendEmail('*******@gmail.com', 'Gメール送信回数確認','');
    console.log(MailApp.getRemainingDailyQuota());
  }
こーすけ先生

for ループを使用して、メール送信を10回繰り返しています!
また、ループの中で以下の行が実行されます

  • sendEmail(recipient, subject, body, options) 
    sendEmail(メールアドレス、件名、本文、オプション)

GmailApp.sendEmail('*******@gmail.com', 'Gメール送信回数確認','')は、指定のメールアドレスにメールを送信するコードです

こーすけ先生

3番目の引数には本文が入りますが、この場合は中身がないので、
空メールになります

MailApp.getRemainingDailyQuota()という関数はメール送信後、残りの制限回数を再び表示します

そして、このメール送信による制限回数は、たとえ有償のWorkspaceユーザでも撤廃されることはありません

メール送信による制限回数
  • 無償ユーザ:100名/日
  • 有償ユーザ:1,500名/日

制限について記述した過去記事を参考にしてみてください

こーすけ先生

よしっ!じゃあ、いっちょ
突破していきますか!

がすぴょん

今回のこーすけ先生はいつもと違うなぁ

GASの自動メール送信回数を突破してみる

こーすけ先生

では早速、メールの送信上限を突破していきましょう!

この制限事項のポイントは、GmailAppを通したメール送信という点です

つまり、GmailAppを用いて直接sendMailを実行することをカウントしているわけです

こーすけ先生

とんちのように聞こえますが、ここがポイントです

そのためメール送信箇所を以下のように変えてみましょう!

  • 変更前
    1.メールを送信する
  • 変更後
    1.メールを作成して、下書きに保存する
    2.下書きの送信依頼をする
function gaslog_SendEmailEx() {
  console.log(MailApp.getRemainingDailyQuota());
  // MailApp.getRemainingDailyQuota()は残送信回数を確認する関数
  for (let mIdx=0; mIdx<10; mIdx++) {
    sendEmailEx('*******@gmail.com', 'Gメール送信回数確認','');
    console.log(MailApp.getRemainingDailyQuota());
  }
}

function sendEmailEx(_recipient, _subject, _body, _option) {
  // 引数の内容でメールを下書き保存する
  const mailDraft = GmailApp.createDraft(_recipient, _subject, _body, _option);
  // 下書き保存したメールIDから下書きを取得し、メール送信を依頼する
  GmailApp.getDraft(mailDraft.getId()).send();
}
11:26:12	お知らせ	実行開始
11:26:13	情報	90
11:26:14	情報	90
11:26:16	情報	90
11:26:17	情報	90
11:26:18	情報	90
11:26:19	情報	90
11:26:21	情報	90
11:26:22	情報	90
11:26:24	情報	90
11:26:25	情報	90
11:26:26	情報	90
11:26:26	お知らせ	実行完了

いかがでしょうか?
今回はsendEmailの拡張メソッドとして、sendEmailExを作成し、下書き保存下書きの送信依頼を記述しました

こーすけ先生

これを使うことでGASの実行制限を突破できます!!!

function sendEmailEx(_recipient, _subject, _body, _option) {
  // 引数の内容でメールを下書き保存する
  const mailDraft = GmailApp.createDraft(_recipient, _subject, _body, _option);
  // 下書き保存したメールIDから下書きを取得し、メール送信を依頼する

GmailAppcreateDraft メソッドを使用して、指定した宛先、件名、本文、およびオプション情報を持つ新しいメールの下書きを作成します(この段階ではまだメールは送信されず、下書きとして保存されます)

  GmailApp.getDraft(mailDraft.getId()).send();

作成した下書きメールを GmailAppgetDraft メソッドを使用して取得し、send メソッドを呼び出すことでメールの送信を依頼します

こーすけ先生

この方法を使用することで実際のメール送信ではなく、下書きの送信が行われます

ただし!!!

GASの実行制限に関しては突破できますが、そもそものGmailの制限も併せてご確認ください
こればっかりはどうしようもないので、GASを実運用に適用する場合は、必ずご一読をお願いします

【小技2】トリガーを指定した任意の時間に実行

GASのトリガー実行では「日付ベースのタイマー」を設定できるか、実行時刻に幅がある(0:00~1:00といった具合) ことをお伝えしました

もちろんこれでも許容範囲な場合もあるかもしれませんが、可能な限り、想定通りの時刻に実行したいですよね

前回の記事に「トリガーの設定のやり方」が載っていますので、必要に応じて確認してください!
それでは、さっそく解説していきます

特定日時の設定もある

GASのトリガー実行には、以下画像で示す通り、「特定の日時」とすることで、作成者の意図した時間に実行することは可能です

こーすけ先生

しかし、見てわかる通り、特定の日時を一度だけしか設定できません

毎日8:30に実行されるようにしたいならば、その数だけトリガーを作成する必要があります
しかし、ここでもGASの制限事項がついてまわります

  • トリガーの作成個数
    ユーザーあたり 20 個/スクリプト

そのため、毎日実行されるようにしたくても、20個分作って、日々メンテをする必要があります

こーすけ先生

こんなのやってられないですよね…

こーすけ先生

よし、突破するぞ!!!!

トリガーを指定した任意の時間に実行するよう試みる!

では、どうするか
これの答えは非常に簡単です

こーすけ先生

トリガーにより実行されるメソッドの中で、次のトリガーを作ればいいわけです

これまたとんちのように聞こえますが、ここがポイントです
ではプログラムで書いていきましょう

function sendEmailEx(_recipient, _subject, _body, _option) {
  // 引数の内容でメールを下書き保存する
  const mailDraft = GmailApp.createDraft(_recipient, _subject, _body, _option);
  // 下書き保存したメールIDから下書きを取得し、メール送信を依頼する
  GmailApp.getDraft(mailDraft.getId()).send();
}

function gaslog_Trigger() {
  // トリガーに設定されている自分自身を削除する
  ScriptApp.getProjectTriggers().forEach(function(trigger){
    // トリガー名が一致するときのみ削除
    if(trigger.getHandlerFunction() == "gaslog_Trigger"){
      ScriptApp.deleteTrigger(trigger);
    }
  });
  // 5分後に自分自身のトリガーをセットする
  let setTime = new Date();
  setTime.setMinutes(setTime.getMinutes()+1);
  ScriptApp.newTrigger('gaslog_Trigger').timeBased().at(setTime).create();

  // 処理を実行する
  gaslog_SendMailTrigger();
}

function gaslog_SendMailTrigger() {
  sendEmailEx(
     '*******@gmail.com'
    , 'トリガーによるメール送信'
    , Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd HH:mm:ss')
  );
}

これにより、次は5分後に自分自身(gaslog_Trigger)が呼び出され、またその5分後に自分自身の呼び出しトリガーを作成するというのを繰り返します

つまり、このやり方を応用すればsetTime.setMinutes(setTime.getMinutes()+5);の箇所を書き換えることで、setTime.setDate(setTime.getDate()+1);とすれば日時で、setTime.setHours(setTime.getHours()+1);とすれば毎時で処理を実行することができます

こーすけ先生

ぜひ、ご自身の処理したいサイクルで設定を記述してみてください

 setTime.setDate(setTime.getDate()+1)
  setTime.setHours(0);
  setTime.setMinutes(0);
  setTime.setSeconds(0);
こーすけ先生

私がよく使うのは、0:00の日時処理で、
上記のように設定しています

注意

がすぴょん

今回、実験で使ったトリガーは、忘れずに削除しようね!

まとめ

今回は「GASの制限を超える小技集(その1)」ということで、これまでお伝えしたGASの基本的な使い方の中で発生していた実行制限を突破する方法をいくつか紹介しました

こーすけ先生

たまにはこんな砕けた内容の記事でも良いよね!笑

GASは非常に便利で強力なツールです

しかし、運用を開始しようとするとその制限に阻まれることがあります
そんなときは、この記事を読んで制限突破を試みてください!

今後も、たまにこういった小技も盛り込みながらGASの楽しさをお伝えしていきます
それではまた次回をお楽しみに!

こーすけ先生

X(旧:Twieer)にて、ブログの更新やQiita記事の更新、GAS情報をお届けしますので、是非フォローしてください!

100日後に起業する公務員

こーすけ先生

退職までの漫画をゆるくXにて更新中!
是非フォローしてね!

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

GASの人。ITベンダSEとして12年勤務し、民間、金融、官公庁の現場を一通り経験済。html、css、JavaScript、Java、PHPも分かります。最近は専らGASで小規模アプリケーションを頻繁に作成しています。GASのことなら何でもお任せあれ!現在は公務員として働きながら、起業に向けて着々と準備中です!

コメント

コメントする

CAPTCHA


目次