🧇

【Google Apps Script】namespaceを活用してソースコードのファイルを分割

2023/06/23に公開

概要

GoogleAppsScript(GAS)で、ソースコードを分割する際に、es6のimport/exportを使用したかったのですが、GAS ES6 import/exportの記事にある通り、2023年6月時点だと対応していないようです。そもそも、ソースコードのファイルを分割した際は、GAS上では全て同じスコープになるみたいなので、import/exportは不要とのことです。
ただ、このままだとVSCode等でコードを書く時に参照が追いにくくなってしまうので、何か良い方法がないかと調べてみました。

対応案

【GAS】claspによるローカル開発時にファイルを分割するの記事でいくつか方法が挙げられていますが、個人的にはnamespaceを使用した方法が良さげだったので、今回試してみました。

namespaceを使用した実装

<前提>

上記の対応案で紹介した記事にある通り、claspとtypescriptを導入した状態にします。この状態でnamespaceを使用して、別ファイルの関数を呼び出します。

<実装サンプル>

main.ts
// セル変更時に実行される関数
function onEdit(e: any) {
  const changeCell = SheetUtilModule.getChangeCell(e); // 別ファイルに定義した関数
  if (changeCell) {
    console.log(changeCell);
  }
}
sheetUtilModule.ts
// namespaceの配下に関数を書く
namespace SheetUtilModule {
  // 変更対象のセルを取得する関数
  export const getChangeCell = (e: any) => {
    return { row: e.range.getRow(), column: e.range.getColumn() };
  };
}

Discussion