akishin999の日記

調べた事などを書いて行きます。

Windows から Ruby で Cassandra を使うための準備

Java から Cassandra に接続して操作する事は出来たので、今度は Ruby から接続してみたいと思います。


Ruby から Cassandra に接続するためのライブラリを探すには、公式 Wiki の ClientOptions のページを見てみます。


ClientOptions - Cassandra Wiki
http://wiki.apache.org/cassandra/ClientOptions


ここでは、「High level clients」の中にあった、そのものズバリの名前の「Cassandra」を使ってみたいと思います。


fauna's cassandra at master - GitHub
http://github.com/fauna/cassandra

コンパイルのための準備

Cassandra は Thrift を使用しているため、上記のライブラリを gem からインストールする際にもコンパイルが必要になります。

個人的に今まで Windows では、既にバージョンアップされなくなって久しい InstantRails 同梱の Ruby 1.8.6(mswin32) を使い続けて来ました。
今回もそのまま行こうと思い、インストールされていた Visual Studio 2005 を使っていろいろ試してみたのですが、どうやってもインストールに失敗してしまいます。
方法はあるのかも知れませんが、結局 Web 上でも簡単な解決策など見つける事はできませんでした。


という事で、コンパイルが必要な native extension を使うため、もう一つの WindowsRuby である mingw32 版の RubyInstaller に乗り換えてみました。


RubyInstaller
http://rubyinstaller.org/


こちらでは Development Kit というものが用意されており、これを導入する事で Windows でもコンパイルが必要な gem を簡単にインストールする事ができるようになります。

RubyInstaller のインストール


RubyInstaller - Downloads
http://rubyinstaller.org/download.html


上記の公式サイトダウンロードページの「RubyInstaller / 7-zip Archives」カテゴリより、本体をダウンロードします。
後々複数バージョンを気軽に導入できるよう、今回はインストーラ形式のものではなく、7-Zip 書庫形式で配布されている「ruby-1.8.7-p249-i386-mingw32.7z」をダウンロードしました。


ダウンロードが完了したら、書庫を展開し、インストールしたいディレクトリに配置します。
ここでは、以下の場所に配置しました。

C:\Programs\ruby-1.8.7-p249-i386-mingw32


以降の説明は上記に配置したものとして書いています。
お使いの環境に合わせてディレクトリのパス等は適宜読み替えて下さい。


配置が完了したら「Ruby をインストールしたディレクトリ\bin」を環境変数 PATH に追加します。
が、ここでは後々の複数バージョン導入を考慮して、環境変数設定済みのコマンドプロンプトショートカットを用意することにしました。


インストールしたディレクトリ直下に、以下のようなバッチファイルを作成します。

@set RUBY_HOME=C:\Programs\ruby-1.8.7-p249-i386-mingw32
@set PATH=%PATH%;%RUBY_HOME%\bin
@cd C:\src\ruby
@ruby -v


次に、コマンドプロンプトのショートカットをコピーして、適当な名前に変更します。
コピーしたショートカットのプロパティを表示し、その中の「リンク先」を以下のように変更します。

%SystemRoot%\system32\cmd.exe /k call C:\Programs\ruby-1.8.7-p249-i386-mingw32\ruby_env.bat


これで、このショートカットから起動した場合に、今回導入した Ruby に PATH が通った状態でコマンドプロンプトが起動してくれます。
起動してバージョンが正常に表示される事を確認してみましょう。

ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mingw32]


ちゃんと表示されていれば OK です。


コマンドプロンプトを起動したついでに、以下も実行してみます。

C:\>gem -v
1.3.5


RubyInstaller では RubyGems もインストールされているようです。

Development Kit のインストール


次に同じくダウンロードページの「Development Kit」カテゴリより、Development Kit をダウンロードします。
現時点では「devkit-3.4.5r3-20091110.7z」というバージョンのファイルが配布されていたので、そちらをダウンロードしました。


ダウンロードした 7-Zip 書庫を適当なディレクトリに展開して下さい。
以下のようなファイル・フォルダが出てくると思います。

