手軽にチャットボットが開発できるLitaレビュー

最近、チャットボットが流行っています。Facebook Messenger、Slack、LINE、HipChatといった各種チャットサービスプロバイダーがチャットボットをサポートしており、CIや各種開発ツールと自動連携するチャットボットが作られています。

今回はそんなチャットボットを手軽に作成できるLitaというソフトウェアを紹介します。LitaはRubyで作られたライブラリで、数多くのチャットボットへの対応、プラグインが開発されています。

lita

セットアップ

RubyなのでRubygemsでセットアップできるのですが、Vagrant + VirtualBoxによるセットアップが一番簡単に使い始められます。

$ git clone https://github.com/litaio/development-environment.git lita-dev
$ cd lita-dev
$ vagrant up
$ vagrant ssh
$ lita-dev

ここまでの手順でLitaの開発環境セットアップが完了です。ホスト側のlita-devディレクトリの中にあるworkspaceが仮想環境側でもマウントされています。

なお、利用に際してGitが必要なのですがVagrant環境に用意されていないので別途インストールしておく必要があります。

$ sudo apt-get install git

これで準備完了です。

Slackボットを作ってみる

では今回はデモとしてSlackボットを作ってみます。必要なライブラリはRubygemsでインストールできますので、Gemfileに次の記載をします。

gem "lita-slack"

そしてインストールします。これは仮想環境側で行ってください。

$ bundle install

そしてLitaでのイベントハンドラを作っていきます。

$ mkdir handlers
$ cd handlers
$ lita handler hello
Do you want to test your plugin on Travis CI? ("yes" or "no", default is "no") no
no
Do you want to generate code coverage information with SimpleCov and Coveralls.io? ("yes" or "no", default is "no") no
no
      create  lita-hello/lib/lita/handlers/hello.rb
        :
      create  lita-hello/README.md

CIとの連携などは自由に指定してください。このようにテンプレートになるソース群を生成してくれるのがLitaの特徴です。

では lita-hello/lib/lita-hello.rb を修正します。

$ cat handlers/lita-hello/lib/lita/handlers/hello.rb 
module Lita
  module Handlers
    class Hello < Handler
      # insert handler code here
      route /^lita\s+(.+)/, :lita_help, help: { "lita TEXT" => "Lita hepls you." }
      
      def lita_help( response )
        word = response.matches[0][0]
        response.reply("こんにちは。あなたは #{word}と書きました")
      end
      Lita.register_handler(self)
    end
  end
end

これを見て分かると思いますが、ルーティングを設定することでメッセージの種類に応じて実行するメソッドを変更できます。上記の例では、

route /^lita\s+(.+)/, :lita_help, help: { "lita TEXT" => "Lita hepls you." }

としていますので、lita 〜ではじまる文章に対してlita_helpメソッドを呼んでいます。

def lita_help( response )
  word = response.matches[0][0]
  response.reply("こんにちは。あなたは #{word}と書きました")
end

後はresponseオブジェクトに対してreplyメソッドを使って返事が書けます。

基本はこれだけですが、gemspecファイルに対して必要な情報を書いておかないとインストールに失敗します。TODOとなっているところは直します。以下は例です。

$ cat handlers/lita-hello/lita-hello.gemspec 
Gem::Specification.new do |spec|
    :
  spec.authors       = ["Atsushi Nakatsugawa"]
  spec.email         = ["atsushi@moongift.jp"]
  spec.description   = "Lita echo server."
  spec.summary       = "Lita echo server."
  spec.homepage      = ""
  spec.license       = "MIT"
    :
end

これが終わったら、Gemfileにライブラリを追加してインストールします。

gem "lita-hello", path: "handlers/lita-hello"

インストールは bundle です。最後にLitaの設定ファイルを修正します。必要な部分だけ載せておきます。Vagrant版の場合、デフォルトでRedisが入っています。

$ cat lita_config.rb 
Lita.configure do |config|
    :
  config.robot.adapter = :slack
  config.adapters.slack.token = ENV["SLACK_API_KEY"]
    :
end

これで完了です。

Slack上でボットを作成する

LitaのSlackボットを作成するにはこちらのリンクからSlack上でのボット作成を行ってください。そうするとトークンが取得できます。

トークンを取得したら、環境変数で設定しつつLitaを起動します。

$ SLACK_API_KEY=xoxb-48..AV lita
[2016-05-26 11:50:19 UTC] INFO: Connected to Slack.

最後にSlackの特定のチャンネルにおいて、Litaボットを招待しましょう。

これで準備が整いました。

使ってみる

では実際にメッセージを飛ばしてみます。今回は頭にlitaをつけるという決まりがありますので、そのようにメッセージを飛ばすとちゃんと返事が返ってくるのが確認できます。

この判定を細かく行えばより限定された機能が実行できるようになりますし、大ざっぱにやればテキスト解析やA.I系のAPIと組み合わせた汎用的なチャットボットが作れるでしょう。


Litaでは他にも数多くのチャットサービスに対応し、かつ多彩なプラグインが用意されています。これらをベースにすることで高機能なチャットボットが手軽に開発できるようになるでしょう。開発環境もVagrantを使えばすぐに用意できます。仮想環境を使わずともローカルで開発したり、その結果をHerokuなどにデプロイすることもできます。ぜひLitaを使って作成してみてください。

Lita: ChatOps for Ruby - Lita.io