44
36

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 5 years have passed since last update.

claspでGASのソースをGit管理

Last updated at Posted at 2019-06-23

はじめに

GASからREST APIを使ってwebサービスを便利に操作するGoogleスプレッドシートを営業職メンバへ展開(これとかこれの別バージョン)したのはいいけど、機能追加したりする際に「運用中のスクリプトへの機能追加」が手作業だと自爆するほど難しい(というかバージョン管理したい)ので、ググった結果claspというGoogle謹製のツールが見つかったので、使ってみました。

これ、バージョン管理だけでなく、ローカル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のワンコマンドでインストールされる

image.png

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の設定にアクセスして、デフォルトでオフになってるはずの設定をオンにする

image.png

image.png

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 [..以下略...]

ブラウザが起動するので、権限を確認して許可する

image.png

許可を与えればログイン完了

image.png

コンソールにもログイン完了の出力

Authorization successful.

Default credentials saved to: ~\.clasprc.json (C:\Users\zaki\.clasprc.json).
PS C:\Users\zaki>

ホームディレクトリに、トークンが保存された.clasprc.jsonファイルが作成される。

GASからプロジェクトのclone

ここでのclonegitのコマンドでなく、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に含まれるこれ

image.png

image.png

(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する。

image.png

そして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へも適用まで自動化とか、頑張ればできるかな?(未検討)

44
36
0

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
44
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?