🗒️
GASで長めの処理を書くときにやっているログ周りの小細工
背景
長い処理を書いていると予期せぬバグを作り込むことがあります。
GASのログは実行ごとに前回のものが消えてしまうので、スプシに残すようにしています。
流れ
準備
- 新しいスプシを作ります。
GASのプロジェクトを作るだけなら https://script.google.com/home から作れますが、ログをスプシに書き出したいので、スプシから作っています。 - スプシのシート名を「log」などとし、以下の項目名を入れておきます。
- A列 日時
- B列 操作者
- C列 種類
- D列 ログ
- スプシのメニュー「拡張機能」>「AppsScript」をクリックし、GASの画面を開きます。
-
util.gs
などそれっぽい名前でファイルを作り、ログ出力処理をコピペします。 - 定数定義をまとめるために
const.gs
ファイルを作り、定数をコピペします。 - 以上!
長い処理を実装するとき
- console.logの代わりに以下を使い分けます。
- writeErrorLogSheet
- writeInfoLogSheet
- writeNoticeLogSheet
- 処理が安定して動くようになり、詳細なログが要らなくなったら
const.gs
のDEBUG_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