はじめに
GASからREST APIを使ってwebサービスを便利に操作するGoogleスプレッドシートを営業職メンバへ展開(これとかこれの別バージョン)したのはいいけど、機能追加したりする際に「運用中のスクリプトへの機能追加」が手作業だと自爆するほど難しい(というかバージョン管理したい)ので、ググった結果claspというGoogle謹製のツールが見つかったので、使ってみました。
- Google Apps Scriptの新しい3つの機能 その③ CLI Tool Clasp - Qiita
- claspでGAS(GoogleAppsScript)ファイルをGit管理する。 – kin29.info
- claspを使い、Google Apps Scriptプロジェクトをgitでバージョン管理する - Qiita
これ、バージョン管理だけでなく、ローカルPC上でGASのコードを書けるようになる(書いたコードをGASへ後からアップロードする)ので、VSCodeとか好きなエディタでコーディングできるようになります😊
install
claspを使うにあたってNode.jsが必要なのでセットアップする。
Node.js
https://nodejs.org/ja/download/
https://qiita.com/maecho/items/ae71da38c88418b806ff
Windowsであれば、手順通りにインストーラをダウンロードして実行すればあとはほぼ半自動。デフォルトでOK
PS C:\Users\zaki> node --version
v10.16.0
PS C:\Users\zaki> npm --version
6.9.0
PS C:\Users\zaki>
clasp
https://github.com/google/clasp
https://qiita.com/HeRo/items/4e65dcc82783b2766c03
npm i @google/clasp -g
のワンコマンドでインストールされる
PS C:\Users\zaki> npm i @google/clasp -g
C:\Users\zaki\AppData\Roaming\npm\clasp -> C:\Users\zaki\AppData\Roaming\npm\node_modules\@google\clasp\src\index.js
+ @google/clasp@2.1.0
added 255 packages from 135 contributors in 29.616s
PS C:\Users\zaki>
PS C:\Users\zaki> clasp --version
2.1.0
PS C:\Users\zaki>
PS C:\Users\zaki> clasp --help
Usage: clasp <command> [options]
clasp - The Apps Script CLI
Options:
-v, --version
-h, --help output usage information
Commands:
login [options] Log in to script.google.com
logout Log out
create [options] Create a script
clone [options] [scriptId] [versionNumber] Clone a project
pull [options] Fetch a remote project
push [options] Update the remote project
status [options] Lists files that will be pushed by clasp
open [options] [scriptId] Open a script
deployments List deployment ids of a script
deploy [options] Deploy a project
undeploy [options] [deploymentId] Undeploy a deployment of a project
version [description] Creates an immutable version of the script
versions List versions of a script
list List App Scripts projects
logs [options] Shows the StackDriver logs
run [options] [functionName] Run a function in your Apps Scripts project
apis [options] List, enable, or disable APIs
list
enable <api>
disable <api>
help Display help
setting|settings [settingKey] [newValue] Update <settingKey> in .clasp.json
* Any other command is not supported
PS C:\Users\zaki>
claspでGASのソースをローカルでも管理
configure Google Apps Script API
Google Apps Script APIの設定にアクセスして、デフォルトでオフになってるはずの設定をオンにする
clasp login
PS C:\Users\zaki> clasp login
Logging in globally...
🔑 Authorize clasp by visiting this url:
https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.deployments%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.projects%20http [..以下略...]
ブラウザが起動するので、権限を確認して許可する
許可を与えればログイン完了
コンソールにもログイン完了の出力
Authorization successful.
Default credentials saved to: ~\.clasprc.json (C:\Users\zaki\.clasprc.json).
PS C:\Users\zaki>
ホームディレクトリに、トークンが保存された.clasprc.json
ファイルが作成される。
GASからプロジェクトのclone
ここでのclone
はgit
のコマンドでなく、GASとローカル間のプロジェクトのclone
。
要は、GAS上の作成済みスクリプトをローカルのPCへ持ってくる。
使うコマンドは
clone [options] [scriptId] [versionNumber]
cloneのヘルプ。
ちょっと不親切…?
PS C:\Users\zaki\src\gas\trello> clasp clone --help
Usage: clone [options] [scriptId] [versionNumber]
Clone a project
Options:
--rootDir <rootDir> Local root directory in which clasp will store your project files.
-h, --help output usage information
というわけで、指定するスクリプトIDは、URLに含まれるこれ
(ID部分、ボカシてあるけどどちらも同じものです)
この部分に表示されているハッシュ値を引数にclone
を実行すると、実行したディレクトリにGASのソースがclone
(ダウンロード)される。
PS C:\Users\zaki\src\gas\trello> clasp clone 1n8****************************VZ1
Cloned 4 files.
└─ Trello操作.js
└─ appsscript.json
└─ スプレッドシート操作.js
└─ メイン.js
PS C:\Users\zaki\src\gas\trello>
PS C:\Users\zaki\src\gas\trello> ls
ディレクトリ: C:\Users\zaki\src\gas\trello
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019/06/23 10:37 73 .clasp.json
-a---- 2019/06/23 10:37 92 appsscript.json
-a---- 2019/06/23 10:37 4817 Trello操作.js
-a---- 2019/06/23 10:37 6250 スプレッドシート操作.js
-a---- 2019/06/23 10:37 3298 メイン.js
PS C:\Users\zaki\src\gas\trello>
GAS上のソースと別に、appsscript.json
におそらくマニフェスト的なプロジェクトの設定ファイル、.clasp.json
にスクリプトIDが保持される。
うーん、あまりよく考えずに作り始めた「初めてのGASプロジェクト」(の延長)だったので、スクリプト名とかめっちゃ日本語入ってるけど、git管理とかするならASCIIにしておけばよかったな(笑)
ローカルの変更をGASへpush
ローカルのエディタ(VSCodeなど)でソースを変更し、それをGASへpushする。
そしてpush
する
PS C:\Users\zaki\src\gas\trello> clasp push
└─ Trello操作.js
└─ appsscript.json
└─ スプレッドシート操作.js
└─ メイン.js
Pushed 4 files.
PS C:\Users\zaki\src\gas\trello>
これでGAS上でソースを開けば、ローカルで変更した内容が反映されているはず。
ちなみにpush
の対象は.gs
,.html
,.json
のみとのこと。
また、jsonファイルはappsscript.json
のみで、適当なファイル名のjsonファイルはpush
されない。
Google Apps Scriptの新しい3つの機能 その③ CLI Tool Clasp
push対象のファイルは?
clasp status
で確認できる
PS C:\Users\zaki\src\gas\trello> clasp status
Not ignored files:
└─ Trello操作.js
└─ appsscript.json
└─ スプレッドシート操作.js
└─ メイン.js
Ignored files:
└─ .clasp.json
PS C:\Users\zaki\src\gas\trello>
.clasp.json
は無視される。
適当にaaa.json
なんか作ってみると…?
PS C:\Users\zaki\src\gas\trello> clasp status
Not ignored files:
└─ Trello操作.js
└─ appsscript.json
└─ スプレッドシート操作.js
└─ メイン.js
Ignored files:
└─ .clasp.json
└─ aaa.json
なるほど、無視されるようだ。
.claspignore
.gitignore
と同じように、push
対象外にしたいファイルを定義できる。
が、関係ないファイルはデフォルトでpush
対象外っぽいので、トリッキーなことをしてなければ?設定しなくても大丈夫そう(たぶん)
GASのソースをGitでも管理
ローカルにcloneしてきたファイルをgitのリポジトリに登録すればOK。
GitHubなんかでリポジトリを作れば「このコマンドを実行しろっ」って出てくるので、その通りに実行すればリポジトリが作成される。
Git for Windowsがインストールしてあれば、対象フォルダ右クリックで「Git Bash Here」してコンソールを起動して、その通りコマンド実行すればOK
(Git for Windowsなどは別途インストールすること)
zaki@mascarpone MINGW64 ~/src/gas/trello
$ echo "# gas to trello" >> README.md
zaki@mascarpone MINGW64 ~/src/gas/trello
$ git init
Initialized empty Git repository in C:/Users/zaki/src/gas/trello/.git/
zaki@mascarpone MINGW64 ~/src/gas/trello (master)
$ git add README.md
zaki@mascarpone MINGW64 ~/src/gas/trello (master)
$ git commit -m "first commit"
[master (root-commit) 523ac83] first commit
1 file changed, 1 insertion(+)
create mode 100644 README.md
zaki@mascarpone MINGW64 ~/src/gas/trello (master)
$ git remote add origin https://github.com/zaki-lknr/****.git
zaki@mascarpone MINGW64 ~/src/gas/trello (master)
$ git push -u origin master
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 4 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (9/9), 4.97 KiB | 2.48 MiB/s, done.
Total 9 (delta 0), reused 0 (delta 0)
To https://github.com/zaki-lknr/****.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
zaki@mascarpone MINGW64 ~/src/gas/trello (master)
$
これで「ローカルPC上でスクリプト作成・Gitでバージョン管理しつつ、動作確認やリリースをGASへpush」という運用ができるようになった。
動作確認とリリースバージョンは、それぞれのGASのプロジェクトを用意し、.clasp.json
の中身を切り替えて環境切り替えすると良いのかな。
その辺は使ってみて試していこう。
pipelineとか設定して、リポジトリへpush
したらGASへも適用まで自動化とか、頑張ればできるかな?(未検討)