Ruby Koans で Ruby を学ぼう

以前から Ruby をちゃんと勉強したいなと思っていて、何か良い教材はないかと探していたところ、Ruby Koans という面白いものを見つけたのでメモしておきます。

Ruby Koans

Ruby Koans とは?

Ruby Koans はテストケースの修正を通して Ruby の言語仕様が学べる無料のコンテンツです。
テストケースはそのままだと失敗するようになっているので、これを正しく pass するように書き換えていきます。
本を読みながらひたすら内容を頭に入れていくのとは違って、実行結果を自分で予想しながら解いていくので、クイズのような感覚で楽しく学べるようになっています。
(ちなみに Koans は公案と読むっぽいです)

始めかた

とても簡単です。
公式サイト から Ruby Koans をダウンロードし、

ruby path_to_enlightenment.rb

を実行するだけ。
すると今どの問題で止まっているのかという情報と、それを解決するためのヒント(というか答え)、そして進捗状況が表示されます。

AboutStrings#test_you_can_get_a_substring_from_a_string has damaged your karma.

The Master says:
  You have not yet reached enlightenment.
  I sense frustration. Do not be afraid to ask for help.

The answers you seek...
  Expected "FILL ME IN" to equal "let"

Please meditate on the following code:
  /Users/questbeat/Sync/shared_work/ruby/koans/about_strings.rb:142:in `test_you_can_get_a_substring_from_a_string'

remember that silence is sometimes the best answer
your path thus far [...........X______________________________________] 63/282

about_strings.rb の中の test_you_can_get_a_substring_from_a_string を直せと書いてあります。
このファイルを開いてみましょう。

about_strings.rb (抜粋)

def test_you_can_get_a_substring_from_a_string
  string = "Bacon, lettuce and tomato"
  assert_equal __, string[7,3]
  assert_equal __, string[7..9]
end

この下線部に答えを書き込むようになっているんですね。おもしろい。

さて、実は上の The answers you seek... のところに答えが書いてあるのですが、ここの答えは2つとも "let" です。
答えを埋めて path_to_enlightenment.rb を実行してみると…

AboutStrings#test_you_can_get_a_single_character_from_a_string has damaged your karma.

The Master says:
  You have not yet reached enlightenment.
  You are progressing. Excellent. 64 completed.

The answers you seek...
  Expected "FILL ME IN" to equal "a"

Please meditate on the following code:
  /Users/questbeat/Sync/shared_work/ruby/koans/about_strings.rb:148:in `test_you_can_get_a_single_character_from_a_string'

remember that silence is sometimes the best answer
your path thus far [...........X______________________________________] 64/282

次の問題へ進むことができました。
Koans ではこれを繰り返しながら Ruby を学習していきます。

思ったこと

問題の内容は、初めは assert について、次は nil について、文字列について… という感じでステップアップしていくようになっているので、初心者でも問題なく進めていけると思います。
なんとなく Ruby を使っているけど、言語仕様について知らない部分が多いかも… という人にも良いかもしれません。
ですがとにかく問題の答えについての解説が少ないので、全くのプログラミング初心者には向いていない感じがしました。

あと、テストケースを書き換える度に手動で path_to_enlightenment.rb を実行するのは面倒なので、Guard などを使って自動化するのがオススメです。