PR

GoogleAppScriptを実行した時のエラーをLINEで通知する方法

GoogleAppScriptを実行した時のエラーをLINEで通知する方法 フロントエンド

たまに処理中のエラーが発生してその後の処理が進まないのを何とかしたい

こうした悩みをLINE通知を用いて解決します。

立プロ

新卒でメーカーに入り、10年間組み込みの現場で設計を行う。
今は個人事業主として自作の組み込み機器開発や、エージェント様に紹介いただき業務委託を行っています。
C,C#,JavaScript, Vue, PHP, VBA, GAS, Kotlinなど、扱う言語が増えゆく日々。

立プロをフォローする

作るに至る経緯

※自分の忘備録も兼ねてるので興味なければスキップ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にて操作すること。スマホだとトークン発行できないので注意

LINE Notify
...

画面右上のログインを押して、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詳細については公式をどうぞ。

Class UrlFetchApp  |  Apps Script  |  Google for Developers

最終的なプログラム

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を動かす時に使いたいテクニックですね。

コメント

タイトルとURLをコピーしました