appsscript.json
を見えるようにしておくこと
- まずは
$ yarn install
する - すでに
.clasprc.json
が存在する場合(パターン A)とそうでない場合(バターン B)により、手順が分かれる
- 一般論として
~/.clasprc.json
をそのまま放置しておくと上書きリスク等があるので、適宜リネームしておいた方がいい- 個人的なリネーム規則は
~/.clasprc.json
を~/.clasprc.foo@example.com.json
である
- 個人的なリネーム規則は
- 使いたい
.clasprc.json
をプロジェクトルートに置く.gitignore
に登録済み
Google アカウントにてログインをして、Clasp 用の権限ファイルを得る。すでに存在する場合は上書きされてしまうので注意する。
$ npx clasp login
これにより、~/.clasprc.json
が作成される。
.clasprc.json
をプロジェクトルートに置く.gitignore
に登録済み
既存のプロジェクトを持ってくるために $ npx clasp clone
する。
なお、スプレッドシート の新規作成や App Script の新規作成を行うには $ npx clasp create
を実行する。ただし、実際はほとんどやる機会はないと思う。
$ npx clasp clone スクリプトID
npx clasp
を実行すると以下の 2つ のファイルが作成される。これらのファイルは触る必要はない。
.clasp.json
appsscript.json
「スクリプトID」はスプレッドシートの URL から取得できる。
.js
と.ts
の拡張子が混在している時は.js
は$ npx clasp push
の対象外になる.ts
に統一する
.claspignore
に必要に応じて追記する- Webページを公開しないならば
src/
配下は不要
- Webページを公開しないならば
- 併せてファイル自体も削除する
name
repository
- 適当にコードを変えて
$ npx clasp push
してみる- Webのエディタ側で確認し、変更が反映されていれば OK
Google Apps Script API
が「オフ」になっているとエラーになる- https://script.google.com/home/usersettings に行って「ON」にする
- 開発サイクルが安定したらこの README を本来の README に取り替える
以下は Vite + React の場合であり、他のフレームワークやライブラリを用いる場合は変更が必要になる。
rootDir
をdist
に変更する
"rootDir": "/path/to/repo/dist"
package.json
内のscripts
で用いるため
.claspignore
に必要に応じて追記する- スプレッドシート用などならば
lib/
配下は不要
- スプレッドシート用などならば
- 併せてファイル自体も削除する
name
repository
- 更新があった場合には dist/ に毎回移動する必要がある
- あとは普通に開発する
src/doGet.js
が Apps 側のエントリポイントになる- Apps 側の
index.html
はdist/index.html
が常にビルドされるので考慮不要
- 開発サイクルが安定したらこの README を本来の README に取り替える
- 順番によっては undefined をレシーバにしてしまうことが起きうる
- https://zenn.dev/tacck/articles/20211218_gas
.clasp.json
にfilePushOrder
というプロパティで設定することはできるが継続的メンテが大変に面倒- ここは人間が「考えながら」作るしかない
- ファイル名やディレクトリ名を工夫する
- これが起きるのは階層を切っている場合だと思われる
- なぜなら、遅延評価になる(っぽい)から
- npm を使うときは
require
を使うこと - 他のファイルの内容を読み込みたい場合には
namespace
を使うこと(後述)
- Clasp を用いるプロジェクトではみんな Clasp を使うこと
- Apps 側 はいわばデプロイ場所なので、手でいじるところではない
- 実行は
_main_.ts
経由で行う- ファイル名の最初と最後にアンダースコアを入れるのは以下の理由による
- 開発環境上の「並び」で一番上に来るから
- GAS上の「並び」で一番上に来るから
- 最初だけにアンダースコアを入れると未使用ファイル的な印象を与えてしまうから最後にも入れる
- 実態はすべて
lib/
とかsrc/
とかに入れる
- ファイル名の最初と最後にアンダースコアを入れるのは以下の理由による
Logger.log('foobar')
console.log('foobar')
よりもLogger
が推奨されている
たまにうまくいかないことがあるので、毎回 push するのが確実ではある。
$ npx clasp push --watch
- されている
- 同じメソッドの実行を繰り返しながら開発しているようなときは、わざわざリロードしなくていい
$ npx clasp push --watch
を実行させながらトライアンドエラーをサクサク繰り返せる
- 例えば
.clasprc.json
や.clasp.json
を使い分けるときpackage.json
のscripts
プロパティに実行オプションの記述を押し込んで、npm
やyarn
コマンド経由で簡潔に実行できると楽
- あまりにごちゃごちゃするようならばシェルスクリプトでもよい
- 例えば
AnalyticsData
とかの型 - 仕方ないので直前の行に
// @ts-ignore
と書いて赤い波線が引かれないようにする
- 場合によってはガリガリの手動で書くことはできる
- TypeScript の範囲で担保するのが現実的
- 実挙動に関しても、現実的にはトライアンドエラーを高速に回すプリントデバッグがいい
- それで辛い場合はそもそも GAS の範疇を超えている可能性が高い
- ただし Webアプリ の場合はそもそも独立しているので可能
- clasp コマンド ではオプションを指定することで
.clasprc.json
や.clasp.json
を変更できる- 複数アカウントや複数プロジェクトを扱うことも可能
- Clasp の仕様上、複数のディレクトリを作ってプロジェクトを分けることになる
- 複数アカウントや複数プロジェクトを扱うことも可能
$ npx clasp --help
Usage: clasp <command> [options]
clasp - The Apps Script CLI
Options:
-v, --version output the current version
-A, --auth <file> path to an auth file or a folder with a '.clasprc.json' file.
-I, --ignore <file> path to an ignore file or a folder with a '.claspignore' file.
-P, --project <file> path to a project file or to a folder with a '.clasp.json' file.
-h, --help display help for command