Apps Script の V8 ランタイムでデータ処理をもっと簡単に

Google Cloud Japan Team
※この投稿は米国時間 2020 年 3 月 17 日に、Google Cloud blog に投稿されたものの抄訳です。
Chrome と Node.js で採用されている V8 ランタイムが Apps Script でも使えるようになりました。今回の更新により、モダン JavaScript の機能が利用できるようになります(ECMA 6 への対応と新リリースも進行中)。V8 ランタイムによって、新たなスクリプトだけでなく、Google スプレッドシートのデータを変換するような既存のスクリプトも強化され、標準化されたコードを今までより簡単に使えます。
Google Apps Script とは
Google Apps Script は中小規模のチーム プロジェクトに最適な無料のスクリプティング環境で、Google とそれ以外のアプリケーションを接続して計算やワークフローを自動化できます。Google Apps Script を使うには、ブラウザのアドレスバーに「script.new」と入力します。Google スプレッドシート、Google ドキュメント、Google スライド、Google フォームなどの [ツール] > [スクリプト エディタ] からも起動できます。また、手順をマクロとして記録することもできます。スクリプトは Apps Script と呼ばれ、スケジュールに従って実行したり、ユーザーのアクションをトリガーにして実行したりできます。シートを開く操作や、カスタム数式、ポップアップ、プルダウン
メニューなどのカスタム UI コンポーネントの操作、ボタンとテキスト入力がある複雑な HTML ベースのインターフェース(ウェブアプリ)の操作にも対応しています。
Apps Script は G Suite 開発者プラットフォームの一部です。Apps Script を初めて使う場合はこちらをご覧ください。


4 つのメリット
副作用がない
産業革命時代の組み立てラインの革新的な実用性と、コンピュータの歴史におけるアセンブリ言語の実用性を比較する人もいるでしょう。命令(for ループ、while ループ、if 文)を順番にリストに記述する命令型プログラミングでは、レシピのような形式でプログラミングを行うことができますが、コードを人間に見えない形に抽象化できるだけの余地がありません。つまり、命令には柔軟性がほとんどありません。また同じメモリ上で複数の命令を実行するときにも問題が発生します。一度に多くの命令を実行すると、意図しない解釈によって本来とは異なる結果(副作用)になります。
モダン JavaScript を活用することで、ステートメントを数学的な関数として評価するロジックを基盤とした関数型プログラミングを利用できます。これにより各関数に独自の目的を持たせることで、見えない依存関係を減らして、タスク同士が邪魔することなく並列化を実現し、メモリをロックして上書きが発生しないようにすることができます。
シンプルな構文
モダン JavaScript のわかりやすい表現によって複雑さが軽減され、スクリプトの記述とメンテナンス(内容の理解)も容易になります。特に注目すべき機能が以下の 2 つです。
アロー関数: 1 行のコードで、矢印記号(=>)を使って、関数を引数として設定して別の関数のデータとして渡す


スプレッド演算子: 3 つのピリオド(...)を使って配列の値を挿入する


Google Developer Expert(GDE)による 2 つの記事をぜひご覧ください。
JavaScript の機能の概要(サンプルあり)(Ben Collins)
JavaScript を無料で学べるサイトの一覧(Amit Agarwal)
データ処理操作
物理学のシミュレーションや請求書のトレンド分析、ETL(抽出、変換、読み込み)、線形回帰処理には、強力かつシンプルな「map」、「filter」、「reduce」とアロー関数の組み合わせを使用します。V8 ランタイムでは、こうした負荷の高い数学的な処理にも対応する高速 CPU 処理を実現していて、ログ機能も改善しています。






JavaScript の最も優れた機能と Apps Script を統合
あるファイルで宣言された機能を別のファイルにインポートする JavaScript のモジュールは、今回のバージョンでは利用できません。ただし、モジュールのような最新機能と TypeScript を組み合わせて使いたい場合や、お気に入りの IDE でコーディングしたい場合、TensorFlow(機械学習)、Sequelize(データベース コネクタ)、Apps Script に組み込まれている Google サービスで簡単に利用できる GPU Accelerated JavaScript(GPU 処理)のようなサードパーティの JavaScript ライブラリを利用したい場合は、Node.js 環境で CLASP(Command Line Apps Script)を使うことができます。
次のステップ
以前のバージョンのランタイムを採用しているスクリプトを使っている場合は、非互換性に関するヒントをご覧ください。ただし、新しいバージョンに移行しない場合は対応不要です。モダン JavaScript によってもたらされた新機能を使って、コミュニティでもさまざまな取り組みが行われています。中でも注目なのが、Google スプレッドシートとデータ処理のユースケースを扱ったものです。
- By Google デベロッパー アドボケイト Alexandrina Garcia-Verdin