devkit-3.4.5r3-20091110
 ├─bin
 ├─devkit
 └─INSTALL.txt


この中の「bin」ディレクトリと「devkit」ディレクトリを、先ほど Ruby 本体をインストールした「C:\Programs\ruby-1.8.7-p249-i386-mingw32」以下に移動させます。
「bin」ディレクトリの方は元々存在するため、警告が出ますが、そのまま上書き(結合)してしまって下さい。


ディレクトリの移動が完了したら、「C:\Programs\ruby-1.8.7-p249-i386-mingw32\devkit\msys\1.0.11\etc\fstab」ファイルをエディタで開き、「C:/Ruby」となっている部分を以下のように実際のインストールパスに合わせ修正します。

C:/Ruby/devkit/gcc/3.4.5 /mingw
C:/Ruby/devkit/msys/1.0.11/usr/local /usr/local


# ↓のように修正する。


C:/Programs/ruby-1.8.7-p249-i386-mingw32/devkit/gcc/3.4.5 /mingw
C:/Programs/ruby-1.8.7-p249-i386-mingw32/devkit/msys/1.0.11/usr/local /usr/local


以上で RubyInstaller のインストール、設定は完了です。

Cassandra のインストール

ここまででやっと Cassandra ライブラリのインストール準備が整いました。
それでは、さっそくライブラリをインストールしてみます。
先ほど作成したショートカットより、コマンドプロンプトを起動し、「gem install cassandra」を実行します。

C:\src\ruby\>gem install cassandra
Building native extensions.  This could take a while...
Successfully installed thrift-0.2.0.3
Successfully installed thrift_client-0.4.2
Successfully installed json-1.4.3-x86-mingw32
Successfully installed rake-0.8.7
Successfully installed simple_uuid-0.1.1
Successfully installed cassandra-0.8.2
6 gems installed
Installing ri documentation for thrift-0.2.0.3...

Enclosing class/module 'thrift_module' for class BinaryProtocolAccelerated not known

Enclosing class/module 'thrift_module' for class BinaryProtocolAccelerated not known
Installing ri documentation for thrift_client-0.4.2...
Installing ri documentation for json-1.4.3-x86-mingw32...
Installing ri documentation for rake-0.8.7...
Installing ri documentation for simple_uuid-0.1.1...
Installing ri documentation for cassandra-0.8.2...
Installing RDoc documentation for thrift-0.2.0.3...

Enclosing class/module 'thrift_module' for class BinaryProtocolAccelerated not known

Enclosing class/module 'thrift_module' for class BinaryProtocolAccelerated not known
Installing RDoc documentation for thrift_client-0.4.2...
Installing RDoc documentation for json-1.4.3-x86-mingw32...
Installing RDoc documentation for rake-0.8.7...
Installing RDoc documentation for simple_uuid-0.1.1...
Installing RDoc documentation for cassandra-0.8.2...


無事、インストールする事ができました。

接続してみる


それでは、無事インストールも完了したので、簡単ですが接続してみたいと思います。


以下のようなコードを書きました。

require 'rubygems'
require 'cassandra'
include Cassandra::Constants

client = Cassandra.new('Keyspace1')

p client

p client.get(:Standard1, 'jsmith')
p client.get(:Standard1, 'foo')


実行すると以下のように出力されます。
接続、値の取得とも成功している事が分かります。

C:\src\ruby>ruby cassandra_example.rb
#<Cassandra:32155596, @keyspace="Keyspace1", @schema={}, @servers=["127.0.0.1:9160"]>
#<OrderedHash {"last"=>"Smith", "first"=>"John", "age"=>"42"}>
#<OrderedHash {"last"=>"baz", "first"=>"bar", "age"=>"99"}>


これで Windows 環境でも Ruby から Cassandra を使う事が出来るようになりました。

参考

今回 Cassandra の gem をインストールするに当たって、以下の記事が大変参考になりました。
ありがとうございました。


最近のRubyWatirをインストールしようとするとmakeが要るらしい - きたももんががきたん。
http://d.hatena.ne.jp/kitamomonga/20100130/ruby_mingw32_needs_make_when_install_watir