Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
28
Help us understand the problem. What is going on with this article?
@howdy39

Google Apps Scriptのログ設計 #gasja

More than 3 years have 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

最後に

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

28
Help us understand the problem. What is going on with this article?
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
howdy39
heyinc corporate engineer
storesjp
インターネットビジネスの企画・開発・運営、マーケティング、プロモーション、コンテンツの企画・制作

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
28
Help us understand the problem. What is going on with this article?