MacBookProへRubyとRailsをきっちりセットアップ

起業にともない、使用していたPCが新しくなりました。
MacBookProであるという点は変わらずです。

そのためRubyRailsなどをセットアップしなおすことになったので、きっちりやってみた流れをご紹介します。
MaxOSX10.6には標準でRuby1.8.7とRails2.3.5がインストールされているのですが、今回はRuby Version Manager (RVM)をインストールしてRuby1.8系とRuby1.9系のどちらも使える状態を作りました。

流れとしては

  1. Xcodeのインストール
  2. MacPortsのインストール
  3. 必要なライブラリなどをインストール
  4. rvmのインストール
  5. Ruby1.9.2-p180のインストール
  6. Rails3.0.5のインストール
  7. ついでにSinatra1.2.1のインストール

となっております。

1,Xcodeのインストール


様々なライブラリ等をインストールするためMacPortsを利用します。MacPortsをインストールするためには、ローカルにコンパイル出来る環境が必要です。
ということで、Appleが提供してる「Xcode」という開発環境をセットアップします。

Xcodeは2011年3月24日にXcode4がリリースされています。
iPhoneのDeveloperLicenseをおもちの方は、無料でXcode4のダウンロードが可能です。
しかし、それ以外の方は有償となっております。(AppStoreで$4.99となってました。)
ここでは、無償で提供されているXcode3.2.6を使います。

私は手元にXcode3.2.6のdmgファイルがあったので、そちらを使いましたが、お持ちでない場合は以下の流れで入手することができます。

準備するもの: AppleID

iPhoneをご利用の場合、アプリをインストールするときに聞かれるIDです。
もし持っていなくても、無料で取得できます。

  1. http://developer.apple.com/devcenter/mac/index.action
  2. AppleIDを持っていない場合は「Register」を、持っていれば「Login」
  3. ログインが行えたら、画面中ほどの「Xcode 3.2.6 and iOS SDK 4.3」というリンクをクリック

これでXcode3.2.6がダウンロードされます。
ファイルサイズが4.1GBもあるので、お気をつけ下さい。

ダウンロード後、dmgファイルをダブルクリックし、中にあるパッケージをダブルクリック。
出てきた画面は特に変更しないで、進めていけばセットアップできます。
ダウンロード同様、インストールもかなり時間がかかるのでご注意を。

2,MacPortsのインストール


http://www.macports.org/install.php
こちらからMacPortsをダウンロードします。OSのバージョンに合わせたものを取得して下さい。

こちらもXcode同様にdmgファイルからのインストールです。手順は同じ。

3,確認


もし、ターミナルで

sudo port

という、この後の作業がエラーで行えない場合は、自動で行われるパス設定が失敗している可能性があります。私はzshを使用していたため、パスが通っていませんでした。

もしMacPortsのインストール前に、シェルをbash以外に変更していた場合はご自分でパスを追加して下さい。私の場合は.zshrcの一番最後に

export PATH=$PATH:/opt/local/bin

と加えました。

4,必要なライブラリのインストール


Rubyで必要となるライブラリのreadlineをインストールします。また、RVMのためにgitも入れておきます。

$ sudo port install readline

これで、あとは待つだけです。なお、readlineを入れると同時に

  • ncurses
  • ncursesw

もインストールされました。

次に、gitです。パッケージ名は「git-core」です。

$ sudo port install git-core

を行います。git-coreを入れると

curl curl-ca-bundle perl5 perl5.12 libidn gettext expat libiconv gperf openssl zlib pkgconfig p5-error python27 bzip2 db46 gdbm sqlite3 rsync popt

がインストールされます。(ちょうど必要なCurlとOpenSSLも入ってしまう。)
なお、git-coreのインストールは同時にインストールされるものが多いこともあり、かなり時間がかかりますので、お急ぎの時には実行しないようご注意を。

なお、readlineとopensslについては、MacPortsで入れないでRVMから入れることも可能です。
その場合は、こちらの方のブログをご参照のこと。
http://g86.dbcls.jp/~yag/wordpress/archives/1301

5,RVMのインストール


以下のコマンドを実行します。

mkdir tmp
cd tmp
git clone --depth 1 git://github.com/wayneeseguin/rvm.git

これでrvmというディレクトリが出来ますので、

cd rvm
./install

でインストールされます。

インストール後、.bashrc(私は.zshrc)の一番最後に

 source ~/.rvm/scripts/rvm

を追加しておきます。

ここで一度ターミナルを閉じて下さい。その後、もう一度ターミナルを開きます。

ls -a

で.rvm/と.rvmrcがあればOKです。

6,Ruby1.9.2を入れる


2011/3/29時点で最新版のRuby1.9系は1.9.2-p180です。
rvmを使ってインストールを行います。

$ rvm install 1.9.2 --patch ~/.rvm/patches/ruby/1.9.2/p180/gcdata.patch -C --with-openssl-dir=/opt/local --with-readline-dir=/opt/local --with--enable-readline-v6

あとは待っていると終わります。
ターミナルで、

 ruby -v

とすると、まだ1.8.7と出ます。

 rvm use 1.9.2

とうち、再び

 ruby -v

を実行すると、バージョンが1.9.2と表示されると思います。

なお、rvm installのあとにバージョンを書くと、そのバージョンがインストールされます。

7,Rails3.0.5のインストール


ターミナルで

 gem install rails

を行って下さい。(sudoは付けなくてよい。~/.rvmの中にインストールされるので)

あと、

gem install sqlite3

も行っておいて下さい。

では、動作確認

$ mkdir ~/rails
$ cd ~/rails
$ rails g testapp
$ cd testapp
$ rails s

http://localhost:3000/にアクセスをしてみて下さい。

では、もう少し。

$ rails g scaffold Book title:string price:integer
$ db:migrate
$ rails s

次は http://localhost:3000/books/にアクセスします。
動いてますか?

8,おまけ Sinatra1.2.1もセットアップ

$ gem install sinatra
$ vi app.rb

で、以下のように打ちます。

require 'rubygems'
require 'sinatra'

get '/' do
  'コニチワー'
end

もう一つ、config.ruを作ります。

require './app.rb'
run Sinatra::Application

では、実行。

ruby app.rb

あれれ。エラー。
エラーは以下の通り。

app.rb:5: invalid multibyte char (US-ASCII)
app.rb:5: invalid multibyte char (US-ASCII)
app.rb:5: syntax error, unexpected $end, expecting keyword_end
  'コニチワー'

あー。ちゃんと文字コードを指定しなければ。

ruby -Ku app.rb

次に、ブラウザで

http://localhost:4567/

画面に"コニチワー"と表示されましたか?

番外編 readlineのおかげで、本当に文字化けしていないか確認


一応、irbで文字化けを起こしていないか確認。
先ほどSinatra用に作ったapp.rbのファイルを、1行1行画面に表示させる処理を実行してみます。

/ruby/sinatra/testapp% irb        
 :001 > f = open("app.rb")
 => #<File:app.rb> 
 :002 > f.each_line do |l| p l end
"require 'rubygems'\n"
"require 'sinatra'\n"
"\n"
"get '/' do\n"
"  'コニチワー'\n"
"end\n"
"\n"
 => #<File:app.rb> 

大丈夫ですね。

ということで、これでセットアップ完了です。