rvmでrubyのバージョンを切り替える

http://runeleaf.wordpress.com/2010/02/07/ruby-rvm%E3%81%A7ruby%E3%81%A8%E3%81%8Bgem%E3%81%A8%E3%81%8Brake%E3%81%A8%E3%81%8B%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88/

macbookproにrvmいれた。macportsにあるrvmというのはruby version managerとは関係ない別物なので注意

先にmacportsでreadlineをインストールしておく

sudo port install readline
git clone git://github.com/wayneeseguin/rvm.git
cd rvm
./install
[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm
rvm -v

1.0.1が入ってた

rvm list known
# MRI Rubies
(ruby-)1.8.6(-p399)
(ruby-)1.8.6-head
(ruby-)1.8.7(-p302)
(ruby-)1.8.7-head
(ruby-)1.9.1-p243
(ruby-)1.9.1-p376
(ruby-)1.9.1(-p429)
(ruby-)1.9.1-head
(ruby-)1.9.2-preview1
(ruby-)1.9.2-preview3
(ruby-)1.9.2-rc1
(ruby-)1.9.2-rc2
(ruby-)1.9.2(-p0)
(ruby-)1.9.2-head
ruby-head

# JRuby
jruby-1.2.0
jruby-1.3.1
jruby-1.4.0
jruby-1.5.1
jruby(-1.5.2)
jruby-head

# Rubinius
rbx(-1.0.1)
rbx-head

# Ruby Enterprise Edition
ree-1.8.6
ree(-1.8.7)
ree-1.8.6-head
ree-1.8.7-head

# MagLev
maglev(-24067)
maglev-head

# Shyouhei head, the default mput
mput(-head)

# Mac OS X Snow Leopard Only
macruby(-nightly) # the default macruby
macruby-head      # Build from the macruby git repository

# IronRuby -- Not implemented yet.
ironruby-0.9.3
ironruby-1.0-rc2
ironruby-head


とりあえず1.8.7と1.9.2を切り替えて使いたいので両方入れておいた

rvm install 1.9.2
rvm install 1.8.7


ちゃんと切り替えれるか確認

rvm list
rvm use 1.9.2
ruby -v
echo $GEM_HOME

gemも /Users/sho/.rvm/gems/ruby-1.9.2-p0 の下を参照しているので、入れ直す

gem list
gem install twitter oauth

rvmで入れた各rubyにmecab rubyバインディングをインストールする

mecab rubyバインディングはgemでインストールできないので、rvmで入れた各バージョンのrubyからmecabを使うのは少し面倒。
今までportで入れたrubyから、portのrb-mecabを使ってたけど、rvmで$GEM_HOMEが切り替わるとportで入れたrubyバインディングが読めないので、個別に入れる

portでmecabの最新版0.9.8を入れておく

sudo port install mecab +utf8only
which mecab
mecab -v

ちゃんと0.98になってた


mecabrubyバインディング入れる。
http://sourceforge.net/projects/mecab/files/ からmecab-ruby-0.98をダウンロードする

tar -zxvf mecab-ruby-0.98.tar
cd mecab-ruby-0.98
use rvm 1.9.2
ruby -v
ruby exconf.rb

んで
make

g++ -I. -I/Users/sho/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/i386-darwin9.8.0 -I/Users/sho/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/ruby/backward -I/Users/sho/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1 -I. -DHAVE_MECAB_H -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -fno-common -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long  -fno-common -pipe -I/opt/local/include   -o MeCab_wrap.o -c MeCab_wrap.cpp
g++ -dynamic -bundle -o MeCab.bundle MeCab_wrap.o -L. -L/Users/sho/.rvm/rubies/ruby-1.9.2-p0/lib -L. -L/usr/local/lib -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -Wl,-flat_namespace  -lruby.1.9.1 -lstdc++ -lmecab  -lpthread -ldl -lobjc


make install

/opt/local/bin/ginstall -c -m 0755 MeCab.bundle /Users/sho/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby/1.9.1/i386-darwin9.8.0

ちゃんとrvmの下に入った



同様にrvmで入れた1.8.7の方にも入れる

cd ../
rm -rf mecab-ruby-0.98
tar -zxvf mecab-ruby-0.98.tar
cd mecab-ruby-0.98
use rvm 1.8.7
ruby -v
ruby exconf.rb
make
make install


動くか試そう
mecab-split-terms.rb

#!/usr/bin/env ruby
require 'MeCab'

exit if ARGV.size < 1

puts str = ARGV.join(' ')

node = MeCab::Tagger.new.parseToNode(str)
while node do
  puts node.surface
  node = node.next
end

puts '*'*5

puts MeCab::Tagger.new.parse(str).split(/[\r\n]/).map{|i| i.split(/\t/).first}.delete_if{|i| i =~ /^EOS$/}
rvm use 1.8.7
ruby mecab-split-terms.rb BIG丼はやばい
rvm use 1.9.2
ruby mecab-split-terms.rb BIG丼はやばい

どっちも同じ様にsplitできた
1.9.2だとArray.to_sした時に前後に [ と ] が付くのではまった
あと改行区切りのStringをmapで行毎に処理できなかった