claspについて
- Google Apps Scriptをローカルで開発できる
自分は npm で提供されているパッケージをGASで利用するために利用しました。(esbuildでビルドして、ビルド後のファイルをアップした)
したいこと
- src(GASのファイルを入れるフォルダ)
- ~.js
- appsscript.json
- package.json
上記の構成のように、srcフォルダ内部に既に作っていたGASのスクリプトをcloneして、作業後にpushしたいと考えていた。
結論
$ mkdir src
$ clasp clone 元々作っているGAS --rootDir ./src
$ clasp -P src/ push
ちなみに pullも同様に -P .src
で動作する。
$ clasp -P ./src pull
(-Pオプションは ./src
でも src/
でも動作してくれました)
調査メモ
以下、実行した流れを順にメモ。
ダウンロード
最初に試したこと
$ clasp clone 元々作っているGAS --rootDir ./src
ENOENT: no such file or directory, open 'src/.clasp.json'
というわけで、『src/.clasp.json』ファイルを作って再度実行しました。
次に試したこと
$ mkdir src
$ echo {} > src/.clasp.json
$ clasp clone 元々作っているGAS --rootDir ./src
Project file (src/.clasp.json) already exists.
echo 文が余計でした。(srcフォルダ内部にjsonファイルを作るのは claspがしてくれる)
三度目に試したこと
$ rm src/.clasp.json
$ clasp clone 元々作っているGAS --rootDir ./src
Warning: files in subfolder are not accounted for unless you set a 'src/.claspignore' file.
Cloned 16 files.
...
一応成功したっぽい。
(warning内容について。pushする際、srcフォルダ内部に『.claspignore』がないと変なものをアップするよ...の意味?)
アップロード
$ clasp push
No valid 現在の絶対パス/.clasp.json project file. You may need to `create` or `clone` a project first.
現在のフォルダで clasp clone
してないぞと怒られました。
push解決策
clasp -P src/ push
で動作するとのこと。
$ clasp -P src/ push
...
Pushed 17 files.
実証したところ、GAS上のファイルも新規に変更されていました。成功!
余計な調査
上記(結論の実行)で動いたのですが、clasp push
だけで操作できないか調べることにしました。
考える余地として、clasp push
実行時に「現在のフォルダで clasp create(clasp clone)」していないと言われた部分に目をつけ、以下の動作を加えました。
(他ブログの解説でフォルダ毎に.clasp.json
が必要とか言ってた記憶も。)
$ clasp create --title container_gas --type standalone
$ clasp clone 元々作っているGAS --rootDir ./src
上記コマンド達を実行することで、『srcフォルダ』内部にGASファイルをダウンロードし、 clasp push
のみでアップロードできるようになりました(ヤッタネ)
しかし、Google Driveを調べると、既存ファイルは変更されていませんでした。代わりに新たなGASファイル 『container_gas』 が存在していた。
更に『container_gas』内部のgsファイル名が以下のように src/~
の名前になっていました。
「フォルダー名付き、gsファイル名」「既存GASファイル更新できない」の二重の悲しさ......
余計な調査結果
$ clasp create --title container_gas --type standalone
- 上記処理によって、新たなGASファイル『container_gas』を作成・管理する
- push動作(
-P フォルダ名
なし)を実行するとカレントディレクトリの『.claspignore』に応じてファイルをアップロード- 階層構造がある場合、『階層/ファイル名』という名前でGAS上にアップロードされる
clasp余談メモ(push以外のつまづき)
グローバルインストール
npmの場合、claspをグローバルインストールしないとコマンド実行できないのをどうにかできないのかな?
https://www.ykicchan.dev/posts/2020-07-12
↑ yarn だと -g なくても動作する方法がある?
追記:
{
"scripts": {
"clasp": "clasp"
},
...
}
ローカルインストール後、package.jsonファイルに "clasp": "clasp"
部分を挿入する。
npm run clasp
のコマンドで、グローバルインストール後の clasp
コマンドと同等の操作可能。(単純にnpmの勉強不足)
ローカルでインストールした際には
-
npm run
分、毎回のタイプ量が多くなる - コマンドライン引数は更にタイプ量増やす or 別ライブラリ使用が必要 とのこと
なので、-g オプション付けてインストールした方が楽で良いのかも?
↑追記:
npx clasp ...
で動く
clasp login
--no-localhost
をつけると自分の環境では認証エラーになった。
$ clasp login
上記コマンドで認証可能。
npm インストールしたモジュールをGASで使用
「良記事へのリンク & 投稿主が困った部分の雑書き」の記事