PR

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

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

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

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

姫野秀徳

組み込みエンジニアとしてメーカー勤務10年。
第二種電工事士、基本情報技術者、Code.org認定教師。
microbitを用いた電子工作&プログラミング教室を開校。
組み込み開発の実際を発信するyoutube活動も行う。

無料で学べる組み込み開発オンラインスクールはじめました!
https://kumicla.tatepro.com

姫野秀徳をフォローする

作るに至る経緯

※自分の忘備録も兼ねてるので興味なければスキップ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
LINE NotifyはGitHub,IFTTT,MackerelなどのWebサービスからの通知を、LINEで受信することが出来る便利なサービスです。

画面右上のログインを押して、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を動かす時に使いたいテクニックですね。

この内容が良いと思ったら、いいね💖を押して教えてください!

組みクラ – 組み込み開発を学び、未来を創るエンジニアへ
無料で学べる!組み込み開発の基礎から応用までをマスターできるオンラインスクール「組みクラ」

組み込みエンジニアは、あらゆる産業の基盤を支える重要な職業です。
私たちタテプロは、次世代の組み込みエンジニアを育成し、業界の競争力を高めるために活動しています。
あなたも、無料で学べる「組みクラ」で、組み込み開発のスキルをしっかり身につけ、キャリアを加速させましょう!
今すぐ学び始めて、将来の自分をステップアップさせる第一歩を踏み出しませんか?

\立プロとLINEで友だちになりませんか/
立プロと友だちになる
フロントエンド
シェアしていただけると嬉しいです!

コメント

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