みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
**GASのアップデートで「V8ランタイム」がサポートされたことで、何が変わる?についてシリーズでお伝えしています。
前回の記事はこちら。
V8ランタイムへの切り替え方法についてお伝えしました。
さて、前回実行してみてログの表示について「おや?」というところがありましたよね…
今回は、その疑問について解消していきます。
GASのV8ランタイムとRhinoランタイムのログと実行のUIの違いについて比較&解説をしていきます。
では、行ってみましょう!
ログのUIを比較する
まず、ログのUIについて比較をしていきましょう。
以下のコードを用意しました。
function myFunction() { Logger.log('Loggerクラスによるログ'); console.log('consoleクラスによるログ'); }
ご存知の方も多いと思いますが、GASには以下2つのログの出力のしかたがありました。
- Loggerクラスのlogメソッドによるログ
- consoleクラスの各メソッドによるログ
それぞれ、以下の記事で紹介しておりました。
これらをRhinoランタイムでの環境と、V8ランタイムでの環境でそれぞれ実行して、ログの出力を比較、確認していきます。
Rhinoランタイムでのログ
まず、Rhinoランタイム環境でのログを見ていきます。
上記コードを実行して、メニューの 「表示」 > 「ログ」で確認します。
これは、多くの方はすばやくログを確認するために Ctrl + Enter のショートカットも活用されていましたよね。
すると、ログのダイアログが開き、以下のように表示されます。
こちらには、以下のログしか出ていません。
Loggerクラスによるログ
つまり、Logger.logメソッドによるログしか表示されず、console.logメソッドによるログは表示されません。
では、console.logメソッドによるログはどこに表示されるか?というと、ログのダイアログの下部にある
Apps Script ダッシュボードで、実行された他のスクリプトの Stackdriver ログを確認できます。
の「Apps Scriptダッシュボード」の部分をクリックして、Apps Scriptダッシュボードで実行パネルを展開して確認することができます。
consoleクラスによるログ
とありますね。
こちらは、console.logメソッドによるログのみ出力されました。
V8ランタイムでのログ
では、続いてV8ランタイムでのログを確認してみましょう。
お題のコードを実行して、メニューの「表示」 > 「ログ」 でダイアログを開きます。
すると…以下のようなメッセージが。
ログを待機しています。お待ちください…
数秒くらい待つと、画面が切り替わり以下の表示に切り替わります。
以下のように両方のログが出力されます。
Loggerクラスによるログ
consoleクラスによるログ
つまり、V8ランタイム環境では、ログ画面への表示に時間がかかり、Loggerクラスとconsoleクラスの両方のログが表示されるということです。
一方で、Apps Scriptダッシュボードで実行パネルを展開してログを確認してみます。
こちらも、以下のように両方が出力されますね。
Loggerクラスによるログ
consoleクラスによるログ
しかも、こちらは数秒の待ち時間はなくログが表示されます。
Apps Scriptダッシュボードの実行パネルを開きながら作業をするのが良さそうですね。
実行トランスクリプトのUIを比較する
では、続いて実行トランスクリプトのUIについて見ていきましょう。
実行トランスクリプトとは、スクリプトを実行した際に、スクリプトから呼び出した命令のタイムスタンプや、スクリプトの実行時間などを確認できる機能です。
以下の記事で紹介しています。
前述のログの比較と同じコードを使って比較していきます。
Rhinoランタイムでの実行トランスクリプト
まず、Rhinoランタイムで実行トランスクリプトを確認してみましょう。
コードを実行して、メニューから「表示」 > 「実行トランスクリプト」を選択します。
すると、以下のように実行トランスクリプトのダイアログが開き、各命令のタイムスタンプと合計実行時間が確認できます。
V8ランタイムでの実行トランスクリプト
続いて、V8ランタイムで実行トランスクリプトを確認していきます。
ただ、メニューの「表示」を開くと…
「実行トランスクリプト」がありません。
そうなんです、V8では実行トランスクリプトを使うことができません。
では、Apps Scriptのダッシュボードで見られるのか…というとそうではなく、公式ドキュメントには以下のように説明されています。
Since the Executions panel doesn’t provide timestamped logs of the individual Apps Script service calls, it’s recommended that you use the console service to create appropriate log messages.
Apps Scriptダッシュボードの実行パネルでは、Apps Scriptサービスの呼び出しについて個々のタイムスタンプ付きログが出ない、と。
なので、consoleクラスのメソッドを使って、適切なログメッセージを出力しておくれ、とのことです。
まとめ
以上、GASのV8ランタイムとRhinoランタイムのログと実行のUIの違いについて比較&解説をお伝えしました。
V8ランタイムのサポート開始ではECMAScript構文に注目が集まりがちですが、個人的にはこのログ関係の変更もけっこう重要かなと思っています。
つまり、V8ランタイムに移行していくことを考えると、以下のような流れにあるかなと推測しています。
つまり、ログや実行に関する情報の出力は
- Loggerクラスではなく、consoleクラスを使う方向になっていく
- スクリプトエディタではなく、Apps Scriptダッシュボードの実行パネルを使う方向になっていく
のではないかと。
今後も変更があるかも知れないので、注意深くキャッチしていければと思います。
さて、次回からはV8ランタイムで使えるようになったECMAScriptの新構文についてお伝えしていきます。
どうぞお楽しみに!