JavaScriptでGASを開発する。clasp(Command Line Apps Script Projects)を利用してCLIでGASプロジェクトを操作する。
- Node.js。
v22.0.0以上 - clasp cliがインストール済み(後述)。
- slack webhook URLが発行済み(後述)。
$ git clone git@github.com:yasuke-kuroda-diezon/gas-workflow-javascript.git
$ cd gas-workflow-javascript
$ npm install
.clasp.json ファイルの scriptId を任意のスクリプトIDに書き換える(必須)。
$ npm run pull
$ npm run release
GASプロジェクトからプル
$ npm run pull
ビルド
$ npm run build
GASプロジェクトにプッシュ
$ npm run push
一連の操作(esbuildビルド→GASプロジェクトにプッシュ)
$ npm run release
フォーマットする
$ npm run format
gas-workflow-javascript/
├── .clasp.json # claspコマンド設定。GASプロジェクトID指定やGASへpushするディレクトリ指定など。
├── .claspignore # clasp push対象の除外/許可設定。
├── .gitignore
├── appsscript.json # GASマニフェスト。タイムゾーンやランタイム設定など。GASにpushする。
├── jsconfig.json # JavaScript設定。
├── package.json
├── README.md
└── src/ # ソースコード(JavaScript)。
├── main.js # エントリポイント。
├── service/
│ ├── backlog/ # Backlog関連サービス(ドメイン知識毎にディレクトリ分割)。
│ ├── common/
│ │ ├── EnvService.js # 環境変数取得サービス。
│ │ └── HttpClient.js # HTTPクライアントサービス。
│ ├── gmail/ # Gmail関連サービス。
│ ├── slack/ # Slack関連サービス。
│ └── spreadsheet/ # Spreadsheet関連サービス。
├── usecase/ # ユースケース(シナリオ)。
│ ├── toSlack/ # 例: 処理結果をSlackに通知するユースケース群。
│ └── toSpreadsheet/ # 例: 処理結果をSpreadsheetに記録するユースケース群。
— 機能構築はsrc/service/配下にドメイン知識毎にサービスを追加実装していくイメージです。
— ユースケース/シナリオケースはsrc/usecase/配下にユースケース毎に追加実装していくイメージです。
clasp cliをグローバルインストールする(初回のみ)。
$ npm install -g @google/clasp
-
.clasp.json ファイルの scriptId を任意のスクリプトIDに書き換える(初回のみ)。
-
Google Apps Script API を有効にする(初回のみ)。
-
slack webhook URLを発行する(初回のみ)。
ログイン認証(初回のみ)
$ clasp login
GASプロジェクトを新規作成する(初回のみ)
$ clasp create
GASプロジェクトにpushすると、GASエディタ上のファイルが上書きされて消えてしまいます。そのため、既存のGASプロジェクトにclaspを導入する場合は、初めてpushする前に必ずpullを実行してください。これにより、現在のGASエディタ上のファイルをローカルに取得し、安全に作業を進めることができます。
claspを使ってGoogle Apps Scriptの開発環境を構築してみた | DevelopersIO
GASプロジェクトをブラウザで開く
$ npm run open
既存のGASプロジェクトをクローンする
$ clasp clone-script "スクリプトID"
ステータス確認
$ clasp status
.clasp.jsonのprojectIdプロパティはgit管理しない方が良い気がするのですが、試行錯誤してできなさそう(大変そう)だったので、一旦Git管理しています。。。projectIdはよしなに変更ください。
GASプロジェクトを操作中に以下のようなエラーが発生した場合:
{"error":"invalid_grant","error_description":"reauth related error (invalid_rapt)","error_uri":"https://support.google.com/a/answer/9368756","error_subtype":"invalid_rapt"}
claspの認証が必要であることを示しています。以下のコマンドを実行して再認証を行ってください:
$ clasp login