祝!Google Apps Scriptが「V8ランタイム」をサポート!モダンなECMAScript構文が使えるようになった


runtime

photo credit: Günter Hentschel 2020 läuft! via photopin (license)

みなさん、こんにちは!
タカハシ(@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 Runtime Overview  |  Apps Script  |  Google Developers

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()を避ける

また、これ以外に細かな変更が公式ドキュメントでは示されています。

Migrating scripts to the V8 runtime  |  Apps Script  |  Google Developers

これらを使っているケースは稀だと思いますが、使用している場合にはスクリプトの修正対応が必要です。

いくつかバグがあった場合は、以下から報告することができます。

How to get help  |  Apps Script  |  Google Developers

まとめ

以上、Google Apps Scripによる「V8ランタイム」のサポートについて、その概要をお伝えしました。

2018年のGoogle Cloudの発表から2年近く待っていましたので、これから使えるのが楽しみです。

V8ランタイムによる各変更点については、このブログでもより細かくお伝えしていきます。

次回は、V8ランタイムへの切り替えの方法についてお伝えします。

新構文をさっそく試そう!GASのプロジェクトをV8ランタイムに切り替える方法
GASでV8ランタイムがサポートされたことにより、ECMAScriptの構文が使用できるようになりました。今回は、GASのプロジェクトについてV8ランタイムに切り替える方法についてお伝えしていきます。

どうぞお楽しみに!

連載目次:GASの「V8ランタイム」サポートで変わることとは

Google Apps Scriptに待ちに待ったアップデートがやってきました。「V8ランタイム」のサポート開始です。これにより、ECMAScript構文が使えるようになり、その他いくつかの改善が加わりました。このシリーズでは、V8ランタイムに切り替えることでできるようになったことについてシリーズでお伝えしていきます。
  1. 祝!Google Apps Scriptが「V8ランタイム」をサポート!モダンなECMAScript構文が使えるようになった
  2. 新構文をさっそく試そう!GASのプロジェクトをV8ランタイムに切り替える方法
  3. GASのV8ランタイムとRhinoランタイムのログと実行のUIの違いについて比較&解説
  4. GASの「V8ランタイム」アップデートを受けて私がやるべきことリスト

タイトルとURLをコピーしました