今仕事でRailsアプリケーションを組むときに、test/unitじゃなくてRSpecを使ってる。mock周りの使い勝手がいいとか、語彙が馴染みやすいとかいろいろ魅力があるんだけど、その「可読性」を保つにはなかなかコツがいると思う。

言うまでもなくRSpecはRubyのコードを「英語の表現として自然に見える」ようにすることを意図して語彙や書き方を決めている。これは英語圏のエンジニアには非常に素敵なことではあるんだけど、英語が苦手で英作文なんて始めて数分で泣きたくなるようなへたれ外国語学部生にとっては正直やっかいだし、周りの人達の大半は英語に慣れていない人達*1だったりするので、せっかく可読性が高い綺麗な表記でさえむしろ意図を理解する妨げになったりする。いっそドイツ語で書いて「お勉強」に活用してやろうかという衝動に駆られたけども、誰一人として読めない上に一週間後の俺ですら理解に苦しみそうなのでそんな暴走は妄想の中だけにしておく。

ということで、やっぱりSpecやらコメントやらといったものは、とっつきやすくするためにもできるだけ日本語で書きたいところ。ところが、英語の語順を前提にしているのでちょっと工夫しないとコードとして見たときかspecコマンドの出力かどっちかが不自然になるんだよなぁ。

Lesson1:I study english編

まず、RSpecの記述はどういうふうに書くかというと、

describe ClassName, 'context' do
end

となる。で、その条件下にあるときの挙動について、

it 'should ...' do
end

で列挙していく。例えば、最近各方面で名前を聞くことの多いあの先生の仕様を書くなら、

describe Teacher, 'when introduce himself' do

  it 'should tell own name' do
    momoiro = Teacher.new('糸色 望')
    momoiro.name.should be_eql('糸色望') #桃色係長の名前をつなげて書いちゃだめですよ。
  end

end

こんな感じ。describe〜やit〜もさることながら、仕様確認の処理の記述も'momoiro('s) name should be equal "糸色望".'とちゃんと読めていい感じ。で、これを実行すると、

'Teacher when introduce himself should tell his own name' FAILED
expected "絶 望", got "糸色 望"

という出力をしてくれる。この'Teacher when introduce himself should tell his own name'が綺麗に文章になっていて*2「RSpecは軸がぶれてない 素敵」と口ずさみたくなる感じ。いや、軸関係ないけど。人として。でもこれは英語が'Something when ...'で一つの主語になるから綺麗に'it'に繋がるのであって、日本語で単純に置き換えるとちょっと不自然になる。

Lesson2:仕様なんぞ箇条書きで十分なんです編

最初はもういっそ英語的な部分は無視して、

  • 先生が自己紹介をするケース
    • 自分の名前を言う
    • 横書きにされると絶望する
    • 命名権には数十円から数百円/日必要

という箇条書きのイメージで、contextには条件を、'should ...'の部分には説明を書いてしまえと

describe Teacher, '先生が自己紹介をするケース' do
  it '自分の名前を言う' do
    ...
  end
  it '横書にされると絶望する' do
    ...
  end
end

と書いてみたところ、

'Teacher 先生が自己紹介をするケース 自分の名前を言う' FAILED

となってしまった。ぬうん。なんか、文章にならないのが気持ち悪い。最初のTeacherもちょっと気持ち悪い。どうせなら、出力も日本語として違和感無く読める物@ITの記事より)であるといいなあと思うんだよなぁ。

Lesson3:specコマンドは日本語で喋り始めました編

じゃあ、ということで、さっきの画像にならって、出力の文章が繋がるようにしてみる。

describe Teacher, '先生が自己紹介をするという状況では' do
  it '先生は自分の名前を言うんだ' do
    ...
  end
  it '先生は横書にされると絶望するんだ' do
    ...
  end
end
'Teacher 先生が自己紹介をするという状況では 先生は自分の名前を言うんだ' FAILED

…出力はいいんだけど、肝心のSpecの記述、日本語が浮いちゃっててなんだかな。Teacherやitが完全に無視されてるのも可哀想スマートでない。

Lesson4:俺は妥協しないぜ!編

で、大腸のしくみについてよく考えた*3結果、「が〜〜するとき」と「は〜〜すること」というふうにすると不自然さが若干緩和されるなぁというところに至る。

describe Teacher, 'が自己紹介をするとき' do
  it 'は、自分の名前を言うこと' do
    ...
  end
  it 'は、名前を横書きにされると絶望すること' do
    ...
  end
end
'Teacher が自己紹介をするとき は、自分の名前を言うこと' FAILED

やった。これならSpecの方では「それ(it)は、〜〜なこと」と読めるし、出力は「〜〜するときは、〜〜なこと」と読めてどちらも自然。俺ってば軸がぶれてない、素敵。…結局それが言いたいだけか。

*1:以前ある人がRailsの書籍の情報が若干古くてハマってたので、「ググって調べて」って言ったらさらに古いバージョンの日本語APIリファレンス読んでて、なんで一次資料見ないのって突っ込んだら「英語だから…」って言われたときは泣けた。気持ちはわかるけど、勘弁してよ…。

*2:「つーか英文間違ってるじゃねーかこのゆとり世代が!」って思ったら激しく指摘してください。「っるっせーわこのダラズが、そんぐらい知っとるわい!!ネタに決まってんじゃろがボケが!!」と感謝の言葉を述べながら即座に修正します。

*3:ネタ古いなぁ。なんでこんなの唐突に思い出したんだろう