Google Apps Script(GAS)を使用してスクリプトを実行する際、GASの制限にやりたいことが阻まれることがたまにあります
そこで、本記事では、GASの制限を超えるための小技を解説していきます!
今回は以下の2点の小技を解説したいと思います
今回は趣向を変えて…
GASの制限を突破していこうと思うんだ
正気ですか?????
こーすけ先生、以前…「使用制限や上限を意識することが大切」って言ってましたよね???
もちろん、その考えは大切だよ
そのマインドは持った上で、今回は一休さん的思考で
上限突破するぞ!って記事だから!
ふっ…不安だ……
GAS(Google Apps Script)を活用して、手動での作業を自動化することで、時間と労力を節約できるようになります
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回繰り返しています!
また、ループの中で以下の行が実行されます
GmailApp.sendEmail('*******@gmail.com', 'Gメール送信回数確認','')
は、指定のメールアドレスにメールを送信するコードです
3番目の引数には本文が入りますが、この場合は中身がないので、
空メールになります
MailApp.getRemainingDailyQuota()
という関数はメール送信後、残りの制限回数を再び表示します
そして、このメール送信による制限回数は、たとえ有償のWorkspaceユーザでも撤廃されることはありません。
制限について記述した過去記事を参考にしてみてください
よしっ!じゃあ、いっちょ
突破していきますか!
今回のこーすけ先生はいつもと違うなぁ
GASの自動メール送信回数を突破してみる
では早速、メールの送信上限を突破していきましょう!
つまり、GmailAppを用いて直接sendMailを実行することをカウントしているわけです
とんちのように聞こえますが、ここがポイントです
そのためメール送信箇所を以下のように変えてみましょう!
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から下書きを取得し、メール送信を依頼する
GmailApp
の createDraft
メソッドを使用して、指定した宛先、件名、本文、およびオプション情報を持つ新しいメールの下書きを作成します(この段階ではまだメールは送信されず、下書きとして保存されます)
GmailApp.getDraft(mailDraft.getId()).send();
作成した下書きメールを GmailApp
の getDraft
メソッドを使用して取得し、send
メソッドを呼び出すことでメールの送信を依頼します
この方法を使用することで実際のメール送信ではなく、下書きの送信が行われます
ただし!!!
GASの実行制限に関しては突破できますが、そもそものGmailの制限も併せてご確認ください
こればっかりはどうしようもないので、GASを実運用に適用する場合は、必ずご一読をお願いします
【小技2】トリガーを指定した任意の時間に実行
GASのトリガー実行では「日付ベースのタイマー」を設定できるか、実行時刻に幅がある(0:00~1:00といった具合) ことをお伝えしました
もちろんこれでも許容範囲な場合もあるかもしれませんが、可能な限り、想定通りの時刻に実行したいですよね
前回の記事に「トリガーの設定のやり方」が載っていますので、必要に応じて確認してください!
それでは、さっそく解説していきます
特定日時の設定もある
GASのトリガー実行には、以下画像で示す通り、「特定の日時」とすることで、作成者の意図した時間に実行することは可能です
しかし、見てわかる通り、特定の日時を一度だけしか設定できません
毎日8:30に実行されるようにしたいならば、その数だけトリガーを作成する必要があります
しかし、ここでもGASの制限事項がついてまわります
そのため、毎日実行されるようにしたくても、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情報をお届けしますので、是非フォローしてください!
おかげさまで今年5月に起業しました!
GASやGoogleサービス、プログラミング全般のご相談承ります!
YouTubeでGoogleサービスをより
快適に使う方法をご紹介しています!
見て頂けたらうれしいです
コメント