logo icon

非エンジニアがカップル専用アプリ「Slack」でGAS製Bot運用してみた

非エンジニアがカップル専用アプリ「Slack」でGAS製Bot運用してみた

先日「Slackがカップル専用アプリだった件」という記事を拝見しまして、その衝撃たるやそうそうたるものでした。
その手があったか、と。
僕はもう辺りを警戒しながら、恥を忍んで、おずおずとBetweenを開く必要はないんだ、と。

思い立ったが吉日。善は急げです。

彼女を説得する

もともとお互いにBetweenには多少の不満があって、ちょうど乗り換えを検討していたタイミングでした。
しかし、「Slack」のデザイン性の高さには食いついたものの、英語オンリーのUIや「Channel」等の馴染みのない機能に難色を示し気味。

僕のプレゼン力が試される時です。

僕「この『Slack』作ったスチュワート・バターフィールドっていう人、海外でめっちゃ流行った『Flickr』いう写真のSNS作った人なんだけどさ。
本当はゲーム作りたかったんだって。
でもゲーム作ってる途中で予算が尽きて、しょうがなく作りかけのゲームをその写真のSNSとして公開したらめっちゃヒットしてさ。
『これでゲームが作れるぞ!』と思ったら優秀すぎてYahoo!に捕まってゲーム作らせて貰えないのwwww
でさ、3年たってやっとYahoo!から開放されて、『今度こそ!』ってゲーム作ったんだって。どうなったと思う?
全然売れないまま予算尽きてまたゲームの機能流用してできたのがこの『Slack』wwwwそしてまた大ヒットwwwなんでだよwwwwwwww」

いけた。

下準備

サーバー立ててNode.js入れてHubot入れて、というのが面倒臭すぎたのでGASの力を借りてさくっと実装します。

GASとは
「Google Apps Script」の略。
Googleの他のサービスを操作したりできる、Googleドライブ上で動くJSみたいなやつ。アナリティクスのデータをスプレットシートに吐き出すやつとかが多分有名。

Botの作り方は主にこちらを参考にさせていただきました。
ありがたいことに、偉大な先人がライブラリを作ってくれているので、それにならえば簡単にBotが作れるみたいです。

Googleドライブにフォルダを作る

適当に「slack」みたいなフォルダを作って、

  • Bot用のアイコン画像
  • GASファイル
  • Googleスプレットシート

あたりを入れておけばいいと思います。

Slack Appからトリガーの設定

カップル専用アプリとして「Slack」を使う場合、2人しかいない前提のためMentionを飛ばし合うことなく「全ての発言を通知する」設定で使うことになります。

GASでは「毎日決まった時間に実行」みたいな設定もできるのですが、Botの発言が毎日通知されるのも憂鬱なので、ここでは「Bot宛の発言をトリガーにアクションを返す」形で実装します(通知をしないBot用のChannelを作ることもできますが極力シンプルにまとめたいので)。

Add an app or custom integration

チャンネルの設定から「Add an app or custom integration」を選択し、Slack Appの「Outgoing WebHooks」を導入します。

Integration Settings

Channel

どのチャンネルで発言を許可するか。

Trigger Word(s)

反応するキーワード。「,(コンマ)」区切りで複数指定可。

URL(s)

GASのURLを入れる。

Token

GASで使うのでメモしておく。

カップル専用アプリっぽい機能を実装する

共有カレンダー機能

真っ先に思いつくのがこれで、Googleカレンダーとの連携ももちろんGASでお手のものなのですが、うちではあまりスケジュールなんて立てないし、Betweenの共有カレンダーもほぼ使っていなかったので今回はなしで。

ゴミの日通知

これも最初はこのGoogleカレンダーを使えばいいやと思っていたのですが、曜日毎に決められた単純なスケジュールなのでスプレットシートで管理することにしました。

  • 曜日ごとのゴミ分類
  • 今日と明日のゴミ(today関数vlookup関数
  • &で繋いで1つのセルに発言としてまとめる

記念日通知

上記と同じ要領で、

  • 記念日の「日付形式」セル
  • 記念日から今日までの経過日数セル
  • 経過年+1年セルと今日からその日までの日数セル
  • &で繋いで1つのセルに発言としてまとめる

今日の夕食

これは現在地を取得するGeolocation APIと食べログAPIあたりで近くの飲食店をランダムに取得したりできないかな、と思ったのですがよくよく考えたら毎日の食事で新規開拓目指したりしないし行くところなんて限られてるな、ということでやっぱりスプレッドシートに適当に数十パターンの夕食候補を入れておいて、ランダムでとってくるだけにしました。

  • C列に候補一覧
  • B列あたりでcounta関数を使ってC列の総数をカウント
  • A列にC列+発言っぽくまとめたセルを列挙

これで、ひとつのスプレッドシートにみっつの機能をまとめられました。

今日と明日の天気

これはライブドア天気予報のWeather Hacks APIで取得してきます。

完成

かなりざっくばらんなifですが業務ではないので良しとします。
ちなみに「ゴゴ」は一昨年までうちで飼っていた猫の名前です。

ゴゴ

お気に召したようです(アイコンかぶってるけど)。

まとめ

冒頭で紹介した記事以外にも「割と本気で家庭用Slack Botを作ってみた」等、いろいろ参考になる記事が上がっていていま何番煎じくらいなんでしょう。

作り始めるとつい余計な機能を持たせたくなって、無駄にapi一覧なんかを漁ってみたりして、そしてふと気がつくんですね。

彼女とのコミュニケーションコストは削減しなくていいし、効率化も特に必要ない。

僕からは以上です。

ではでは。