[Ruby]Windowsで環境セットアップからTDD開発サンプルまで その2


前回はRubyの最低限のベースを作るところまでやったので、今回はその続きです。
やっとTDDの環境作成に入ります。
そして実はこの辺りがつまづきまくった部分でもあります。
調べてると特に難しいこともないような感じで皆様書いてるので、私だけなのか…?

環境作り ~RSpecのセットアップ

プロジェクト階層の作成

まずはRSpecがちゃんと動くことを確認したいので、RSpecの確認用のプロジェクトを作ります。
めっちゃ安直に「rspectest」で作りました。
作り方はコマンドラインでも右クリックから新規作成でもお好きな方で。

bundlerの初期化

プロジェクト階層である「rspectest」に移動して、bundlerの初期化をします。
普通にコマンドプロンプト起動してもいいのですが、ここで唐突に、フォルダを開いたときの上部にあるパスのエリアをクリックし、「cmd」と入力しEnterするとその階層に移動された状態でコマンドプロンプトが起動するというちょープチTIPSを紹介しておきます。
すでによく知られてそうだけど…。




微妙にちょっとだけラクに!

前置き(おまけ?)がえらい長くなりましたが、ここでbundle initを実行すると、「rspectest」階層の直下にGemfileが作成されます。
このGemfileがその1で説明したbundlerのプロジェクトで使うgemをまとめてくれる設定ファイルになっているようです。
エディタで開けますので、開いてRSpecを使う用にちょめちょめと直します。

- # gem "rails"
+ gem "rspec", ">= 3.0.0"

簡単に言うと、Ver.3.0.0以上のRSpecを使うよ!ってことらしいです。


こんな感じ。

RSpecのインストール(bundle install)

Gemfileの修正ができたら、bundlerを使ってRSpecをインストールします。
コマンドプロンプトの「rspectest」階層からbundle install --path .bundleを実行して、終了を待ちます。
--pathは指定しないで説明しているサイトも多かったのですが、どうも付けておいた良さそうです。
深い理由は知りません!(※後で調べるかも)

RSpecの初期化

さて、やっとRSpecがプロジェクトにインストールされたはずなので、今度は初期化です。
コマンドプロンプトの「rspectest」階層からbundle exec rspec --initを実行…なんですが、私の環境ではいろいろ試してみても以下のようになってしまい、かなり詰まりました。

わからん!調べてもさっぱり出て来ない!
ということで暴挙に出まして、「Ruby200\bin」にインストールした「ruby.exe」と「rubyw.exe」をコピーして「rspectest\.bundle\ruby\2.0.0\bin」に持ってきました。
ないって言ってるんだからあればいいんだろ!(自棄)
…理由と正しい対処をご存知の方は教えていただけるとありがたいですorz
とりあえず暴挙に出て上記対応を行うと正常っぽく動きますので、そのまま進めることにします。

コマンドを実施すると「rspectest」階層に「spec」フォルダと「.rspec」というファイルができています。
「spec」フォルダの中に「spec_helper.rb」ができているので、これを編集します。
正直細かいことはちんぷんかんぷんですが、要は長いコメントアウトを消したいので=begin=endを消して保存。
…難しいことは追々でいいんですっ。
ちょっと長かったですが、ここまででRSpecの初期化が終わりました。

RSpecおためし

まずはRSpecを動かしてみること自体が目的なので、最初から動くものを準備してしまいます。
以下の2ファイルを作成しました。

RspecTest.rb
class RspecTest
  def message
    "rtest"
  end
end
spec\RspecTest_spec.rb
require 'bundler'
Bundler.require

require_relative '../RspecTest'

describe RspecTest do
  it "test" do
    expect(RspecTest.new.message).to eq "rtest"
  end
end

rspectest.rbがソースコード、spec\rspectest_spec.rbがテストコードです。
なお、テストのファイルは_specと付けるのがお約束のようです。
できたらコマンドプロンプトの「rspectest」階層からbundle exec rspecを実行します。

エラーが出ずに、テストされてるっぽい画面が出たらRSpecさんはちゃんと動いてくれています。
エラーが出た場合は相対パスとかその辺りを調べてみるといいかもしれません。


ちなみに私は作業始めてからここまでつまりまくった挙句、1週間かかりました
きっと皆様はもっとすいすいですよ…。