V8 ランタイムの概要

Apps Script と JavaScript では、ランタイムまたはランタイム環境に以下が含まれます。 スクリプト コードを解析して実行する JavaScript エンジン。ランタイムは メモリへのアクセス方法、プログラムとメモリとの相互作用、 コンピュータのオペレーティング システム、プログラム構文などの規則を遵守します。各ウェブ ブラウザには JavaScript のランタイム環境があります。

Apps Script はこれまで Mozilla の Rhino JavaScript を利用していました。 説明します。一方 Rhino は、Apps Script を円滑に実行するための また、Apps Script を特定の JavaScript バージョンに (ES5)。Apps Script デベロッパー Rhino を使用してスクリプトで最新の JavaScript 構文と機能を使用できない ランタイム。

この懸念に対処するため、Apps Script は現在、 Chrome と Node.js を強化する V8 ランタイム。Google Chat では 既存のスクリプトを V8 に移行する 最新の JavaScript 構文と機能を利用するには、

このページでは、V8 によって有効になる新機能と、V8 を有効にする方法について説明します。 使用できます。 スクリプトの V8 への移行 では、V8 ランタイムを使用するように既存のスクリプトを移行する手順を説明します。

V8 ランタイムの機能

V8 ランタイムを使用するスクリプトでは、次の機能を利用できます。 機能:

最新の ECMAScript 構文

最新の ECMAScript を使用できます。 スクリプトで、V8 ランタイムを利用するスクリプトの構文を検証できます。この構文には、 letconst など、多くの一般的な機能。

一般的なコードの簡単なリストについては、V8 構文の例をご覧ください。 いくつか紹介しました。

関数検出の改善

V8 を使用するスクリプトの Apps Script 関数の検出が改善されました。新しい ランタイムは次の関数定義形式を認識します。

      function normalFunction() {}
      async function asyncFunction() {}
      function* generatorFunction() {}

      var varFunction = function() {}
      let letFunction = function() {}
      const constFunction = function() {}

      var namedVarFunction = function alternateNameVarFunction() {}
      let namedLetFunction = function alternateNameLetFunction() {}
      const namedConstFunction = function alternateNameConstFunction() {}

      var varAsyncFunction = async function() {}
      let letAsyncFunction = async function() {}
      const constAsyncFunction = async function() {}

      var namedVarAsyncFunction = async function alternateNameVarAsyncFunction() {}
      let namedLetAsyncFunction = async function alternateNameLetAsyncFunction() {}
      const namedConstAsyncFunction = async function alternateNameConstAsyncFunction() {}

      var varGeneratorFunction = function*() {}
      let letGeneratorFunction = function*() {}
      const constGeneratorFunction = function*() {}

      var namedVarGeneratorFunction = function* alternateNameVarGeneratorFunction() {}
      let namedLetGeneratorFunction = function* alternateNameLetGeneratorFunction() {}
      const namedConstGeneratorFunction = function* alternateNameConstGeneratorFunction() {}

      var varLambda = () => {}
      let letLambda = () => {}
      const constLambda = () => {}

      var varAsyncLambda = async () => {}
      let letAsyncLambda = async () => {}
      const constAsyncLambda = async () => {}

トリガーとコールバックからオブジェクト メソッドを呼び出す

V8 を使用するスクリプトで、場所からオブジェクト メソッドとクラスの静的メソッドを呼び出せる ライブラリのメソッドを呼び出すことができます。たとえば 次のとおりです。

次の V8 の例は、オブジェクト メソッドを使用した Google スプレッドシートのメニュー項目:

function onOpen() {
  var ui = SpreadsheetApp.getUi(); // Or DocumentApp, SlidesApp, or FormApp.
  ui.createMenu('Custom Menu')
      .addItem('First item', 'menu.item1')
      .addSeparator()
      .addSubMenu(ui.createMenu('Sub-menu')
          .addItem('Second item', 'menu.item2'))
      .addToUi();
}

var menu = {
  item1: function() {
    SpreadsheetApp.getUi().alert('You clicked: First item');
  },
  item2: function() {
    SpreadsheetApp.getUi().alert('You clicked: Second item');
  }
}

ログを表示

Apps Script には、 Logger サービスconsole クラス。どちらのサービスも 同じアプリケーションに Stackdriver Logging サービス

Logger ログと console ログを表示するには、スクリプト エディタの上部にある 実行ログ

実行を表示

スクリプトの実行履歴を表示するには、Apps Script プロジェクトを開き、 左側の [Executions] をクリックします。

V8 の構文の例

一般的な構文機能では、 スクリプトを作成します。

letconst

let および const キーワードを使用すると、ブロック スコープのローカル変数とブロック スコープを定義できます。 定数を使用します。

// 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
      

アロー関数

アロー関数 式内で関数を簡潔に定義する方法を提供します。

// Rhino runtime
function square(x) {
  return x * x;
}

console.log(square(5));  // Outputs 25
      
// V8 runtime
const square = x => x * x;
console.log(square(5));  // Outputs 25

// Outputs [1, 4, 9]
console.log([1, 2, 3].map(x => x * x));
      

クラス

クラス コードを概念的に整理する手段を提供します。V8 のクラス JavaScript プロトタイプ ベースの継承に対する、主に糖衣構文です。

// V8 runtime
class Rectangle {
  constructor(width, height) { // class constructor
    this.width = width;
    this.height = height;
  }

