みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
GASでV8ランタイムがサポートされたことにより、ECMAScriptの構文が使用できるようになりました。
前回、以下の記事でその全体像についてお伝えしています。
では、早速使ってみよう!
ということで、今回は、GASのプロジェクトについてV8ランタイムに切り替える方法についてお伝えしていきます。
では、行ってみましょう!
前提
2020/02/07執筆時点では、Rhinoランタイムがデフォルトなのですが、今後V8ランタイムがデフォルトになる可能性が高いと考えています。
その際には、本記事の切り替え方法は不要となりますので、それまでの間に有効な情報となります。
Rhinoランタイムのまま新構文を試す
よし!早速、新構文を試してみよう!
ということで、切り替え作業をせずに、Rhinoランタイムのまま新構文を試してみます。
公式ドキュメントにあるV8の新構文のサンプルコードを拝借して、以下のコードをスクリプトディタで入力してみましょう。
function myFunction() { // V8 runtime let s = "hello"; if (s === "hello") { let s = "world"; console.log(s); // Prints "world" } console.log(s); // Prints "hello" const N = 100; N = 5; // Results in TypeError }
すると…
ステートメントの前に ; がありません。
とのエラー表示。そもそも保存すらできませんでした。
V8ランタイムに切り替える
ということで、やっぱりランタイムを切り替える必要があります(当たり前)。
V8ランタイムに切り替える方法を見ていきましょう。
あ、ちなみにランタイムの切り替えは「プロジェクト単位」になりますので、使いたいプロジェクトで都度ランタイム切り替えの作業が必要になります。
メニューからV8ランタイムに切り替える
V8ランタイムに切り替えるには、スクリプトエディタのメニューからが簡単です。
スクリプトエディタのメニュー「実行」 > 「Chrome V8 を搭載した新しいApps Scriptランタイムを有効にする」を選択します。
すると、以下のようなメッセージが表示されます。
Future executions of this project will run with Apps Script V8. Disable anytime via the Run menu.
これで切り替えは完了です。
メッセージ内に「実行メニューでいつで無効にできます。」とあるように、V8ランタイムに切り替え後は「実行」 > 「Chrome V8 を搭載した新しいApps Scriptランタイムを無効にする」が選択可能になりますので、いつでも戻せます。
ていうか、そもそもRhinoランタイムを使っている場合は、以下のようなメッセージが表示されます。
Enable new Apps Script runtime powered by Chrome V8 for this project.
このメッセージの「有効にする」をクリックしてもV8ランタイムに切り替えることができます。
こちらのほうが簡単…!
てか、V8ランタイムに積極的に切り替えてほしいというGoogleさんの意図を感じますね。
マニフェストファイルで変更する
もう一つの方法として紹介されているマニフェストファイルを設定する方法も一応紹介しておきます。
マニフェストファイルを表示する
マニフェストファイルを表示するにはメニューの「表示」 > 「マニフェストファイルを表示」とします。
すると、「appsscript.json」というファイルが表示されます。
これがマニフェストファイルで、プロジェクトの色々な情報を設定するためのJSONファイルとなっています。
マニフェストファイルは、スクリプトファイルと同じようにエディタ上で編集できまして、メニューなどで設定できない設定項目については、このマニフェストファイルで設定することができます。
マニフェストファイルを編集する
そのマニフェストファイルですが、作成したばかりのスタンドアロンスクリプトで、デフォルトでは以下のようになっています。
{ "timeZone": "Asia/Tokyo", "dependencies": { }, "exceptionLogging": "STACKDRIVER" }
V8ランタイムに切り替えるには、runtimeVersionフィールドを追加してその設定を「V8」にします。
つまり、以下のように編集します。
{ "timeZone": "Asia/Tokyo", "dependencies": { }, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8" }
JSONファイルの編集に慣れていない方は、前の行の最後の「カンマ(,)」を忘れないように気をつけてくださいね。
そして、保存しましょう。
runtimeVersionフィールドについて
runtimeVersionフィールドについて補足しておきます。
runtimeVersionフィールドの設定値はデフォルトは「STABLE」で、現在は「Rhinoランタイム」が摘要されます。
なので、runtimeVersionフィールドがない場合はRhinoランタイムになるということです。
公式ドキュメントによると、runtimeVersionフィールドを「DEPRECATED_ES5」の設定値にしたときについて以下のように説明されています。
Rhinoランタイムを示します。この値を設定すると、V8への自動移行も防止されます。
ゆくゆくはすべてのプロジェクトがV8に自動以降される可能性が示唆されています。
V8ランタイムで新構文を実行する
これで、冒頭の新構文のスクリプトは構文エラーとならずに、保存できるようになりました。
やったー!
では、V8ランタイムに切り替わったところで、新構文のスクリプトを実行してみましょう!
すると…
おや…
TypeError: Assignment to constant variable.(行 12、ファイル「コード」)
consで定義した定数は上書き禁止ということで、エラーを吐くサンプルでしたね。
修正して再度実行する
該当の行をコメントアウトして再度実行してみます。
ログを待機しています。お待ちください…
ログ表示…見慣れないメッセージですね。そういえば「console.log」でした。
少し待つと…以下のように表示されます。
V8ランタイムではログまわりのUIも変更になったんでしたね。
ここについては別記事で解説をしたいと思います。
まとめ
以上、GASのプロジェクトについてV8ランタイムに切り替える方法にお伝えしました。
そのうち、V8ランタイムへの切り替えは、メニューからできるようになるかも知れませんし、デフォルトがV8ランタイムになるかも知れません。
それまでの間、V8ランタイム環境を使いたい場合は、本記事を参考ください。
次回は、ログと実行のUIについて解説します。
どうぞお楽しみに!