JavaScript
GoogleAppsScript
spreadsheet
More than 1 year has passed since last update.

この記事はGoogle Apps Scriptを実例交えて基礎からざっくり学ぶ Advent Calendar 2017 9日目の記事です。

本アドベントカレンダーは@rt_pの個人プロジェクトですが、筆者はAteam Brides Inc. Advent Calendar 2017にも参加しています。そちらでも出張版記事を書いているので、覗いていただけると嬉しいです。

はじめに

今回の記事は何のことはない、単なるtry catchです。
GASを使っていると外部サービスと連携することが多いと思うのですが、例えば外部サービスのサービスが落ちたりだとか、APIの回数制限に引っかかって定期実行がうまくいかなかったりだとか…
そういう時に、エラーがしっかりキャッチできて通知できると嬉しいですよね。

error2.png

エラーが起きるサンプル

error.gs
function myFunction() {
  errorSample();
}

function errorSample() {
  sheet.getRange(1, 1).setValue('hoge'); // sheetが未定義なのでエラーになる
}

上記サンプルを実行すると、sheetという変数が未定義なのにgetRange()をしようとしてエラーで怒られるはずです。

error.png

開発中はすぐにエラーに気付けますが、例えばこのスクリプトを昨日の記事のように1分だとか1時間だとかで定期実行していると、エラーに気付くのも遅れますよね。

一応定期実行がコケた際のメール通知は標準機能で搭載されていますが、通知タイミングも遅いので対応も遅れがちです。

try catchでエラーをキャッチする

下記サンプルを実行すると、先程のように画面にエラーは出なくなるはずです。

error_catch.gs
function myFunction() {
  try {
    errorSample();
  } catch (e) {
    Logger.log(e);
  }
}

function errorSample() {
  sheet.getRange(1, 1).setValue('hoge'); // sheetが未定義なのでエラーなので例外が投げられる
}

Ctrl+Enterでログを開くと、今回はエラーがログに吐かれているのを確認できます。

error2.png

ログに吐いているのは正直サンプルとしては不適切な気もしますが:sweat_smile:
次回の記事では自動でメールを送るサンプルを紹介するので、実行に失敗したタイミングですぐにメール通知をしたり、ChatworkのAPIを叩いて通知することですぐに気付ける仕組みが作れます。

また、サンプルでも分かるようにtryブロックの中で呼んだ関数の中でエラーが起きてもしっかりキャッチできるので、myFunction()の中身をtry catchで大きく囲ってしまうのも、スマートなやり方には見えませんが方法としては楽だしアリなのかなと思っていたりします。

おわりに

今回は本当にこんなことができますよ程度のシンプルな内容でした。

本アドベントカレンダーは、1日目~9日目あたりは基礎編でGASに関する基本的な操作を紹介していきます。
10日目以降は応用編ということで、実際に作ったアプリケーションとそれに関する技術の紹介になります。お楽しみに!

明日

【Google Apps Script】その10 スプレッドシートにボタンを設置して、ワンクリックで郵便番号から住所を自動入力する
となります。
スプレッドシートにボタンを設置し、クリックすることで郵便番号から住所を自動入力するスクリプトを作成します。

前の記事
【Google Apps Script】その8 スクリプトを定期実行し、ビットコインの1分ごとの価格を自動取得する
次の記事
【Google Apps Script】その10 スプレッドシートにボタンを設置して、ワンクリックで郵便番号から住所を自動入力する