🗒️

GASで長めの処理を書くときにやっているログ周りの小細工

2024/03/22に公開

背景

長い処理を書いていると予期せぬバグを作り込むことがあります。
GASのログは実行ごとに前回のものが消えてしまうので、スプシに残すようにしています。

流れ

準備

  1. 新しいスプシを作ります。
    GASのプロジェクトを作るだけなら https://script.google.com/home から作れますが、ログをスプシに書き出したいので、スプシから作っています。
  2. スプシのシート名を「log」などとし、以下の項目名を入れておきます。
    • A列 日時
    • B列 操作者
    • C列 種類
    • D列 ログ
  3. スプシのメニュー「拡張機能」>「AppsScript」をクリックし、GASの画面を開きます。
  4. util.gs などそれっぽい名前でファイルを作り、ログ出力処理をコピペします。
  5. 定数定義をまとめるために const.gs ファイルを作り、定数をコピペします。
  6. 以上!

長い処理を実装するとき

  • console.logの代わりに以下を使い分けます。
    • writeErrorLogSheet
    • writeInfoLogSheet
    • writeNoticeLogSheet
  • 処理が安定して動くようになり、詳細なログが要らなくなったら const.gsDEBUG_MODE をfalseにすればログが出なくなります。

コード

ログ出力処理

/**
 * ログ出力
 */
function writeErrorLogSheet(str) {
  writeLogSheet(LOG_ERROR,str);
}
function writeInfoLogSheet(str) {
  writeLogSheet(LOG_INFO,str);
}
function writeNoticeLogSheet(str) {
  writeLogSheet(LOG_NOTICE,str);
}

/**
 * ログ出力
 */
function writeLogSheet(type, str) {
  if(DEBUG_MODE) {
    Logger.log(str);
    var logsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('log');
   
    // 最終行に追加
    logsheet.appendRow([new Date(), Session.getActiveUser().getEmail(), type, str]);
  }
}

定数

// trueにするとログが出る
var DEBUG_MODE = true;

var LOG_ERROR = 'error';
var LOG_INFO = 'info';
var LOG_NOTICE = 'notice';

おわり

ファイルの分け方、変数名の付け方にはすごく癖が出ますね。

Discussion