WebPayではメインのコミュニケーションに2014年2月よりSlackを使っています。 洗練されたインタフェースとエンジニアフレンドリーな機能をもったすばらしいチャットツールですが、いくつか不便な点があります。
そのうちのひとつが検索の性能の悪さです。
英語の文字列でも全然関係ない結果を返してくることが多く、日本語ではほとんど壊滅的になりますっていました(現在はかなり改善されています)。
Slackを利用している日本のチームはいくつもありますが、おそらく同じ問題で悩んでいるのではないでしょうか。
この問題を解決するために、SSlackというツールを作成しました。
(Slack API: Community Built Integrations | Slackにも掲載されました)
SlackからOutgoing Webhookで監視しているチャンネル上の発言を取得し、elasticsearchに投入してデータを作ります。 このとき、発言本文をkuromoji pluginを用いて形態素解析にもとづいてトークナイズすることで、日本語でのチャットに最適な結果を提供します。 検索するときは、発言本文にマッチする検索クエリのほか、発言したユーザの Slack 上での名前と、複数のチャンネルを監視している場合にそなえて発言したチャンネルを指定できます。
Heroku上のデモアプリから検索性能を試すことができます。
デモでは太宰治の新ハムレットの第一幕をデータとして用いました。
たとえば「王」というクエリで検索すると、kingとqueenの発言がでてきます。
さらにuserにどちらかを指定すると絞込みができます。
WebPayでは主にRubyを利用して開発していますが、ライブラリやサンプルアプリケーションではJavaScriptやPHP、Javaなど様々な言語を利用しています。 SSlackはScalaのマイクロWAFであるScalatraとelasticsearchを利用して開発し、Ansibleを利用してデプロイしました(もちろん、Herokuでも使えます)。 いろんなテクノロジに触れることで知見を拡大し、より安全なプログラムを構築できるよう、日々努めています。
興味を持たれた方は、リポジトリの”Deploy to Heroku”ボタンから、いますぐHerokuで自分用のSSlackを構築してみてください。
きっとSlackでのコミュニケーションがもっと信頼できるものになります。
使ってみて不便な点がありましたら、ぜひIssuesでお知らせください。
その他、Twitterなどで感想もお待ちしています (怖がらずに @WebPayJP してくださいね)。
WebPayでは他にもSlackをもっと便利にするための機能を開発しています。 公開次第、開発者ブログでお知らせしますので、このブログをチェックしてください。
Be less busy!