はじめに
私はこの記事をゴリゴリのエンジニアではなく、 仕事上仕方なくGASを触っているエンジニア業務がメインでない方 に是非読んでいただきたいと思っています
GASについてググると公式リファレンスを見た方が早いのでは?と思う記事や、同じような事柄の記事が散見されたため、GASについて困っている人は多いが、エンジニア層の知見が埋もれている/少ない印象をもったためです
ClaspやTypescriptを使うことによって、どう楽になるかを知ってほしいです
Claspってなに?
Claspとは、端的にいうとGAS開発をローカル環境で出来るように支援してくれるコマンドラインツールです
この開発方法にはいくつかの不都合があります
- ネットワークがオフラインでは開発ができない
- コード履歴管理(e.g. git, svn)を行いたい時、コードをコピペするなどでしか出来ない
- 作成されたコードの配布、環境のコピーに手間がかかる
これらはローカル環境(自分のPCマシン)で開発することで解決できます
1
に関しては言わずもがな(ただしローカル環境で動作の確認が出来るわけではありません)、手元にコードがあればGit管理することも容易なので2
も解決できます。そうすると複数人開発やトラブルシュートに大変役立ちます
Claspにはいくつかのコマンドがあり、配布、コピーが容易です
-
clasp clone
: プロジェクトのコピーをローカルにコピーします -
clasp push
: リモートのコードをローカルのコードで更新します -
clasp pull
: リモートからプロジェクト情報を取得し、ローカルファイルを更新します
またClaspはTypescript
を正式にサポートしており、特に注意点なくTSで開発しきることが可能です
TSのファイルをclasp push
することで、リモートにはJSコンパイルされたコードが配置されます
またClaspはRunコマンドもあり、スクリプトの実行のためにページを開く必要もなくなったりします
Typescriptってなに?
Typescriptとは、Google App Scriptに互換性があるJavascript、それをより開発しやすくすることを目的とした言語です。TSのコードに対してコンパイル
ということをするとJSのコードが生成されます。よってGAS上でも動くコードが生成できるんですね
Typescriptは型という情報を管理・参照・利用できます。つまリTSを書きながらファレンスを確認できるし、違反している(バグがある)コードが分かりやすくなります
どんな関数が存在するかコードを書きながら把握できるし
![スクリーンショット 2020-08-09 15.00.47.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F439627%2F0f27d0a6-e4dc-cb96-a21a-05792fb7b6e7.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6bcf1a575a38457b2702b306e7d8697a)
そのメソッドが何の引数を必要としていて、何を返してくれるかもわかるし
![スクリーンショット 2020-08-09 15.08.28.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F439627%2Fd2e4bdc7-a06c-df1d-2a73-501beb87b846.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0d5806e44ae665037da2014fd2cfb5c6)
引数の型が正しくないときに警告を出してくれるし
![スクリーンショット 2020-08-09 15.02.29.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F439627%2F0f4ae2b5-f676-9050-c33b-06712c9a02b8.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=68504184067b95052a6aa8b026f965dc)
自分で書いたメソッドにも型を付けられる
![スクリーンショット 2020-08-09 15.06.49.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F439627%2F3daaee3d-4f18-a829-6244-650d355ad650.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=caa65f74050ca30fa0c36930293ad24a)
このように型の情報があるだけで、開発効率が増しバグを事前に検知することが可能になります
WEB上でもサジェスト機能はありますが、自分で開発したメソッドではサジェストされないです。動作検証済のメソッドを他のプロジェクトでも使いまわすことが容易になりますね
別に特別すごいって訳じゃない。ただ最高だってだけだ
GASを使えばGoogleのそうそうたるアプリケーションを組み合わせて様々なことが出来ます。故に大規模になりがちなこともあるます
特にSpreadsheetなんかでは作成者一人だけがその仕組を把握するブラックボックスになることもありがちですね
Typescriptを使って入出力がはっきりしたバグが少ないコードを書き、Claspを使って誰でも複製・共同編集可能な状態に保つことで業務フローを一般化させましょう
導入
さてここから実際の導入を説明します
Typescriptをローカル開発
IDE、つまり開発EditorとしてはVSCodeをおすすめします
理由は、特に設定などは必要なくTypescriptを書き始めることができるからです
ただし後述するライブラリのインストールのためにNode.js(とNpm)をインストールしましょう
Node.jsをインストールすると勝手にnpmがついてきます
必要なライブラリの準備
Node.jsがインストールできると、npmというコマンドも使えるようになります
ターミナルを開き、好きなフォルダー上に移動し以下のコマンドを実行します
npm init -y
npm install --save-dev @types/google-apps-script typescript
vscode上でindex.ts
を作成し開いて以下のコードを貼り付けて、SpreadsheetApp
などにマウスオーバするといろいろな情報が得られます
const main = () => {
const ss = SpreadsheetApp.getActiveSpreadsheet();
};
Macであればcommnad
ボタン押&クリックもいいですね
GASに必要なファイルを作る
clasp create
コマンドを実行します。今回はsheets
の選択肢を選んで下さい
必要なファイル2つ.clasp.json
, appsscript.json
が生成されています
clasp open
で紐づくGASページが開きます
Typescriptで書く!
.clasp.json
に"fileExtension": "ts"
を追記してください
{
"scriptId":"xxxxxxxxx",
+ "fileExtension": "ts"
}
index.ts
もいい感じに書き換えましょう
const main = () => {
Browser.msgBox('hello');
};
実行
clasp push
を実行し、終了したらclasp open
を実行します。GASページが開きます
![スクリーンショット 2020-08-09 18.07.52.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F439627%2F5d70cc53-87ec-a830-7320-57be7e2f89b1.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7e71cd1085b187899d74e2ac9b5b896c)
実行ボタンを押しますと、最初のみ認証が求められます
許可を確認
→アカウントを選択
→詳細
→〇〇(安全ではないページ)に移動
→許可
もう一度Spreadsheetを開き直したり、関数を実行したりするとメッセージボックスが開くはずです
![スクリーンショット 2020-08-10 3.53.26.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F439627%2Fda185999-e45f-1fa9-f745-2a72266d5bd4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b2fb5a3ecebe97f9073bbad5b6e2cea5)
次からは
というような感じで、TSを書く→clasp pushする→実行し動作確認する、を繰り返して開発していきます
終わりに
私はある程度の規模のGASを書くときは、この2つをベースに開発し始めるとおもいます
あなたに良きGAS開発ライフを!