ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。プログラム&ロボット大好きなポンコツが日々の記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

【GAS】Stackdriver Loggingを利用したデバッグ術

この記事は GAS道場 Advent Calendar 2019 の2日目の記事です。 Google Apps Script(GAS)をこれから使おうという方向けのアドベントカレンダーになります。

前回はGASを、簡単なスクリプトを実行して動いていることを確認しました。そのときにLoggerを使ってログを出力していましたが、今回は別の手法でログを出力する方法を紹介したいと思います。

Stackdriver Logging

今回使用するのが、Stackdriver Loggingというものになります。

cloud.google.com

Stackdriver Loggingでは、GCPやAWSからのログデータを検索、分析、モニタリング、通知ができるものです。 今回は、これのログの検索というか閲覧の用途に使いたいと思います。

GAS上でStackdriver Loggingにログを出す

では、さっそくログを出していきましょう。

function myFunction() {
  console.log('Hello GAS World.')
}

上記のように、console.logを使ってログを出すだけになります。Javascriptでは頻繁に使われるものなので、おなじみですね。

ログの確認

次にログを確認してみましょう。 f:id:ponkotsu0605:20191117191752p:plain 表示 -> Stackdriver Logging を選択します。 f:id:ponkotsu0605:20191117191848p:plain 確認ポップアップが表示されたら、Apps Script ダッシュボード のリンクをクリックします。 f:id:ponkotsu0605:20191117192024p:plain すると、上のスクショのような画面が表示されるかと思います。 これのheadやmyFunctionが書かれたレコードをクリックしてみましょう。実行ごとに生成されるレコードになります。 f:id:ponkotsu0605:20191117192146p:plain スクリプトに入力したHello GAS World.がちゃんと出力されているのが確認できます。

ログの種類

さて、Apps Scriptのドキュメントを確認してみましょう。

developers.google.com

こちらを見てみると、ログレベルが変えられるようですね。ということで実際にやってみましょう。

function consoleTest() {
  console.log('console.log');
  console.error('console.error');
  console.info('console.info');
  console.warn('console.warn');
}

このスクリプトを実行してみると、以下のようなログが出力されました。 f:id:ponkotsu0605:20191117192852p:plain しっかり、ログレベルがわかりやすく出力されましたね。

スクリプトの時間計測

ドキュメントを見てみると、気になるメソッドが見つかりました。 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みたいなものですね。 f:id:ponkotsu0605:20191117193523p:plain test1とtest2で並列して計測ができていますね。これで実行時間の計測ができるようになりますね。 GASではいろんなGoogleや外部のAPIを叩くことが多くなると思うので、これはとても使えるものだと思いますし、いろんなところで時間計測をお勧めします。

自分的、LoggerとStackdriver Loggingの違い

さて、ログの確認方法がいくつか出てきましたね。昨日と今日とでLoggerとStackdriver Loggingを紹介しました。 使っていてなんとなく違いはわかったかと思いますが、自分なりに使い分けを紹介したいと思います。

Loggerは、エディタ上で簡単にすぐにログを確認できるため、プログラムを書きながらデバッグをするのにお勧めです。 Stackdriver Loggingは、別のウィンドウを開かないといけないため、エディタ上で実行するときのデバッグ中はあまり使わないかもですが、後で説明するエディタ上の実行ではなく、ウェブアプリケーションとして公開したときなどの別のトリガーで実行されるときのログの確認はこちらのやり方じゃないとできません。 なので、とりあえず今は、そんな感じで使い分けができればよいかと思います。

さいごに

さて、今回はログの確認までをやりました。これで実際のスクリプトが書けるようになるので、次からは実際にいろんなプログラムを書いてみましょう。