快適で超高速GAS開発

:

はじめに

この記事は「UEC Advent Calendar 2022」17日目の記事です。遅刻しているのでマッハで書いています。さっきまで電気通信大学のサークルの一つであるバーチャルライブ研究会が主催するMIKUEC 2022でペンライトを降っていました。日曜日の公演も残席があるようなので良ければ行ってみてください。久しぶりにサイトを訪問したらめちゃくちゃおしゃれになってて驚きました。こんなセンスもりもりのサイト作ってみたい。

16日目の記事はつまみ([@TrpFrog])さんの『たくさん展望台に登りたい !』でした。 この徒歩企画には僕も誘われていたのですがサークルの仕事があったので参加できませんでした。😭 丸ビルの上に展望ロビーがあることを知らなかったので今度行ってみたいと思います。

こんにちは、あずきバー (@azukibar_D)です。TypeScriptとGoに興味があります。

最近Google Apps Scriptで書かれたメール転送スクリプトを改善する機会がありました。 完成品はここです。

機能追加をするついでにTypeScriptに変更してGitHub Actionsでデプロイするようになったら快適になったのでやったこと振り返りです。

従来の Google Apps Script 開発の辛いところ

Google Apps Script(長いので以下GASと表記)はGoogleが提供している便利サービスの一つです。GASを使うとGmailからいい感じにメールを取得したりGoogle スプレッドシートを簡単なデータベースとして遊んだりできます。

GASを書くには公式のオンラインエディタを使うのが一般的かと思います。しかしこの手法にはいくつかの問題があります。 一つ目はコードを修正したいときに実運用されているコードに手を入れないといけないという問題です。 例えばトリガーにて1分ごとに実行しているコードだと、コードの編集をすることによって不正なコードが実行される可能性があります。このようなことはできれば避けたいです。

二つ目はコードを流用したいときにGAS上にあると他の人のコードが再利用できないということです。コードがGAS上で管理されていることでこの問題は発生します。

解決しよう

これらの問題を解決するためにGitHubを用いてスクリプトを管理することにしました。またGitHub Actionsを用いて自動でデプロイすることにしました。

GitHubで管理

まあこれに関しては大したことないです。デプロイされているコードをコピペしてGitHubに載せました。

GitHub Actionsでデプロイ

こっちがメインです。google/claspとGitHub Actionsでデプロイすることにしました。

mainブランチにpushしたときにclaspのコマンドを適当に叩くようにしました。いつも通りです。

このおかげでデプロイする手間が省けるので開発に対するハードルが低く感じます。GitHubを用いたいつも通りの開発フローを取りやすいのも利点かも知れません。

TypeScript化

claspを用いるとTypeScriptをトランスパイルしてデプロイすることができます。ということでついでに元からあるスクリプトをTypeScriptにしました。

面倒だったのでairbng/ts-migrateを用いて機械的にやってもらいました。このスクリプトを使うといい感じに関数引数の型をany型にしてくれます。あとはちまちま直していくだけです。あとは徐々に厳しく型を付けていきましょう。

string型とnumber型があるだけでも大分幸せになれたので今後もTypeScript化を積極的に進めていきたいと思います。ただ今回はコードが少なかったからそう思っただけである程度増えていくと厳しいかもしれないです。

ちなみにclaspがトランスパイルしてくれたコードはおそらくES5互換になっていて、考古学みたいな視点で眺めるととても面白いです。(テンプレート文字列がないのでconcatで無理やり文字列結合していたり、const使っていなかったりしている)

おわりに

以上です。遅刻した上に中身が少ない記事で大変申し訳ないです。

18日目の記事はまどさんの『キーの同時押し(nミリ秒以内の連続打下)を別のキーに割り当てると快適』です。僕もスペースキーとA-Zキーを同時押しするとスペースキーがShiftキーとしてふるまう機能を使っているので記事が楽しみです。