Help us understand the problem. What is going on with this article?

Google Apps Scriptのログ設計 #gasja

More than 1 year has passed since last update.

2017-12-30
新しく記事を書きました、こっちのほうがおすすめです。
GAS と Stackdriver(Logging, Error Reporting) を連携させる - Qiita


最近Google Apps Script(以降はGASと記載)を始めました@howdy39です。
GASを使い始めてまず思ったのは ログ出力(デバッグ)が辛い ということです。
この辛いログ出力をなんとかしようというのがこの記事の内容です。

Logger.log()

GASのログ出力はLogger.log()が基本になると思うのですが、
1. 処理実行
2. スクリプトエディタを開いて[表示]->[ログ](Command + Enter)
とか面倒すぎて辛い。

Browser.msgBox()

Broser.msgBox()を使えば実行時にすぐ確認できますが、閉じるのも面倒です。
そもそも画面がないGASだと無理。

結果

ということでシンプルなログ設計をしてみました。

ログ設計

開発時に必要なログはGoogleドキュメントに書き込む

スクリプトエディタを開いて[表示]->[ログ]、を回避したいのでGoogleドキュメントに書きます。
これならブラウザを横において確認できます。
また、追記だと最新のログが下にいってしまうので、毎回クリア。

処理の結果をメール送信する

開発時はGoogleドキュメントで構わないが、運用時にいちいちそんなの見てられない。
正常終了と異常終了はメールでログを送るようにします。

コード

で、書いてみたコードがこちら。

行数も大したことないし、特に難しいことはしていないから解説はしません。
筆者は気にしないので正常終了メールにもログをそのまま書いちゃってますが、そのへんは適宜書き換えてください。

コード.gs
var DEV_MODE = true;
var LOG_FILE_ID = '1UkulvHUunDzUzpVUmYmemYkG4YfZtIfr9vMOMIKzBS4'; // 事前にGoogleドキュメントファイルを作ってファイルIDを記載
var RECIPIENT = 'admin@howdylikes.jp';

function myFunction() {
  try {
    // ログをクリア
    if (DEV_MODE) getLogFile().getBody().clear();

    Logger.log('hoge');
    Logger.log('%s : %s', 'key', 'value');
    ここでエラーが発生

    // 正常終了メールを送信する
    sendNotificationMail('[XXXシステム]正常終了');

  } catch (e) {
    Logger.log('\n' + JSON.stringify(e, null, '  '));

    // 異常終了メールを送信する
    sendNotificationMail('[XXXシステム]異常終了');

  } finally {
    // ログを書き込む
    if (DEV_MODE) getLogFile().getBody().appendParagraph(Logger.getLog());
  }
}

function getLogFile() {
  if (this.logFile === undefined) {
    this.logFile = DocumentApp.openById(this.LOG_FILE_ID);
  }
  return this.logFile;
}

function sendNotificationMail(title) {
  MailApp.sendEmail(RECIPIENT, title, Logger.getLog());
}

開発風景

こんな感じになる。
[Command + R]でmyFunctionを実行すれば右のドキュメントのログが更新されます。
エラーの位置もわかるしとても快適。

image.png

メール画面

image.png

Slackに飛ばす

メール?時代はSlackでしょって人は、myThingやZapierなんかと連動させて異常終了メールだけSlackに送るとかしておくと良さそう。
もちろんGASから直接Slackに出力してもいいでしょう。
image.png

その他

Stackdriver Loggingを使えばStackdriverにログレベルを設定してログが出力できるので、こっちを使うのもありだと思う。

2017-12-30
その記事を書きました。
GAS と Stackdriver(Logging, Error Reporting) を連携させる - Qiita

最後に

こうするともっといいよ! というのがあったら教えてください。

howdy39
heyinc corporate engineer https://techthetoaster.booth.pm/
https://howdy39.dev/
storesjp
インターネットビジネスの企画・開発・運営、マーケティング、プロモーション、コンテンツの企画・制作
https://about.stores.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした