2011年 12月 の投稿一覧

Rubyでmemcachedを使う

REMPAPI周りでキャッシュを使いたくなったので、memcachedを使おうと思ったのだけどRubyで使う場合のクライアントを知らなかったので簡単にまとめ。
Ruby用のmemcacheクライアントはいくつかある様なのだけど、dalliというクライアントが一般的な様なので使ってみた。

インストールは簡単。gemコマンドでインストールできる。

$ sudo gem install dalli
Fetching: dalli-1.1.4.gem (100%)
Successfully installed dalli-1.1.4
1 gem installed
Installing ri documentation for dalli-1.1.4...
Installing RDoc documentation for dalli-1.1.4...

使い方も比較的シンプル。
irbで試すと以下の様な形で利用できる。
(localhostの11211番ポートでmemcachedサーバが常駐している状態)

irb(main):001:0> require 'dalli'
=> true
irb(main):002:0> dc = Dalli::Client.new('localhost:11211')
=> #0}, @ring=nil>
irb(main):003:0> dc.set("hoge", "foo")
=> true
irb(main):004:0> dc.get("hoge")
=> "foo"
irb(main):005:0> dc.get("hoge2")
=> nil

REMPは、sinatraで稼働させているのでその場合は以下の様な書き方をしておけばよいかと思う。

# (中略)
configure do
cache = Dalli::Client.new('localhost:11211', :expires_in => 3600 * 24)  # キャッシュ寿命24時間
set :cache, cache
end
get '/foo' do
tmp = setting.cache.get(params['id'])
val = 0
if tmp.nil?
val = db.getValue()   # DBからデータ取得
else
val = tmp  # memcachedのキャッシュを利用
end
val
end

意外と手軽にできたな。
ちょっとRubyのmemcachedクライアントがいくつかあったので迷ったけど、これで大丈夫そう。

REMP(レンプ)開発に参加してますよ

そういえば、REMP(レンプ)というYoutube動画を連続再生できるWebアプリの開発に参加してますー*1

f:id:hideack:20111211132100p:image

Mashup Award 7 にも応募したりしましたよ。
動作環境はgoogle chromeがインストールされているPCでfacebookアカウントがあれば利用することができます。

REMPの特徴

  • Youtubeの動画で自分が好きなものをリストにして登録できます
    • 手順としては、動画検索→自分が好きな動画をリストに登録
  • 作成したプレイリストを連続再生したり、繰り返し再生できます
    • REMPのコア機能。かなり便利。
  • facebookで繋がっている友達と自分が作ったプレイリストをシェアできます
    • 難しくなくて単に友達は自分のプレイリストを見ることができるということです
  • facebookで繋がっている友達に自分が気に入った動画を紹介することができます

詳しくは紹介ページ http://remp.rockf.es/hello/ を参照。
難しい説明はさておいて、使ってもらうとわかりやすいかと思います!

いきさつなど

きっかけは、会社の開発合宿(ペパボお産合宿)で一緒のチームになった@Chromeアプリ版のREMPを紹介してもらって、そのときにWebアプリとしてtwitterfacebookの連携機能を作りたい。という話を聞いたのが始まり。
じゃ、facebook連携周りを一緒に作りましょうか。という話になって、お手伝いした次第。
初めてsinatraを作ってAPI側のロジック実装したり、データストアにmonogo dbを使ったりと初めて使う技術ばかりでしたが、なんとか動かせましたよ。
(RubyでWebアプリは初めて書きました…。いままで検証用のスクリプト程度しか使ったことがなかったので。)
実装的には@がフロント側、私がバックエンドという役割分担で、打ち合わせは会社の昼休みにご飯を食べながら、あるいは開発が業務時間外や週末だったりしたのでfresh meetingで仕様を詰めながら実装を進めました。*2
多少、このあたりでの技術的な話をこのあたり(SinatraアプリをApache2のmod_proxy_balancerを通してThinで動かす(1) - Thinの設定)で書いていたりします。
MA7の応募が近づいてきて、今度は紹介ページとかがいるぞ。デザインどうすんだ?って話になったときにデザイナーの@参加!で、素敵な紹介ページができたのでした。

使ってみたい場合

*1:このエントリ早く上げようとしてたのだけど、遅れに遅れた…orz

*2:fresh meeting便利すぎます