1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

clasp、子階層フォルダ push/pull(clone) を調べた

Last updated at Posted at 2023-04-12

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 で動作する。

pull
$ 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』ファイルを作って再度実行しました。

次に試したこと

『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がしてくれる)

三度目に試したこと

srcフォルダ作成のみの状態に(.clasp.json削除)
$ 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』がないと変なものをアップするよ...の意味?)

アップロード

作業後、再びGAS上にファイルを送信。
$ 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管理を置く
$ 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/~ の名前になっていました。

スクリーンショット 2023-04-12 13.18.27.png

「フォルダー名付き、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 なくても動作する方法がある?

追記:

package.json
{
  "scripts": {
    "clasp": "clasp"
  },
    ...
}

ローカルインストール後、package.jsonファイルに "clasp": "clasp" 部分を挿入する。
npm run clasp のコマンドで、グローバルインストール後の clasp コマンドと同等の操作可能。(単純にnpmの勉強不足)

ローカルでインストールした際には

なので、-g オプション付けてインストールした方が楽で良いのかも?

↑追記:
npx clasp ...で動く

clasp login

--no-localhost をつけると自分の環境では認証エラーになった。

$ clasp login

上記コマンドで認証可能。

npm インストールしたモジュールをGASで使用

「良記事へのリンク & 投稿主が困った部分の雑書き」の記事

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?