RESTfm を用いた Chatbot アプリケーションの例
最終日にはいよいよ RESTfm を用いたアプリケーションを作ってみましょう。ただ、普通の CRUD ができるアプリケーションでは面白くありません1。
そこで今回は Chatbot を作ってみます。Read したいレコードを指定すると bot がそのレコードの内容を返してくれる、というシンプルなものです。
環境
諸事情があり、以下のような構成にします。本質的な内容は Hubot + Slack などでも同じです。
Ruboty のインストールと起動
Ruboty 自体のインストールや起動(常駐)方法についてはここでは省略します。
利用するデータベース
具体例として利用するデータベースを用意します。以下のようにStaff
というデータベースのStaffData
レイアウト内のstaff_data
というテーブルを用います。
以下の5つのカラムが定義されているのが分かります。
id
name
gender
work
point
このテーブルに対して 7 つのデータが投入されています。
Ruboty の仕様
ChatWork 上の bot に対して、以下のように投げたら、そのid
の人のname
を返すようにしてみます(ここではid
は2
ですね)。bot の名前はsrm
とします。
srm このID誰? 2
Ruboty のスクリプトを書いていく
ではスクリプトを書いていきましょう。「FileMaker API for Ruby (ginjo-rfm)」についての記事も参考にしてください。
まずは必要なものをrequire
します。
require 'rfm'
require 'open-uri'
require 'json'
次に接続情報を書いてあげます。
RFM_CONFIG = {
:host => 'FileMaker Server のアドレス',
:account_name => 'ユーザ名',
:password => 'ユーザ名に対するパスワード',
:database => 'Staff',
:layout => 'StaffData',
:ssl => false # デフォルトが true なので注意
}
次に Ruboty の核の部分を書いていきましょう。まずはおまじない的な部分です2。
module Ruboty
module Handlers
class Restfm < Base
on(/このID誰? (.*)/, name: "who_is_this_id", description: "指定したIDの人は誰か")
メインのメソッドを書きましょう。check_who_is_this_id
というメソッドにより@name
に名前が入るという設計です。
def who_is_this_id(message)
id = message.match_data.to_s.match(/このID誰? (.*)/)[1].to_s
check_who_is_this_id(id)
message.reply("ID #{id} の人の名前は #{@name} です!")
end
check_who_is_this_id メソッドを書きましょう。RESTfm は http://hogehoge/RESTfm/ に配置されているものとします。
def check_who_is_this_id(id)
json = open("http://hogehoge/RESTfm/Staff/layout/StaffData/id%3D%3D%3D#{id}.json").read
json_parse = JSON.parse(json)
@name = json_parse["data"][0]["name"] # [0] を忘れない
end
Ruby のスクリプトが完成
上述のスクリプトを組み合わせれば完成となります。完成したスクリプトは以下のとおりです。
require 'rfm'
require 'open-uri'
require 'json'
RFM_CONFIG = {
:host => 'FileMaker Server のアドレス',
:account_name => 'ユーザ名',
:password => 'ユーザ名に対するパスワード',
:database => 'Staff',
:layout => 'StaffData',
:ssl => false # デフォルトが true なので注意
}
module Ruboty
module Handlers
class Restfm < Base
on(/このID誰? (.*)/, name: "who_is_this_id", description: "指定したIDの人は誰か")
def who_is_this_id(message)
id = message.match_data.to_s.match(/このID誰? (.*)/)[1].to_s
check_who_is_this_id(id)
message.reply("ID #{id} の人の名前は #{@name} です!")
end
def check_who_is_this_id(id)
json = open("http://hogehoge/RESTfm/Staff/layout/StaffData/id%3D%3D%3D#{id}.json").read
json_parse = JSON.parse(json)
@name = json_parse["data"][0]["name"] # [0] を忘れない
end
end
end
end
テストしてみる
さっそく Ruboty で試してみましょう。以下のように表示されれば成功です!
srm このID誰? 2
ID 2 の人の名前は higashino です!
様々なアプリケーションを作る
今回は RESTfm を用いて Chatbot を作ってみました。Web API が使えるということで、いわゆる CRUD ができる Webアプリケーション だけではなく、Chatbot のようなアプリケーションも簡単に作ることができます。
アイデアを活かして、様々なアプリケーションを作ってみてください3。