みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
さて、日本時間2020/02/06の朝。
待ちに待った知らせがやってきました。
そう、「Google Apps Script」がECMAScriptに対応をしたという一報です。
正確には、「V8ランタイム」と呼ばれるJavaScriptエンジンがサポートされたのですが、GASで使える構文が一気に増えたリ、他にもいくつかの改善が加わりました。
ということで、今回はGASがV8ランタイムをサポートしたことで何が変わるのか?についてその概要をお伝えします。
では、行ってみましょう!
今回、GASにどのようなアップデートがあったのか
まず、今回のGASのアップデートの概要についてお伝えします。
Google Apps Scriptではこれまで、「Rhinoランタイム」というJavaScriptを実行するエンジンを使ってきていました。
で、実際にそれで実行できるJavaScriptの構文は「JavaScript1.6~1.8」とかのバージョンのもので、正直古いもの…
今、多くのJavaScriptプログラマーが使っている「ECMAScript」と呼ばれるJavaScriptのバージョンとは、かなりの差分がありました(ECMAScriptにも「ES5」や「ES6」などのいくつかのバージョンがあります)。
さて、今回のGASのアップデートで、Rhinoランタイムに加えてGASで「V8ランタイム」というJavaScript実行エンジンがサポートされました。
V8ランタイムに切り替えることで、Rhinoランタイムで使えなかった便利なJavaScript構文のいくつかが、新たに使えるようになりました。
例えば、変数宣言や関数の記述など、根本的で高頻出な処理についての構文が追加されているので、その影響は大きいです。
また、それに加えてログや実行トランスクリプトのUIなど、開発環境のいくつかも改善されています。
以下、公式ドキュメントのページもご参考ください。
V8ランタイムとは
V8ランタイムとは、Googleによって開発されたJavaScriptエンジンで、Google ChromeなどのChromiumベースのブラウザで使用されているものです。
一般で最もよく使用されているJavaScriptエンジンといって良さそうです。
V8ランタイムがもたらすメリット
当然、JavaScriptプログラマーにとってのメリットは大きいです。
ふだん使っている構文が、そのままGASでも使えるようになるからです。
ノンプログラマーの視点でもメリットがあります。
参考にするWebや書籍のJavaScriptの情報の多くを、GASに摘要して参考にすることができるようになります。
また、当然ながら便利な構文が追加されていますから、これまでよりもよりシンプル、スマートなコードを書くことができるようになります。
V8ランタイムによる主な変更点
V8ランタイムに切り替えることによる主な変更点は以下のとおりです。
- 最新のECMAScript構文が使える
- 新しい関数定義が検出されるようになった
- トリガーとコールバックからオブジェクトメソッドを呼び出す
- ログのUIの変更
- 実行トランスクリプトのUIの変更
最も注目すべきはECMAScript構文ですが、その他にもいくつかの変更がなされています。
特にログと実行トランスクリプトのUI変更は影響があると思います。
V8ランタイムで追加された構文
V8ランタイムにより追加された構文を列挙します。
詳細は当ブログでも別記事で紹介していきたいと思います。
V8ランタイムを使うためには
V8ランタイムへの切り替え方法
スクリプトエディタでRhinoランタイムとV8ランタイムを切り替えることができます。
公式ドキュメントにはスクリプトエディタのメニュー「実行」 > 「Enable new Apps Script runtime powered by V8」で切り替えられるとありますが、本記事執筆時点2020/02/07時点ではまだ登場していません。
または、「表示」 > 「マニフェストファイルを表示」から編集ができるようになる、**「マニフェストファイル」のruntimeVersionフィールドに”V8″を指定することで、切り替えが可能です。
(runtimeVersionフィールドに”DEPRECATED_ES5″を指定することで、Rhinoランタイムに切り替えることができます。「deprecated」は「非推奨」という意味です)
コードをV8ランタイムに対応させる
Rhinoランタイムを使用して記述されたほとんどのスクリプトは、調整なしでV8ランタイム環境で実行可能です。
ただし、以下に列挙したわずかな非互換性があります。
- for each(variable in object)は避ける
- Date.prototype.getYear()は避ける
- 新たな予約語class, import, exportは避ける
- constの再代入はエラーになる(これはもともとサポートされてたがタイプエラーになるようになった
- XMLリテラルとXMLオブジェクトは避ける
- __iterator__を使用してカスタムイテレータ関数を構築しない
- 解析される前に関数を呼び出さない
- 条件付きcatch句を避ける
- Object.prototype.toSource()を避ける
また、これ以外に細かな変更が公式ドキュメントでは示されています。
これらを使っているケースは稀だと思いますが、使用している場合にはスクリプトの修正対応が必要です。
いくつかバグがあった場合は、以下から報告することができます。
まとめ
以上、Google Apps Scripによる「V8ランタイム」のサポートについて、その概要をお伝えしました。
2018年のGoogle Cloudの発表から2年近く待っていましたので、これから使えるのが楽しみです。
V8ランタイムによる各変更点については、このブログでもより細かくお伝えしていきます。
次回は、V8ランタイムへの切り替えの方法についてお伝えします。
どうぞお楽しみに!