つかびーの技術日記

情報系修士卒のWeb系技術日記です。現在のフォーカス分野はアドテクです。

Play FrameworkのRedis Pluginインストール

      2014/09/17

2014/9/17 追記

なんとまあドンピシャなタイミングでクラスメソッドさんのblogと内容がもろ被りしてしまいました。(※自分の方が投稿早いしパクリじゃないですよ。)

内容はほぼ同じですが、クラスメソッドさんの方が丁寧に書かれているため、そちらもお勧めです。また、コメントでscalikejdbc作者の@seratch_jaさんとScalazコミッターの@xuwei_kさんがアドバイスしている点は必見ですよ。

ちなみに2週間ほどscala 2.11.1 + Redis Plugin 2.3.0(scala 2.10用)の構成でアプリ開発していますが、特に問題は起きていません。でもやっぱ後々トラブル起きたら困りますし、早々にSedis, Jedis, scala-redisあたりに乗り換えておくのが正解でしょうか。

—追記ここまで—

今回はPlay FrameworkでRedis Pluginを使う方法について書いて行きます。

Redis PluginはPlayでRedisを使えるようにするためのプラグインです。RedisはKeyValueストアで、NoSQL DBの1種です。キャッシュサーバとしての用途もあります。

Redis Pluginとは

redisをPlayで使えるようにするためのものです。ライブラリの1種と考えても良いですが、PlayのCacheの実装を置き換えるプラグインという認識の方が良いと思います。

置き換える、とは例えばこういうことです。

Cacheを使ってRedisに値を格納したり取り出したりしています。play.api.cache.Cacheのデフォルト実装を置き換えているため、Redisを経由するようになります。

Redis Pluginは以下の場所で公開されています。

https://github.com/typesafehub/play-plugins/tree/master/redis

Redis Pluginのインストール

上記のURLのREADME.mdにインストール方法が書いてあります。

手順は以下です。

  1. build.sbtにdependencyを追記する
  2. app/conf/play.pluginsファイルを作成し、以下を記述する
  3. conf/application.confに以下を追記する

公式に書いてあることはこれだけですが、場合によってはこれだけでは上手く行きません。

ビルド中にRedis Pluginが見つからないというエラーが出ることがあります。

これは使用しているScalaのバージョンが2.11の場合に出ます。Redis Pluginはこのリポジトリ(http://repo.typesafe.com/typesafe/releases/com/typesafe/play/plugins/)で公開されていますが、どうやら2.11用のバイナリはビルドされていないようです・・・。

結局どうするのがベストかは分かりませんが、自分で2.11用にビルドしたものを用意するのは面倒なので、2.10用のものを使うことにします。

build.sbtを上記のように変更してバージョン直接指定にすると2.10用のものを取るようになります。

この状態でビルド今度はsedisが無いよ、と言われます。

sedisはScala用のRedisライブラリですが、Redis Pluginは内部でsedisを使っているからこうなるんですね。ではbuild.sbtに以下を追記し、sedisが置いてあるリポジトリから引っ張って来れるようにします。

この状態でコンパイルするとcross-versionエラーが出る場合がありますが、その場合はbuild.sbtに以下を追記するとエラーを抑止できます。

こういうことしたくないのであれば2.11用Redis Pluginをコンパイルして用意しておくほうが良いですね。早く公式で配布して欲しいです。

使い方

準備が長かったですが、ここまでで完了です。Redisをローカルマシンにインストールして起動しておいた状態で、Playアプリを起動すればOKです。

コードは冒頭にもありますが、Cacheのインタフェースと変わりませんので、こんな感じで使います。

import play.api.Play.currentは一見不要な様に見えますが、無いとエラーになります。(Application contextを表現するためのもので、Redis Pluginはconfigファイルとかにアクセスする必要があるので、そのためにimportしておく必要があるのかな?)

ローカル以外のRedisに接続する方法や細かい設定は公式にあるので、それをご覧下さい。基本的にconf/application.confにredis.host=xxxxというように書くだけです。

Cache実装を差し替えるRedis Plugin、機能は少ないですが、単純でなかなか良いと思います。

 - Play Framework, Scala ,