Ruby(Railsじゃない環境)でTDDで開発をするための環境構築 2012/8月版

2012/9/1のTDDBC横浜に向けて書いたものです。
間違ってるとか、古い、とかありましたら突っ込みください。

## Rubyのインストール
### Ubuntuの場合 (下にMacの場合を書いてます)
その他のディストリの場合は、頑張って読み替えてください。

#### 関係するライブラリ、開発に必須なバージョン管理システムなどをインストールする
```sh
sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion
```

元々結構入ってるかもしれないけど、大体こんなもん。

#### rbenvとruby-buildをインストールする
rvmはオワコンという噂が流れてますので、rbenvを使います。
rvmはシェルを色々いじり過ぎって感じがちょっとマイナスポイントですね。

```sh
# 一般ユーザーで実行
$ cd
$ git clone git://github.com/sstephenson/rbenv.git .rbenv
```

ホームディレクトリに.rbenvが出来る。

```sh
# 一般ユーザーで実行
$ mkdir -p ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git
```

.rbenv/plugins/ruby-buildが出来る。

.profile or .zshrcに以下の設定を記述する

```sh
export PATH=$HOME/.rbenv/bin
eval "$(rbenv init -)"
```

ここは使っているシェルやディストリによって多少変わる。
私自身は、.zshenvに記述していて、あちこち共通で使えるように多少工夫している。

この後、ターミナルを再起動して、シェルを読み込み直しておく。

```sh
$ rbenv help
```

を実行して、rbenvの使い方が出てきたらオッケー。

#### Rubyの最新安定版をインストールする。
```sh
$ CONFIGURE_OPTS="--enable-shared" rbenv install 1.9.3-p194
```

configureにオプションを渡したい場合は、CONFIGURE_OPTSに文字列を渡しておくと処理してくれる。

#### 利用するRubyの切り替え
```sh
$ rbenv global 1.9.3-p194
$ ruby -v # -> ruby 1.9.3p194
```

#### Bundlerのインストール
Gem管理のためにbundlerをインストールする。

```sh
$ gem install bundler
$ rbenv rehash
$ rehash # zshを使ってる場合
```

rbenvでは、.rbenv/shims以下にある実行ファイルを呼び出して、
間接的に各バージョンのディレクトリにインストールされているコマンドを呼び出す仕組みになっている。
gem installによってコマンドが追加されても、.rbenv/shims以下にはコマンド呼び出しのための実行ファイルは自動で作成されない。
なので、コマンドが追加される類のgemをインストールした際は、都度rbenv rehashを実行する。

#### プロジェクトのディレクトリでBundlerを使う
これからコードを書くつもりのディレクトリに移動したら、以下のコマンドを実行する。

```sh
$ bundle init
```

カレントディレクトリにGemfileの雛形が作成される。
作成されたGemfileを以下のように編集する。

```ruby
source "https://rubygems.org"

gem "rspec"
gem "guard-rspec"
gem "libnotify" # 通知が欲しい場合
```

その他、必要なGemがあれば適宜追記。
編集が終わったら以下のコマンドを実行する。

```sh
$ bundle install --path .bundle
```

環境全体に色々入れないように、path指定をしてそのディレクトリ内での利用に限定する。
特に環境全体へのインストールに抵抗が無ければ、bundle installのみでもOK。

#### 自動テストの設定例
bundlerでディレクトリ内にGemをインストールしている前提。

```sh
$ bundle exec guard init rspec
```

カレントディレクトリにGuardfileが作成される。
細かい説明は省略しますが、watch対象のファイルが更新された時に、rspecを実行してくれます。
開発環境のディレクトリ構成によって変わりますが、
シンプルにそのディレクトリのルートで書く時は、以下の設定を頭に足しておくといいかなと思います。

```ruby
watch(%r{^([^/]+).rb$}) { |m| "spec/#{m[1]}_spec.rb" }
```

hoge.rbを編集したら、spec/hoge_spec.rbが実行されるはずです。
手動で実行したい時は、以下のようにする。

```sh
$ bundle exec rspec spec/hoge_spec.rb
```

このあたりはディレクトリ構成や命名規則と関係するので、
慣れてきたらカスタマイズするのもいいかと思います。

参考: https://github.com/guard/guard


### Macの場合
Xcodeとhomebrewのインストールが完了していることを前提。

#### homebrewでrbenv, ruby-build, readlineをインストールする
```sh
$ brew install rbenv ruby-build readline
$ brew link readline
```

git-nowもbrewで入るので、ついでに入れておくのもいいかもしれない。

#### Rubyの最新安定版をインストールする。
```sh
$ CONFIGURE_OPTS="--enable-shared --with-readline-dir=/usr/local" rbenv install 1.9.3-p194
```

Macのreadlineはシステムデフォルトのライブラリを使ってしまうと、
irbやpryで日本語が打てなくなるので、brewで入れたものを使うように指定しておく方がいい。

後の構築作業はほぼ共通だが、Gemfileは少し違う。

```ruby
source "https://rubygems.org"

gem "rspec"
gem "guard-rspec"
gem "ruby_gntp" # 通知が欲しい場合
```

### Windowsの場合
良く分かりませんw
RubyInstallerで1.9.3-p194が入るらしいので、後は運が良ければGemがインストール出来ると思います。