RSpecについて
るびまの記事(Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編))を見てから、ちょろちょろと仕事の計測結果をまとめたりするスクリプトを書くのがずいぶんはかどるようになった。というか、久しくまともにRubyを使っていなかったのがずいぶん気楽にEnjoy programmingできるようになった。
log_analysis_spec.rb
describe LogBeingAnalyzed do before :each do @log = LogBeingAnalyzed.new end describe "#add_data(newdata)" do it "should increase number of data" do @log.add_data("new data") @log.num_of_data.should == 1 end it "should add newdata at the end of the log" do @log.add_data("new data") @log.data[-1].should == "new data" end end end
log_analysis.rb
class LogBeingAnalyzed attr_reader :num_of_data, data def initialize num_of_data = 0 data = [] end def add_data(newdata) num_of_data += 1 data << newdata end end
中身をどう書くかぱっと設計できなくても、とりあえず書き始められるのよね。解析ツールとかはメインの成果物じゃないから、長らく止まってしまったら自動化あきらめて、効率の悪い(でも一応着実にちまちまと進む)手動解析をせざるをえなくなってくる。
かくしてテスト(スペック)ファーストしてると、そのうち中身の書き方も浮かんでくるし、着実に進んでいるのも分かる。どこかで間違えたらすぐに分かるから、すぐに直せる。これは効率的。ある程度まで作ったけどどこが悪いのかわからず長らく格闘した結果、一から作り始めたりあきらめたりしたことも以前はよくあった。
でもって、テスト/スペックファーストで書いてると、テストしやすいコードを書くことに慣れてくるから、だんだん読みやすいコードを書くのが当たり前になってくる。そうでないと気が済まないというのもあるけど、そうでないと非常に書きにくい。あるとき、ふと自分のコードを眺めてみると、「おお、以前の巨大なのっぺりした関数より格段に見栄えもするコードになってる!」となるわけだ。
TDD, BDDというとなんだか上級者向け話題っぽく見えるけど、プログラミングの世界に飛び込もうとした第一段階からいきなりこんな枠組みを用意してあげるのもいいんじゃないかな。細かいこと気にせずにまずはこんなふうに書くんだ、と。