この記事は GAS道場 Advent Calendar 2019 の2日目の記事です。 Google Apps Script(GAS)をこれから使おうという方向けのアドベントカレンダーになります。
前回はGASを、簡単なスクリプトを実行して動いていることを確認しました。そのときにLoggerを使ってログを出力していましたが、今回は別の手法でログを出力する方法を紹介したいと思います。
- Stackdriver Logging
- GAS上でStackdriver Loggingにログを出す
- ログの確認
- ログの種類
- スクリプトの時間計測
- 自分的、LoggerとStackdriver Loggingの違い
- さいごに
Stackdriver Logging
今回使用するのが、Stackdriver Loggingというものになります。
Stackdriver Loggingでは、GCPやAWSからのログデータを検索、分析、モニタリング、通知ができるものです。 今回は、これのログの検索というか閲覧の用途に使いたいと思います。
GAS上でStackdriver Loggingにログを出す
では、さっそくログを出していきましょう。
function myFunction() { console.log('Hello GAS World.') }
上記のように、console.logを使ってログを出すだけになります。Javascriptでは頻繁に使われるものなので、おなじみですね。
ログの確認
次にログを確認してみましょう。
表示 -> Stackdriver Logging を選択します。
確認ポップアップが表示されたら、Apps Script ダッシュボード のリンクをクリックします。
すると、上のスクショのような画面が表示されるかと思います。
これのheadやmyFunctionが書かれたレコードをクリックしてみましょう。実行ごとに生成されるレコードになります。
スクリプトに入力したHello GAS World.がちゃんと出力されているのが確認できます。
ログの種類
さて、Apps Scriptのドキュメントを確認してみましょう。
こちらを見てみると、ログレベルが変えられるようですね。ということで実際にやってみましょう。
function consoleTest() { console.log('console.log'); console.error('console.error'); console.info('console.info'); console.warn('console.warn'); }
このスクリプトを実行してみると、以下のようなログが出力されました。
しっかり、ログレベルがわかりやすく出力されましたね。
スクリプトの時間計測
ドキュメントを見てみると、気になるメソッドが見つかりました。 time(label)とtimeEnd(label)というメソッドがconsoleクラスに見つかります。 引数がラベルということで、ラベルごとに時間計測ができるのでしょう。
ということで実際に使ってみましょう。
function timeTest() { console.time('test1'); Utilities.sleep(500); console.time('test2'); Utilities.sleep(1000); console.timeEnd('test1'); Utilities.sleep(1500); console.timeEnd('test2') }
GASのsleep関数であるUtilities.sleep()を用いて、処理の遅延・停止をしてみましょう。他の言語でいうdelayやwaitみたいなものですね。
test1とtest2で並列して計測ができていますね。これで実行時間の計測ができるようになりますね。
GASではいろんなGoogleや外部のAPIを叩くことが多くなると思うので、これはとても使えるものだと思いますし、いろんなところで時間計測をお勧めします。
自分的、LoggerとStackdriver Loggingの違い
さて、ログの確認方法がいくつか出てきましたね。昨日と今日とでLoggerとStackdriver Loggingを紹介しました。 使っていてなんとなく違いはわかったかと思いますが、自分なりに使い分けを紹介したいと思います。
Loggerは、エディタ上で簡単にすぐにログを確認できるため、プログラムを書きながらデバッグをするのにお勧めです。 Stackdriver Loggingは、別のウィンドウを開かないといけないため、エディタ上で実行するときのデバッグ中はあまり使わないかもですが、後で説明するエディタ上の実行ではなく、ウェブアプリケーションとして公開したときなどの別のトリガーで実行されるときのログの確認はこちらのやり方じゃないとできません。 なので、とりあえず今は、そんな感じで使い分けができればよいかと思います。
さいごに
さて、今回はログの確認までをやりました。これで実際のスクリプトが書けるようになるので、次からは実際にいろんなプログラムを書いてみましょう。