V8ランタイムを有効にし最新のECMAScriptを動かすTweetみんな大好きGoogleAppsScriptで、2020年2月よりES2015以降のナウい構文が利用できるようになりました。OverviewこれまではMozilla製のランタイムRhinoが裏側で動いており、ES5までの構文に対応していました。JavaScriptが劇的に進化したのはES2015(ES6)からです。現代においてES5までの構文しか使えないのはやはり辛い。classはもちろんconstやletもES2015からなのです。そんな折に満を持してGoogle謹製V8ランタイムの登場と相成ったというわけです。これで最新のECMAScriptが動作します。参考ページ設定するV8ランタイムを有効にするのは非常に簡単で、2020年2月14日現在だとプロジェクトを起動すると画面上部に以下のようなメニューが現れますので「有効にする」をクリックするだけです。ランタイムを有効にする」を選択します。逆の手順をたどると無効にすることもできます。将来的にはV8がデフォルトになると思われるのでこの設定は一時的な物かもしれませんね。実際に使ってみるサンプルコード動物クラスを継承した猫クラスを作ってみました。Tama.speak("おはようございます");}ログを見ると無事に出力されていました。このサンプルから以下の新機能は普通に利用できそうなことがわかりますね。公式ドキュメントに記載されている内容を追ってみます。eachがすでに削除されているため、連想配列などの走査にはfor...in構文を利用します。value);}getYear()を使わない西暦の年が欲しい場合はgetFullYear()を利用します。now.getFullYear();getYear()はランタイム毎に以下のような挙動をになります。Rhino1900〜1999年の年数は2桁の年、それ以外は4桁の年数を返却V8常に1900を引いた年数を返却そのためランタイムに依存せず常に4桁の西暦を返却するgetFullYear()がオススメされてているというわけです。予約済みキーワードを利用しない変数や関数名などに予約済みのキーワードを指定しないようにします。これは今回ESのバージョンが上がったことでキーワードが増えたことによるものです。classなどはES5までは利用できていましたが、V8に移行する際は別の名前に変更する必要があります。ES2015で定義されているキーワードは以下の通りです。breakcasecatchclassconstcontinuedebuggerdefaultdeletedoelseexportextendsfinallyforfunctionifimportininstanceofnewreturnsuperswitchthisthrowtrytypeofvarvoidwhilewithyieldconstで定義した変数の値を変更しない以下のコードは実行時エラーとなります。constで最初に代入した値は変更できなくなります。ちなみに以下のようにオブジェクトを代入し、オブジェクト内の変数の値が変わるのは構いません。Animal();}XMLを利用する場合はXmlService()を使う最近はJSでXMLを使う機会はめっきり減った印象ですが、旧来の利用方法から変更になりました。OK実行順に注意が必要グローバル変数を複数ファイルで扱う場合に注意が必要です。以下の2つのファイルを用意し、「1st.gs」のmyFunction()を実行すると実行時エラーとなります。Math.random();}2nd.gsに存在するハズのcalculate()が存在しないと言われています。1、ファイル「1st」)」Rhinoではすべてのファイルを読み込んだ後に実行されていたためエラーにはならなかったのですが、順番に1ファイルずつ読み込み、読み込んだ瞬間にグローバル変数として記述している部分が実行されるためこのようなエラーとなるようです。回避する手軽な手段としては関数やクラスの中に入れてしまうやり方でしょうか。globalVar);}異なるファイル間で依存し合うグローバル変数は推奨されないようです。条件付きのtry〜catchを使わないcatch()の中で条件式の記述がV8ではサポートされていません。}));thisの内容が異なる関数内のthisの内容が異なります。console.log(Object.keys(this));}上記のコードを実行した場合、ランタイムによって次のような内容になります。Error.lineNumberを使わないenumオブジェクトをJSON.stringify()した際の挙動が異なる関数に渡すundefinedの扱いが異なるRhinoだと文字列として渡されると書いてあったのですが、そっち側を再現できませんでした。詳しくは以下のページを参照してください。自宅警備がてらゲームのお仕事や講師などしてご飯を食べてます。ご質問やリクエストなどお気軽に。メールアドレスの入力は任意です。書き込みが反映されるまで時間がかかります。コメントデータの処理方法の詳細はこちらをご覧ください。ブログをメールで購読メールアドレスを記入して購読すれば、更新をメールで受信できます。