« [Ruby] Rubykaigi 2015(1日目) | トップページ | [Ruby] Ruby 2.3.0 »

2015年12月12日 (土)

[Ruby] RubyKaigi 2015(2日目)

今日も参加するかどうか迷ったのだけど、少しは体力が回復していたのと、 Sutouさんの話 が聞きたかったのと 全く参加しないのも寂しいので、ちょっとだけでも参加しようと思って会場に向かった。

完全に1コマ目には遅刻したのだが、Sutouさんの話を聞くことができた。やっぱり面白い。後で、Sutouさんを掴まえてRSpecについてどう思っているか質問してみたかったのだが、結局掴まえることができなかった。

続けてTurbo Rails with Rustの話を聞いたのだけど、驚くほどに完璧に英語が頭に入ってこないのが衝撃だった。やっぱり疲れていたらしい。

午後をそのまま聞き続ける自信がなかったので、お昼のタイミングで退散した。

自宅に戻って休んだあと、Youtubeで Pragmatic Testing of Ruby Coreを視聴。ということでテストで始まりテストに終わった1日だった。

以下、ちょっと個人的に懐しく、いろいろ思い出したので記憶を頼りに書いてみる(残念ながら当時のメールも記録も残っていないので記憶違いがあるかも知れない)。思い出すきっかけをくださったSutouさんに感謝。

RubyUnitが初登場したのは、多分 [ruby-list:17335]。

で、この投稿にあるURLはどちらも既に存在しない。現存するのは、RubyUnitのページ 、 私の友人が書いたTesting Frameworkの解説というのは、石井君が書いたKent Beck Testing Framework 入門 のことである。

当時、RubyUnit は、このTesting Frameworkの解説にあるJUnitのソースコードを参考にしながら実装した。 ただし、そっくりそのまま移植した訳ではなく、Rubyのメタプログラミングの機能も使って、より簡潔にテストを書けるようにした。 そのRubyUnitのコードを石井君に見せたときにRubyってこんなこと(メタプログラミング)ができるのかと驚かれたのを覚えている(もっとも、当時のJavaにもReflection の機能があったはずで、同じようなことはJavaでも実装しようとすればできたはず)。

また、メソッド名などもJUnitそのままではなくRubyっぽく修正した。 Unit Testing Framework のコンセプトの1つにプログラミング言語を使ってテストコードも書けるというのがあった。なので、Sutouさんの話に、RubyUnitを使ったテストのコードがRubyっぽいのも当たり前といえば当たり前である。

石井君とは、その後、京都のPerl/Ruby Conferenceで一緒に講演することになった。 今では到底考えられないことであるが、まつもとさんのRuby Keynoteの真裏のコマになっていた。 観客が数人だったら喋るのをやめて、まつもとさんのキーノートを聞きに行きましょうと観客に交渉しようかと冗談半分で石井君と話したりした。

幸いなことに講演には、それなりに人数が集まってくれ、その中の一人、ごとけんさんにRuby自身のテストをRubyUnitで書くというのはどうでしょう?と聞かれた。 既にDave Thomas と Andy Hunt がRubyの本(後に「ピッケル本」と呼ばれるようになる本)を執筆中で、Rubyの挙動が執筆中に変わっていないか確認するためにRubyUnitを使ってRubyをテストしていると返事をした。 RubyUnit には、実行した assertion の数と成功したassertionの数を表示するという機能があった。これは、元々のJUnitにはなかった機能で、Rubyの本を執筆中のDaveとAndyからのリクエストによって実装した機能だった。

RubyUnitを作ったのは私だけど、最初のきっかけをくれたのは石井君だし、RubyUnitならではの機能が実装されたのは、Andy や Dave のおかげである。RubyUnitをネタにして本を書くこともできたし、その後、それをネタにして日本初のLigtning Talksに登壇する機会も与えてもらった。

Sutouさんの話に Lapidary は、Rubyっぽくないという話があったが、あれは、Lapidary が SUnit(元祖xUnit であるSmallTalkのTesting Framework)をベースに実装されていたからである。 内部の実装もAPIもSUnitを意識したものになっていたと思う。 実は、Lapidary の作者には、RubyUnit が Testing Framework っぽくないと喧嘩を売られ指摘されたことがある。JUnitをベースにしているので、SUnitとは違っていたのは当然なのだけど。あと、Shibataさんの話にもあったけどRubyUnit自身のテストがないことも指摘された。

Lapidary の作者がRuby標準のTesting Framework を実装するという話になったときに、やりたい人にやってもらうのが一番なので、Lapidaryの作者にすべてお任せすることにした。 ただし、1つだけ私が主張したのは、RubyUnitで書かれたテストが既にあるから、必ず既存のテストも動作するように互換性は保ってくれということだった。 私の拙い英語が本当に伝わったのかどうか良くわからないが、互換性は保たれていたようだった。

なんか取りとめのない話になってしまった。まあ、RubyUnitそのものは使われなくなったけれど、私にとっては、いろいろ思い出深いライブラリなのだった。

|

« [Ruby] Rubykaigi 2015(1日目) | トップページ | [Ruby] Ruby 2.3.0 »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [Ruby] RubyKaigi 2015(2日目):

« [Ruby] Rubykaigi 2015(1日目) | トップページ | [Ruby] Ruby 2.3.0 »