あらすじ:
- GAS (Google Apps Script) はJavaScript 1.6〜1.8という古い構文だった
- 最近それがV8 runtimeというエンジンに変わってECMAScript準拠のナウい構文になった
- Webのスクリプトエディタを使っている人はRunメニューから切り替えられる
- claspを使っている人はローカルのappsscript.jsonを手動で書き換える必要がある
これでわかった人は読む必要なし。
詳細:
GASのランタイムがRhinoというのからV8というのに変更になった。
これまでのGASのJavaScriptは1.6〜1.8とかの古いものだったが、ECMAScript準拠のナウいものになったらしい。
めでたい。
参考記事: https://tonari-it.com/gas-v8-runtime/
上の「隣にIT」さん(いつもお世話になります!)の記事の執筆時点では、本来「実行>Enable new Apps Script runtime powerd by V8」で変更できるが、まだ「表示>マニフェストファイルの変更」でマニフェストファイルを表示して変更しなければならなかった、と書かれているが、2020-02-10では、ちゃんと実行メニューに「Enable...」と表示されるようになった。
ちなみにこれ、トグルになっていて、Enable状態で実行メニューを見るとDisable、Disable状態で見るとEnableが表示されていて、RhinoとV8が交互に切り替わるようになっている。
(Rhinoってオライリーのサイ本のサイだね!w)
また、ぼくの場合スクリプトエディタを開いただけで「V8が使えますがどうしますか」的なメッセージが出てきて(スクショ撮りはぐった><)、はい、と答えるだけでV8に切り替わった。
ただ、ぼくはclaspを使っていて、ローカル上にRhinoのレガシーソースが溜まっていた(※)。
これをpushしようとすると
? Manifest file has been updated. Do you want to push and overwrite?(y/N)
と言われる。
「y」と入力すると、マニフェストファイルも置き換わってしまい、レガシー状態に戻ってしまう。
デフォルトを受け入れてEnterを押下するか「N」と入力すると、マニフェストファイル以外のソースもアップロードされない。
この場合は、claspのローカル環境にあるマニフェストファイル、appsscript.jsonを手動で書き換える。
末尾だけ掲げる。
"exceptionLogging": "STACKDRIVER"
}
=>
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}
jsonはjsと違ってケツカンマを許さないので注意。
https://qiita.com/daijinload/items/149410c975d6c008101e
これでpushするとV8状態のまま開発中のソースも正しくアップロードされる。
とりあえずスプレッド構文が使えてハッピーだ。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax
(この項終わり)
※過去のぼくのclaspとの格闘はコチラ:
https://qiita.com/query1000/items/259a60ba1be8743b858b
https://qiita.com/query1000/items/b25ae9deb700c7bf3212
追記:
2020-02-10現在、HtmlService.getUserAgent()がnullを返すという問題がある。
https://ja.stackoverflow.com/questions/62926/gas%e3%81%aev8-runtime%e3%81%a7htmlservice-getuseragent%e3%81%8c%e4%bd%bf%e3%81%88%e3%81%aa%e3%81%84