こんにちは!
VOYAGE MARKETINGシステム本部の @saya_223n です。

私はこれまで、ほぼPHP一本でやってきた新米(ギリギリ)エンジニアなのですが、
この春から扱う言語が変わってアワアワしておりました。

PHPerだった私がRubyistになるにあたって、
とても助けられた学習ツールがあったので、今回はそれをご紹介します。

「RubyKoans」

http://rubykoans.com/

RubyKoansとは、
ユニットテストを利用してRubyの言語仕様を会得することが出来る学習用のコードセットです。


上記サイトからコードをzipでDLしてみると、
中に入っているのは40ほどのユニットテストのファイルその他諸々。

56(2)


ですが、そのテストを実行してみると、全てのファイルがエラーになります。


コードを見てみると…

39(2)


ユニットテストのAssert部分が穴埋め問題のような形式になっているのです!

例えば、上記コードの穴埋め部分には、trueが入りそうですよね。
入れてみて実行すると、テストが通ります!

この要領で、データ型やクラスごとにまとまっているユニットテストをどんどん埋めていくことにより、
Rubyの細かな言語仕様を理解することが出来る、という仕組みです。

==============================

※個人的には、
1つのユニットテストを書いてはテストを回す、というやり方ではなく、

1つのテストファイル(元のテストコードが40-150行くらい)を一気に埋めていき、
1ファイル仕上がった時点で、テストを実行するほうが良いと思います。

なぜなら、頻繁にテストを回しすぎると、コアを理解する前になんとなく穴埋めの解が読めてしまうからです。
(※assert に true 入れてテストがコケたなら、多分 false 入れれば通るよね…というメタ的な解き方が出来るということです)

==============================


ファイル群のうち、「about_xxxx.rb」というファイルはこのような「穴埋めUnitTest」となっており、
それ以外には「xxxx_project.rb」に関連するファイルが存在します。

これは、穴埋めではなく出来上がったUnitTestのファイル群となっており、
このテストが通るようにコードを自由に書きます。

58

例えば、上記、 about_triangle_project.rb というテストに関するものならば、
予め用意されている triangle.rb というファイルの中に、
三角形の判定プログラムを自由に実装し、
その後 about_triangle_project.rb のテストを実行して正しいプログラムになっているかを見るという塩梅です。

これに関しては、よくいうTDD(テスト駆動開発)そのものと言って良いと思います。


==============================


RubyKoansを利用して勉強をするメリットは、大きく3つあります。

1つは、本を読み写経しながらの勉強では、ついつい読み飛ばしがちな、

細かな言語仕様についてもユニットテストが存在するということ。

(例えばsymbolとstringの違いなど)


2つめは、テストによってこれまで自身が扱ってきた言語や経験によって偏りがちな

「苦手部分」を炙り出せること。


3.つめは、テストが通って行くことに寄る快感&達成感です\(^o^)/

(そのページの学習ドリルが終わったら達成シールを貼れる、みたいな小学生レベルの気持ちよさですw)


58(2)

テストファイルの数は結構沢山ありますが、
全てに取り組まなくても身になりますし、ぜひ挑戦してみて頂ければと思います。

ありがとうございました!