Google Apps Script を V8 ランタイムで実行する方法

## 概要

先日 (2020/02/05) Google Apps Script が V8 Runtime で実行できるようになりました。 Google Apps Script はこれまで JavaScript 1.6 のバージョンがベースとなっていましたが、アロー関数や const, let が利用できるなど、モダンな書き方ができるようになりました。

詳しくは各種ドキュメントをリンクしておきます。

* [リリースノート](https://developers.google.com/apps-script/releases#february_5_2020)
* 公式ドキュメント: [V8 Runtime Overview](https://developers.google.com/apps-script/guides/v8-runtime)
* 公式ドキュメント: [V8 runtime へのマイグレーション方法](https://developers.google.com/apps-script/guides/v8-runtime/migration)

## V8 ランタイムで実行する

公式ドキュメントにも [V8 ランタイムでの実行方法](https://developers.google.com/apps-script/guides/v8-runtime#enabling_the_v8_runtime) は書かれていますが、手っ取り早く始めたい方のために、ここでまとめておきます。

clasp を使っている方もいると思いますので、スクリプトエディタと clasp 両方での方法を記述しておきます。

## スクリプトエディタで始める

まず https://script.google.com/home から 新しいプロジェクト を選択します。既存のプロジェクトを V8 対応したい場合は該当プロジェクトを選択して開きます。

![新しいプロジェクトを選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19698/2b48498d-2f2c-90b6-886c-0e2ee8de14e4.png)

現状、以下 3 つほど方法がありますので全て載せておきます。

### 1. 起動時のトーストで "有効にする" を選択

プロジェクトを開いた際に以下のトーストが表示されたら、そちらで **有効にする** を選択すれば完了です。


> Enable new Apps Script runtime powered by Chrome V8 for this project.


![スクリーンショット 2020-02-09 17.55.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19698/1064e391-1824-09ca-ca76-e4340b930f97.png)

### 2. メニューから有効化

![スクリーンショット 2020-02-09 17.55.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19698/a545fae5-140a-c1fb-2d2c-d9601e1c17dd.png)

スクリプトエディタのメニューから **実行 > Chrome V8 を搭載した新しい Apps Script ランタイムを有効にする** を選択すれば OK です。

もとのランタイムに戻したかったら、同様に **実行 > Chrome V8 を搭載した新しい Apps Script ランタイムを無効にする** を選択すれば OK です。

### 3. マニュフェストファイルで設定する

![スクリーンショット 2020-02-09 17.56.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19698/c217992d-9b34-4b83-9c47-6c98176d8429.png)

スクリプトエディタのメニューから **表示 > マニュフェストファイルを表示** を選択します。すると、左側のファイル一覧に **appscript.json** というマニュフェストファイルが追加されるので選択して開きます。

`runtimeVersion` というフィールドに `"V8"` を指定すれば OK です。

![スクリーンショット 2020-02-09 17.56.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19698/234080ac-70aa-1541-5c00-ba4dbc9c5d92.png)

もとのランタイムに戻したかったら、フィールドごと項目を削除するか、 `"DEPRECATED_ES5"` という値を指定すれば良さそうです。（公式ドキュメント参照: [Manifest structure](https://developers.google.com/apps-script/manifest#Manifest.FIELDS.runtimeVersion)）

3 つ方法を紹介しましたが、結局全ての方法でマニュフェストファイルが更新されているだけなので、困ったらマニュフェストファイルを確認すれば大丈夫です。

## clasp で始める

clasp で始める際もマニュフェストファイルを更新すれば大丈夫です。 clasp create コマンドでプロジェクトを作成すると、 appscript.json が生成されるので、それに `runtimeVersion` というフィールドに `"V8"` を指定すれば OK です。

```sh
$ clasp create
$ cat appscript.json
{
  "timeZone": "America/New_York",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER"
}
```

以下のように編集します。

```JSON:appscript.json
{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}
```

## まとめ

以上 V8 ランタイムで Google Apps Script を実行する方法を紹介しました。すごく快適に JavaScript が書けるようになっているので是非試してみてください。

## 関連記事

- [GAS ビギナーが GAS を使いこなすために知るべきこと 10 選](https://qiita.com/tanabee/items/2c51681396fe12b6a0e4)
- [Google Apps Script の最初のチュートリアルの次にやる Codelab を作りました](https://qiita.com/tanabee/items/0f1554d6ee9cc6cfb25a)
- [3 分で作る無料の翻訳 API with Google Apps Script](https://qiita.com/tanabee/items/c79c5c28ba0537112922)