少し高度なSlack botを作ろうとすると、botにデータを持っておいてもらいたい時がある。botの外部にデータベースを持つのもいいけれどそこまでの話でもなかったりする。そんな時、Slack bot用のフレームワーク Botkit を使えばJSON形式で簡単お手軽にデータを扱える。今回はBotkitでデータを保持・取得する方法を紹介したい。
Contents [hide]
Botの準備
今回作るBotはユーザーの名前を聞いて、Botを立ち上げ直しても覚えているもの。
「call me A」と言うと、「あ、このユーザーはAっていう名前なんだな」とデータストアに情報を保存する。一旦Botを終了し、再度立ち上げた後「who am I」と聞くと情報を引っ張ってきて「Your name is A」と答えてくれるというもの。
まずはプロジェクトを作りたいディレクトリへ移動し、githubからプロジェクト一式を落としてくる。
プロジェクトに入り、依存パッケージをインストールする。
データストアのパスを設定する
まずはBotが使用するデータストアを設定するところから。BotkitはデータをJSONファイルの形で保存するからその置き場所を指定するわけだ。
botkitディレクトリにあるbot.jsを開き、controllerを作っている部分をこのコードに置き換えよう。
これだけでOK。Botkitの楽さったら無いね。
ユーザーの名前を保存する
なんという名前かをBotに教える部分を作る。bot.jsのhearsメソッドのうち、『call me (.*)』を引き受けているところを見てみよう。
ハイライト部分がデータを保存している箇所だ。このような構造になっている。
idプロパティを持つオブジェクトと、save完了後のコールバックを指定するシンプルなもの。今回は、事前にidとnameプロパティを持つオブジェクトを作って渡している。
ユーザーの名前を取得する
さて、「who am I」と聞かれて名前を返す部分。名前を設定した時と同じくbot.jsの該当する箇所を見てみよう。
ハイライト箇所でメッセージを送ったユーザーのデータを取得している。このメソッドの構造はこうなる。
データを保存するときに指定したのと同じidを使ってユーザーごとのデータを取得し、コールバックで処理するというこれまたシンプルなもの。実に簡単。
このBotを実際に動かしてみたいときは以前の記事を参考にBotユーザーを作ってbot.jsを動かしてほしい。
全ユーザーのデータを扱う
保存してある全てのユーザーデータにアクセスすることもできる。
コールバックの第二引数に全てのユーザーデータが入っている。今回の例だと、ユーザーのidとnameプロパティを持つオブジェクトが一纏めになっている。
チャンネルごとのデータを扱う
「ユーザー一人々々のデータを扱う方法は分かったけれど、チャンネルごとではどうなの?」もちろん大丈夫!僕らのBotkitはバッチリだ。ユーザーの時と同じようにチャンネルのidを持つオブジェクトを扱うだけ。
チームごとのデータを扱う
ユーザーやチャンネルの時と同じようにチームごとでもデータを扱える。構造は全く同じ。
このように、ユーザー / チャンネル / チームの単位で簡単にデータを扱える。ちょっとしたデータの管理には十分に備えられていることがわかった。
言語を越えて活用できるプログラマー必携の書