Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
19
Help us understand the problem. What is going on with this article?
@nownabe

Rubotyのデータ永続化にLevelDBを使う

More than 5 years have passed since last update.

はじめに

チャットボットフレームワークといえばGithub製のHubotが有名ですが、私はRubyが好きなので @r7kamura さん作のRubotyを使ってます。

RubotyにはBrainというデータを持つ仕組みがあり、標準ではメモリに保存されます。
メモリに保存するだけではデータの永続化ができないので、永続化にはプラグインを使用します。

この記事では、RubotyのデータをローカルのLevelDBに保存して永続化する方法を紹介します。
LevelDBを使うので、Redisのようにサーバを建てる必要はありません。

Rubotyを自前のサーバで運用してて、無駄なサーバは建てたくないという人には向いています。
逆に、RubotyをHerokuなどローカルでのファイルが永続化されない環境で運用してる人には向いてません。
(ほとんど後者だと思いますがw)

Rubotyについてはr7kamuraさんのブログを御覧ください。

LevelDB

LevelDBはGoogle製のKVSです。
InfluxDBやRiakのバックエンドに使われています。

Google先生は

LevelDB is a fast key-value storage library

と表現してます。

よくあるDBはサーバーを建てたり運用したりとめんどくさいですが、LevelDBの場合はライブラリから直接ファイルを操作するためサーバは不要です。
操作もとてもシンプルで、基本はPut(key, val)Get(key)Delete(key)だけです。

そのためLevelDBをバックエンドにしてリッチなインターフェースを提供する、みたいな形で使われることが多いようです。
KyotoCabinetなんかのKVSライブラリと似ています。

ruboty-leveldb

RubotyのLevelDBでのデータ永続化を行うのは非常に簡単で、RubotyのGemfilegem "ruboty-leveldb"を追加するだけです。

ただし、実行する環境にSnappyという圧縮ライブラリをインストールする必要があります。

Snappyインストール

Mac

MacだとHomebrewでインストールできます。

brew install snappy

CentOS 6 / 7

CentOSはyumでインストールできます。

sudo yum install snappy

Ubuntu

Ubuntuはapt-getでインストールできます。

sudo apt-get install snappy

Ruboty作成

では実際にLevelDB BrainのRubotyを作ってみます。

mkdir ldb-ruboty
cd ldb-ruboty
bundle init
echo 'gem "ruboty-leveldb"' >> Gemfile
echo 'gem "ruboty-alias"' >> Gemfile
bundle install --path vendor/bundle

Rubotyを起動して、データの永続化を確認します。
確認にはaliasを使います。

$ bundle exec ruboty
Type `exit` or `quit` to end the session.
> ruboty alias name -> nownabe
Registered alias: name -> nownabe
> ruboty list alias
name -> nownabe
> quit

$ bundle exec ruboty
Type `exit` or `quit` to end the session.
> ruboty list alias
name -> nownabe
> quit

1度終了してもaliasは登録されたままになっているので、データが永続化されていることがわかります。

データの実態は、Rubotyを起動したら作成されるruboty.ldbというディレクトリになります。
これはLevelDBのファイル群です。

$ ls
Gemfile  Gemfile.lock  ruboty.ldb  vendor

このディレクトリは、LEVELDB_PATHという環境変数で指定できます。

おわりに

Rubotyのデータ永続化にRedisみたいなリッチなDBは必要ないと言う方は、是非試してみてください。

19
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
nownabe

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
19
Help us understand the problem. What is going on with this article?