読者です 読者をやめる 読者になる 読者になる

Welcome Ruby 2.0.0 !!

待望のRuby 2.0.0がリリースされましたね!ということで、さっそくインストールしてみました。(特に目新しいことが書いてある記事ではありません。単にRuby2.0リリースの喜びを共有したかっただけです。)


2013/05/04更新
インストール時の依存関係

2013/05/15更新
2.0.0-p195が出たので更新しました。

2014/01/01更新
2.0.0-p353をpacoでインストールするように更新しました。
bundlerの互換問題は過去に解決済みだったので削除しました。

1. 既存のRubyを削除

以前、たこ焼き仮面ことAaron Pattersonさんが、「Rubyのバージョン管理ポリシーは?」という質問に対して"Always use HEAD"と回答していたのを目にしてからRVMを使っていません(いろいろめんどくさいしね!)。ということで、既存のRubyを削除します。
※以下の例は、インストール時に ./configure --prefix=/usr/local/ruby --bindir=/usr/local/bin とした時のものです。rubyのソースディレクトリで.installed.listファイルの中身を確認することをおすすめします。

sudo rm -r /usr/local/ruby
cd /usr/local/bin
sudo rm ruby rdoc gem erb rake ri testrb irb
# その他、Gemでインストールされるコマンド類も削除

2. インストール

# 依存関係
sudo aptitude install build-essential curl libffi-dev libgdbm-dev libreadline-dev libncurses-dev libyaml-dev libcurl4-openssl-dev zlib1g-dev libssl-dev paco

wget http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.bz2
md5sum ruby-2.0.0-p353.tar.bz2 #=> 最初の5文字が20eb8ならOK!
tar -xf ruby-2.0.0-p353.tar.bz2
cd ruby-2.0.0-p353
./configure
make
sudo paco -D make install

# 確認
ruby -v #=> ruby 2.0.0p353 (2013-11-22 revision 43784)

削除
以下の節は古い情報です。
**3. bundlerの非互換問題
現時点で、bundlerの最新安定版は1.2.4ですが、これはruby2.0と互換性がありません。

sudo gem install bundler #=> 1.2.4が入る
sudo bundle
# Bundler is not compatible with Ruby 2.0 or Rubygems 2.0.
# Please upgrade to Bundler 1.3 or higher.

bundler 1.3.0.preを入れれば解決します。

sudo gem install bundler --version '1.3.0.pre'


4. RSpec走らせてみる

「1.9互換」を謳っている2.0ですので、検証してみましょう。

cd /path/to/rails/project
rspec
# ........................................................
# 
# Finished in 1.61 seconds
# 56 examples, 0 failures

無難にPass。体感で速いですね!
速いと言えば、一番違いを感じるのがrails serverとかrails consoleとかでしょうか。require高速化はダテじゃないようです。

5. keyword arguments を試してみる

このまま終わってしまうとブログ記事としてはあまりにもお粗末なので、それなりにサンプルスクリプトらしきものを走らせてみたいと思います。ということで、個人的にRuby2.0で最も使ってみたかったkeyword argumentsを試してみました。
keyword.rb

def keyword_sample(a, b, hoge: 'おはようございます', fuga: 'おやすみなさい')
  p [a, b, hoge, fuga]
end

keyword_sample(1, 2)
keyword_sample(1, 2, hoge: 'Gd morning')
keyword_sample(1, 2, fuga: 'Gd night')

として、

ruby keyword.rb
# [1, 2, "おはようございます", "おやすみなさい"]
# [1, 2, "Gd morning", "おやすみなさい"]
# [1, 2, "おはようございます", "Gd night"]

きれいに動いてますね!オプション変数をとても美しく表現できています。
(ついでに、デフォルトがUTF-8になったことも確かめられていますね!)

各種紹介記事を読んで、より一層「痒いところに手が届く」言語になったのかな、という感じを受けました。Module#prependとかその辺はこれからよく勉強してみます。

Happy hacking with ruby 2.0 !