既存システムの問題点をなんかいい感じに取得して投げてくれるbotを作ったのでまとめます。現在のチームでは既存システムについて営業サイドなどから改善点・問題点としてGoogleスプレッドシートに既定のフォーマットで記載されていきます。(この運用がそもそも良いものかは別の話として)ざっくばらんに挙がってくる課題のどれが優先的に対応する必要があるのか、どれが簡単に対応できるのかがわからないと対応するのが大変です。そこで、セルに重要度や工数(作業の大変さ等)から適当に重みをつけた旬の課題を出したくなりました。いうものを利用するわけですが、そこの標準ファイル形式である.gsファイル(jsの独自改造?)をブラウザ上で取り扱うには幾らか問題がありました。そも論、すごく大変だった。classすらないし手で操作できてしまう。え、コミット履歴は?ということで、もっと効果的に作りたいと思い至り今回はclaspを利用して開発をしていこうと思います。@google/clasp初回は認証します。login以下のようなページが開くので、一番下までスクロールして承認すればOK。コマンド弄りたいのでgasライブラリも入れておきます。今回typescriptで作るので色々いじれるようにします。今回は既存のスプレッドシートに対し色々できるようなスクリプトを作ることがゴールです。以下のようなコマンドを実行します。余分なのは消してますそうすると以下のようなファイルが作られるので内容を確認します。見ると新しくプロジェクトが作成されていることが確認できます。ここで、一旦プログラムが動くことを確認します。配下をルートディレクトリに設定したので、src配下に適当にプログラムを作ります。雑にメッセージを出すだけ。clasp!");}ありがたいことにclaspは標準でtypescriptをサポートしてくれているので通常のデプロイコマンドにてデプロイできます。push該当のプロジェクトを見ると次のようにトランスパイルされていることがわかります。この状態で実行してみると、ちゃんと想定通り動いてくれていることがわかります。あとは好きにプログラムを書くだけ。スプレッドシートから値を取ってみる適当に値を入れときます。このスプレッドシートから値を取るわけですが、プログラム上にハードコードはしたくないですよね。そこで、GASでは秘匿情報をプロパティとして設定できるので、その機能を利用します。https://docs.google.com/spreadsheets/d/<これ>/edit#gid=0)をSHEET_IDとして保存します。プロパティを取得し返却するクラスを用意します。}}値を取得して中身を見るようにプログラムを改変します。Logger.log(values);}デプロイして挙動の確認。Slackに投げる中間ロジックは一旦置いておいて、slackに結果を投げます。webhook)などは省略します。Slackの連携については、SlackAppのライブラリを利用します。設定すれば使えるようにはなります。デプロイのたびに消えてしまって不便なのでプロジェクト側に記載します。"STACKDRIVER"}SlackAppのinterfaceを定義してあげることでローカルでも開発しやすくしています。message);最終的にはpostMessageで投げつけるだけです。properties.tsを更新します。}}slackの機微情報もプロパティに入れておきます。}}実行してみるとねこのもり!あとは独自のロジックで課題を重み付けして、適当にフォーマットしたものを定期的にslackに投げるだけ!ここはシートの中身に密接に関わってしまうので今回書きません。まとめ今回の記事の内容をgithubにあげておきました。Maruta@mochisuna主にサーバーサイドエンジニア。goとかrubyとかでお仕事中。