kinoppyd.dev

blog

products

accounts & contact

Rubyを使って秒でBotを作るなら、秒でRedisだって使えなきゃ、やっぱり話にならないですよね?

posted at 2018-12-11 01:40:50 +0900 by kinoppyd

このエントリは、 Mobb/Repp Advent Calendar の十一日目です

mobb-redis

昨日のエントリでは、MobbでActiveRecordを利用する方法を紹介して、Sinatraの資産をMobbが継承できるという話をしました。そして今日はRedisです。こっちは本当に秒でいけます。

https://github.com/kinoppyd/mobb-redis

まず、検証用のRedisを立てましょう。今ならDockerで秒です。

docker pull redis
docker run --rm -p 6379:6379 redis

次に、mobb-redisをインストールします。例ではBundlerを使います。

# frozen_string_literal: true
source "https://rubygems.org"

gem "mobb"
gem "mobb-redis"

最後にアプリケーションを書きます。

require 'mobb'
require 'mobb-redis'

register Mobb::Cache

on 'hello' do
  settings.cache.fetch('great') { "hello world #{Time.now}" }
end

はい、秒ですね。起動して動作を見てみましょう。

bundle exec ruby app.rb
== Mobb (v0.4.0) is in da house with Shell. Make some noise!
hello
hello world 2018-12-11 01:36:16 +0900
hello
hello world 2018-12-11 01:36:16 +0900

このように、返答の中の時間が変化していないので、Redisを経由していることがわかります。

redis-sinatra

mobb-redisの元ネタは、redis-sinatraというgemです。

https://github.com/redis-store/redis-sinatra

これは、redis-storeというWebフレームワーク用のRedisラッパーを使って、SinatraにRedisを提供しているgemです。

昨日のmobb-activerecordと同じく、私がやったことはリネームだけです。このコミットを参照してください。

https://github.com/kinoppyd/mobb-redis/commit/aca774dd8d17f832d2ee6e9f3d7721a7fb314999

それどころか、このgemはforkしてから変更して動作確認してパブリッシュしてこのブログを書くまで、トータルで一時間かかっていません。資産を使うということは素晴らしいことです。

秒で作れるBot、秒で扱えるRedis

さて、gemを作るのも秒だったし、みんなが使えるようになるのも秒でした。素晴らしい。これからもどんどんBotを作るときにRedisを使っていきましょう。