Google Apps ScriptがV8 Runtimeをサポート
Google Apps Script界隈で結構言われ続けてきた事が「サポートされてるJavaScriptのエンジンが古すぎる」というワードがあります。これまでのGoogle Apps Scriptは非常に古いタイプのJavaScriptをベースにしており、「あれができないこれができない」と言われて来ました。
今回のアップデートでV8 runtimeベースとなり、ES6の多くの構文が使えるようになりました。
図:V8のVはV型8気筒エンジンのV
概要
G Suite の今後のリリースにも、ES2017準拠の環境が開発中という表示がされていましたが、昨日「V8 Runtimeをサポート」というニュースが入ってきました。release noteにも記載されています。
V8 Runtimeサポートに関するドキュメントはこちらになります。Issue Tracker掲載の情報はこちらになります。現在はES6 modules are not yet supported.と書かれているので、Node.jsのようにexportやimportといったものはまだ使えないようです。
HTML Serviceで出力したHTML側は元々使えていたので、これでGAS側もHTML側も同じ構文で開発が可能になりますね。また、JavaScriptでは使えるのに、GASでは使えないので、我慢してたり自分でそれを実現するコードを書いたり非生産的なことが不要になるので、今後のGASの書き方がグッと変わってくると思います。
気になる点が、V8 RuntimeになってGASのスクリプト実行速度に変化があるのだろうか?という点。予てより実行スピードが遅いGASは、速度をアップさせる為に色々と工夫が必要でした。この点が変わっているといいなぁ。
有効にする手順
今回のV8 Runtimeを使うには以下の手順が必要です。本来はスクリプトエディタの「実行」の中に「Chrome V8を搭載した新しいApps Scriptランタイムを有効にする」というものをクリックして有効にすればそのスクリプト内で有効になります。まだ、表示されていない人は手動で変更も可能。無効にするにチェックをすれば元に戻ります。
図:メニューから簡単に切り替えられるよ
手動で変更する場合は以下の手順。詳細はmanifest structureを参照してください。
- スクリプトエディタを開く
- メニューの「表示」⇒「マニフェストファイルを表示」をクリック
- appsscript.jsonを開き、1行以下のようなものをを追加する
- 保存すれば、すぐに使えるようになります。
- もとに戻す場合には、この行を削除すればオッケーです。(DEPRECATED_ES5を指定しても可)
1 2 |
//追加する行はこちら "runtimeVersion":"V8" |
図:簡単に使えるようになります
注意点
V8にしてから、もとに戻した場合、当たり前ですが互換性が失われているので、スクリプトが動かなくなる可能性があります。また、過去のApps ScriptはECMAScriptの一部の構文が使えていたりしたのですが、これらもV8準拠となるため、使えなくなる可能性があります。
ライブラリやアドオンからの呼び出しなどはすでに対応しており、Logger.logやconsole.logも対応済み。既存のスクリプトをV8準拠のスクリプトにmigrateする場合にはこちらを参照すると良いでしょう。
また、GASの根幹に関わる部分なので、チームで開発をしてる場合、安易にV8構文準拠にしてしまうと、慣れていない他の開発者が読めない、ワケガワカラナイヨとなりやすい(基本VBAのようにエンドユーザ開発が多い為)、自分以外もコードを触る可能性がある場合には、気を使うようにしましょう。
可能になること
極めて端的に言えば
- アロー関数が使えるようになります
- letやconstが使えるようになりますので、トリッキーな手法が不要になります。
- class構文が使えるようになります。
- 分割代入が使えるようになります。
- テンプレートリテラルが使えるようになります。
- 関数のデフォルト引数が使えるようになります。
- 複数行に渡る文字列を使えるようになります。
- for each文の書き方が変わります
- getYear()の仕様がDate.protptype.getFullYear()に変わります。
- その他たくさん変更点あり
検証結果
色々と新しい記法やメソッドを検証してみた結果は以下のエントリーにまとめました。
関連リンク
- JavaScript アロー関数を説明するよ
- ES6の新機能: 「let」「const」宣言を調べてみた
- 【JavaScript入門】class構文の使い方・書き方が分かるようになる方法!
- 《JavaScript》ES6の分割代入のはじめかた。
- JavaScript の テンプレートリテラル を極める!
- JavaScript 関数のデフォルト引数のサンプル
- JavaScriptで複数行の文字列や変数を扱うならテンプレート文字列が便利
- Now Write your Google Scripts using Modern JavaScript ES6
- GASがV8エンジンに対応したのでドキュメント読んだ
- ES2015が備えるモダンな非同期処理
- ES2015に追加、拡張された機能
- JavaScript文法(12) ES6の新機能
- ECMAScript6の新機能
- Read Understanding ECMAScript 6
- 【GoogleAppsScript】ES6を使ったGoogle Apps Scriptの開発
- V8エンジンでのJavaScriptの機能と最適化コードの書き方に関する5つのベストプラクティス
- V8の基本的なAPIを学ぶ
- JSエンジン「V8」はバージョン6で世代移行を終える ── Google I/O 2017レポート
- Google Apps Scriptで使えるJSのバージョンについて調査
- Google Apps Script で実行できる繰り返し構文について
- Apps Script runtime powered by Chrome V8
- V8 Engine roll-out over the next few days...
- ES2015(ES6) 入門