  logToConsole() { // class method
    console.log(`Rectangle(width=${this.width}, height=${this.height})`);
  }
}

const r = new Rectangle(10, 20);
r.logToConsole();  // Outputs Rectangle(width=10, height=20)
      

課題の分解

割り当ての分解 式を使用すると、配列やオブジェクトの値を 使用します。

// Rhino runtime
var data = {a: 12, b: false, c: 'blue'};
var a = data.a;
var c = data.c;
console.log(a, c);  // Outputs 12 "blue"

var array = [1, 2, 3];
var x = a[0];
var y = a[1];
var z = a[2];
console.log(x, y, z);  // Outputs 1 2 3
      
// V8 runtime
var data = {a: 12, b: false, c: 'blue'};
var {a, c} = data;
console.log(a, c);  // Outputs 12 "blue"


var array = [1, 2, 3];
var [x, y, z] = array;
console.log(x, y, z);  // Outputs 1 2 3


      

テンプレート リテラル

テンプレート リテラル は、埋め込み式を使用できる文字列リテラルです。これを使用すると 非常に複雑な文字列連結ステートメントです。

// Rhino runtime
var name =
  'Hi ' + first + ' ' + last + '.';
var url =
  'http://localhost:3000/api/messages/'
  + id;
      
// V8 runtime
var name = `Hi ${first} ${last}.`;
var url =
  `http://localhost:3000/api/messages/${id}`;


      

デフォルトのパラメータ

デフォルト パラメータ 関数内で関数パラメータのデフォルト値を指定できます。 宣言します。これにより、関数本体内のコードが 不足しているパラメータにデフォルト値を明示的に割り当てる必要があります。

// Rhino runtime
function hello(greeting, name) {
    greeting = greeting || "hello";
    name = name || "world";
    console.log(
        greeting + " " + name + "!");
}

hello();  // Outputs "hello world!"
      
// V8 runtime
var hello =
  function(greeting="hello", name="world") {
      console.log(
        greeting + " " + name + "!");
  }

hello();  // Outputs "hello world!"

      

複数行の文字列

1 対 1 の 複数行の文字列 テンプレート リテラルと同じ構文を使用します。同じ テンプレート リテラルでは、この構文を使用することで文字列の連結を回避し、 使用します。

// Rhino runtime
var multiline = "This string is sort of\n"
+ "like a multi-line string,\n"
+ "but it's not really one.";
      
// V8 runtime
var multiline = `This on the other hand,
actually is a multi-line string,
thanks to JavaScript ES6`;
      

V8 ランタイムの有効化

スクリプトで Rhino ランタイムを使用している場合は、次のコマンドで V8 に切り替えることができます。 手順は次のとおりです。

  1. Apps Script プロジェクトを開きます。
  2. 左側にある [プロジェクトの設定] をクリックします。
  3. [Chrome V8 ランタイムを有効にする] チェックボックスをオンにします。

または、gcloud コマンドを使用してスクリプト ランタイムを直接指定することもできます。 スクリプトのマニフェストの編集 ファイル:

  1. Apps Script プロジェクトを開きます。
  2. 左側にある [プロジェクトの設定] をクリックします。
  3. [「appsscript.json」マニフェスト ファイルをエディタで表示する] チェックボックスをオンにします。
  4. 左側にある [エディタ] をクリックします。 appsscript.json
  5. appsscript.json マニフェスト ファイルで、 runtimeVersion 値を V8 に設定します。
  6. 上部にある [プロジェクトを保存] をクリックします。

スクリプトの V8 への移行 V8 でスクリプトが適切に機能することを確認する他のステップを確認します。

Rhino ランタイムの有効化

スクリプトで V8 を使用していて、元の言語に切り替える必要がある場合 Rhino ランタイムでは、次の操作を行います。

  1. Apps Script プロジェクトを開きます。
  2. 左側にある [プロジェクトの設定] をクリックします。
  3. [Chrome V8 ランタイムを有効にする] チェックボックスをオフにします。

または、スクリプト マニフェストを編集します。

  1. Apps Script プロジェクトを開きます。
  2. 左側にある [プロジェクトの設定] をクリックします。
  3. [「appsscript.json」マニフェスト ファイルをエディタで表示する] チェックボックスをオンにします。
  4. 左側にある [エディタ] をクリックします。 appsscript.json
  5. appsscript.json マニフェスト ファイルで、 runtimeVersion 値を DEPRECATED_ES5 に設定します。
  6. 上部にある [プロジェクトを保存] をクリックします。

既存のスクリプトを移行する方法

V8 へのスクリプトの移行 このガイドでは、既存のスクリプトを V8 を使用します。これには、V8 ランタイムを有効にし、スクリプトで 互換性の問題があります。

スクリプトの V8 への自動移行

2020 年 2 月 18 日より、Google は 2020 年 2 月 18 日より、既存の Google の自動互換性テストに合格したスクリプト影響を受けるスクリプト 移行後に正常に機能します。

スクリプトを自動移行からオプトアウトする場合は、 runtimeVersion フィールドを DEPRECATED_ES5 に設定します。手動で いつでもスクリプトを V8 に移行できる 有効になります。

バグを報告するにはどうすればよいですか?

サポートガイドでは、プログラミング Stack Overflow でのヘルプ、既存の問題レポートの検索、新しいバグの報告 新しい機能のリクエストもできます