パッケージ管理したい(npm

$ npm run test    // npx vitest run
$ npm run lint    // npx biome lint .
$ npm run build   // npx tsc --noEmit
$ npm run bundle  // npx rollup -c
$ npm run push    // npx clasp push

GAS開発もnpmを使ってパッケージ管理できます。 このページでは、GAS開発で利用する typescriptrollupclaspvitestbiometypedocといったパッケージのインストール方法やスクリプト設定をまとめています。

インストールしたい(npm install --save-dev

$ npm install --save-dev typescript @types/google-apps-script
$ npm install --save-dev rollup @rollup/plugin-node-resolve @rollup/plugin-typescript
$ npm install --save-dev @google/clasp
$ npm install --save-dev vitest @vitest/coverage-v8
$ npm i -D --save-exact @biomejs/biome
$ npm install --save-dev typedoc

--save-devオプションで、開発依存(devDependencies)としてパッケージを追加します。

パッケージ設定したい(package.json

{
    "name": "my-gas-project",
    "version": "0.0.1",
    "private": true,
    "type": "module",
    "devDependencies": {
        "typescript": "^5.4.0",
        "@types/google-apps-script": "^1.0.0"
    }
}

package.jsonの各フィールドの意味は パッケージ管理したい(npmを参照してください。 GAS開発では、次の2点だけ意識しておくとよいです。

private: trueは、誤ってnpm publishで公開してしまわないようにするための安全装置です。 GAS用のプロジェクトは公開する必要がないので、基本的にtrueにしておきます。

type: "module"は、.jsファイルをESModule(import/export)として扱う指定です。 rollup.config.jsのように、設定ファイル自体がESModule形式で書かれている場合に必要になります。

スクリプト設定したい(package.json

{
    "name": "...",
    "scripts": {
        "build": "tsc --noEmit",
        "bundle": "rollup -c",
        "bundle:watch": "rollup -c --watch",
        "push": "clasp push",
        "pull": "clasp pull",
        "deploy": "npm run build && npm run bundle && npm run push",
        "test": "vitest run",
        "test:watch": "vitest",
        "test:coverage": "vitest run --coverage",
        "format:check": "biome format .",
        "format:write": "biome format --write .",
        "lint:check": "biome lint .",
        "lint:fix": "biome lint --fix .",
        "docs:api": "typedoc"
    }
}

tscrollupclaspの3段階に、テスト(vitest)・フォーマッター/リンター(biome)・ APIドキュメント生成(typedoc)を組み合わせた、GAS開発一式のscripts設定例です。 各コマンドの意味や個別のオプションは、上記のリンク先ページで詳しく説明しています。

$ npm run deploy
$ npm test
$ npm run lint:fix

リファレンス