たまに処理中のエラーが発生してその後の処理が進まないのを何とかしたい
こうした悩みをLINE通知を用いて解決します。
作るに至る経緯
※自分の忘備録も兼ねてるので興味なければスキップOKです⇒スキップする
GoogleappScriptではエラーが発生するとそこで処理が中断されてしまいます。
私の事例になりますが、Gmailにて特定のメールアドレスのメール本文を抜き取って、加工整形した結果をスプレッドシートに貼るというGASプログラムを作っていました。
このプログラムでは加工整形するのにあるルールを設けていますが、たまにそのルールを逸脱したメール本文で送られてくることがあります。
この時にGASはエラーをアラートで出して、処理が止まります。
自分でやる分には適宜対応すれば良いのですが、このプログラムはプログラミングのできない人も触るので、エラーが起こると都度都度私が呼び出されるということが起こります。
誰かが私にメッセージ送るのも、私が呼び出されて気づくまでの時間も無駄なので何とかしたい。
そこでエラーが起こった瞬間にLINE通知を飛ばして、すぐ気付ける形を作ることにしました。
全体イメージ
- try-catchでエラー発生時の処理ができるようにする
- tryに予め作った処理を入れる、catch内にLINE通知の処理を入れる
- LINE通知はLINE Notifyを使用
このイメージです。
try-catchの動作について
try-catchは以下のように使います。
try{
//処理を書く
} catch(e){
/* tryの処理でエラーが発生したらここに来ます */
//LINE通知処理を入れる
}
まずtryの中の処理を実行して、エラーが発生した時点で例外処理としてcatch(e)に飛びます。
今回エラーが発生したらLINE通知させるので、catch(e)内にLINE通知の処理を入れる、ということになります。
catchの引数eにはエラーメッセージが入っていて、e.messageでエラー情報を引っ張り出せます。
LINEトークンの取得(LINE側)
LINE通知させるにはLINE Notifyを使用します。
まずLINE Notifyにログインします。
※PCにて操作すること。スマホだとトークン発行できないので注意
画面右上のログインを押して、QRコードログインする
ログインすると、画面右上の表示が”ログイン”⇒”ユーザー”名に変更されているので、ユーザー名からマイページをクリック
「トークンを発行する」ボタンを押して、トークン名を入力、トークルームを選択してトークンを発行。
ここで発行したトークンはHTTPリクエストヘッダに使用します
これだけです、簡単!
LINE通知プログラム
const LINE_TOKEN = '' // ここに先ほど取得したトークンを設定
const msg = 'エラー発生 エラー内容:' + e.message;
let options = {
method: "post",
payload: `message=${msg}`,
headers: { Authorization: "Bearer " + LINE_TOKEN },
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
取得したトークンをLINE_TOKEN変数に入れます。
msg変数にエラー内容が書き込まれ、これをGoogleAppScriptがもつUrlFetchAppを使ってLINE NotifyにPOSTする(=送信する)という処理をするようoptionsで指定しています。
payloadがUrlFetchApp関数におけるメッセージ本文で、LINE Notify側はmessage=の形で受け入れるため、このような記述になります。
UrlFetchApp詳細については公式をどうぞ。
最終的なプログラム
try{
//処理を書く
} catch(e){
const LINE_TOKEN = '' // ここに先ほど取得したトークンを設定
const msg = 'エラー発生 エラー内容:' + e.message;
let options = {
method: "post",
payload: `message=${msg}`,
headers: { Authorization: "Bearer " + LINE_TOKEN },
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}
まとめ
GASでエラーが発生したらLINE通知ですぐ把握できますよー!
自分ではない誰かがGASを動かす時に使いたいテクニックですね。
コメント