Google Apps Scriptを使わざるを得ない案件があって調べていじっている今日この頃。
Apps Script – Google Apps Script
Web上の機能もなかなか良くできていて簡単なものを作るだけならさほど不便は無いのだけど、流石に数百行ものコードをES5のシンタックスで記述・運用していくのは辛みがある。それに、他のシステムとの連携を考えてもローカルでコードを管理したいところ。
で、当然世の中にもそんな需要はあるわけで昔から何個かツールが作られたりしたようだけれど、一番最新はgoogle公式で出してるclaspっぽい。gitライクな操作感で管理・デプロイできる。
(他の古い手段だとpushはできてもpullはできなかったりと片手落ちだったんだよね。)
そんなわけでひとまずclaspで簡単なものを作ってみるところまで。
インストール
node.js製のツールなので何はともあれnpmでインストール。
$ sudo npm i @google/clasp -g
login
コマンドでブラウザが起動するので、アカウントにログインする。
$ clasp login No credentials given, continuing with default... 🔑 Authorize clasp by visiting this url: https://accounts.google.com/o/oauth2/v2/auth?…
また、実際に作業を始める前にAPIの使用を許可しておく必要がある。
https://script.google.com/home/usersettings
新規プロジェクトのcreate・既存プロジェクトのclone
新規にプロジェクトを作成する場合は作業ディレクトリの下でcreate
コマンドで作成できる。
$ mkdir gas-sandbox $ cd gas-sandbox/ $ clasp create sample Created new script: https://script.google.com/d/.../edit Cloned 1 file. └─ appsscript.json
Web画面上でも空のプロジェクトが作成されたことが確認できる。
ちなみにclasp open
コマンドでブラウザで開くこともできる。
既に作られたプロジェクトをcloneしてくることもできる。
メニューの「プロジェクトのプロパティ」からスクリプトIDを確認。
先程のスクリプトIDをclasp clone
コマンドで指定することで作業ディレクトリ下に取得できる。
$ clasp clone [スクリプトID]
git clone
と異なりディレクトリが作られずそのまま降ってくるのでちょっと注意。
編集したコードのpush/pull
例えば以下のような文字列を出力するスクリプトCode.js
をローカルで作成してみる。
# Code.js function echoMessage(msg) { Logger.log(msg) } function main() { ["hello", "world", "!"].forEach(function (msg) { echoMessage(msg); }) }
これを動作環境に持っていくにはclasp push
を用いる。
$ clasp push └─ Code.js └─ appsscript.json Pushed 2 files.
Web画面を更新すると先程の記述したコードが*.gs
ファイルとして上がり、実行してログを表示すると意図したメッセージが表示されることを確認できる。
逆にWeb画面上でworld
をGAS
に書き換えた上で保存しclasp pull
すると・・・
更新されたファイルが*.js
として降ってくる。
$ cat Code.js function echoMessage(msg) { Logger.log(msg) } function main() { ["hello", "GAS", "!"].forEach(function (msg) { echoMessage(msg); }) }
ただ、この動作はgit pull
と異なり単にファイルをダウンロードして上書きする動作なので、Webとローカルの双方で編集するような運用は避けるべきである。
ちなみにclaspはv1.5からTypeScriptにも対応していて、ローカルで以下のようなTypeScript形式でスクリプトを記述&ファイルの拡張子を.ts
にし、
function echoMessage(public msg: string) { Logger.log(msg) } function main() { ["hello", "GAS", "!"].forEach((msg) => { echoMessage(msg); }) }
pushすると
$ clasp push └─ Code.ts └─ appsscript.json Pushed 2 files.
変換した形で上がってくれる。
ただ、このままだとpullすると変換後の*.js
共々降ってきて次にpushする時に邪魔だったりと諸々都合がよろしくなかったりするので、TypeScriptでの運用については別途記事を上げたいと思う。
バージョン管理
GASにはバージョンを管理する機能が備わっており、ライブラリとして外部公開する際なんかにも利用したりするのだが、
これもclaspで操作することができる。
clasp deploy
でデプロイするとことでバージョンとして登録される。バージョンは1からインクリメント。
$ clasp deploy Created version 1.
詳しい説明は割愛するが、versions
で確認しredeploy
やundeploy
で上書きや削除を行うことができる。
そんなこんなでclaspを使うことでgitライクにスクリプトを管理できた。(logsとかrunとかもあるんだけど、現状では挙動が微妙なので端折った。)
ただ、いかにgitライクといえどもいわゆるバージョン管理とは意味合いが異なるし、ウェブ画面上での操作ミスで消し飛ぶ可能性も無いとは言えないため、あくまでローカルでのみ開発・ウェブ上でデバッグする感じにして、別途コードはリポジトリに上げる形が良いのではないかと思う。
TypeScriptで開発するための諸々は別記事で書いていきたい。
Google Apps Script Webアプリ開発 超入門
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2018/09/26
- メディア: 単行本
- この商品を含むブログを見る
業務で使うにあたって参考書の類が欲しかったんだけど、出版時期が微妙なのばっかりだったんだよね。↑これが最新というかこれから出るやつだけど、僕はJavascriptに入門したいわけでもウェブアプリを作りたいわけでもないし・・・