Brian Ford氏はRubySpecプロジェクトのオフィシャルWebサイトを(サイト・英語)発表した(source)。
このプロジェクトは、RSpecスタイルの仕様に基づいてRubyプログラミング言語向けに完全に実行可能な仕様を書くことを目的としています。当プロジェクトは、初期のRubiniusに(サイト・英語)貢献するというほんのささいなところからのスタートでしたが、以来献身的な人々のおかげで6900を超えるサンプル(example)と2560を超えるエクスペクテーション(expectation)に到達するまでに成長しました。
Ruby言語には望ましい振る舞いを明記した正式な標準がまったく存在しないが、Rubyの実装数増加に伴い、仕様書は明らかに必要になってきている。最新ソフトウェアを開発する精神からすれば、実行可能な仕様はその他のドキュメンテーション形式より望ましい。その理由は単純で、仕様集が実行可能であれば、適合性の実証がいっそう容易になり、ただちにフィードバックできるからである。
来たるGoogle Summer of Codeに参加する2人の学生、Federico BuilesとArthur Schreiberは、Ruby仕様の改良と拡張を行う予定である。この2人と話し、この夏、何に取り組むかを聞いた。
Federico Builesはコロンビアの学生で、Cの替わりとなるものを探していたおよそ2年前に、Rubyに関わるようになり、現在はRubiniusプロジェクトに貢献している。Google Summer of Codeにおける目標について尋ねた。
プロジェクトではまず、Standard内のライブラリとCore Lib、すなわちREXML、YAML、Logger、Socket、IO向けに仕様(テスト)を書きます。
私のプロジェクトのもうひとつの役割は(Charles Oliver Nutter氏に(source)提案されたものですが)、他のRuby実装で使用している異なるテストケースに注目し、それをRubyspecにポートし、可能な限り完全な仕様一式を作るよう努力することです。
テストが欠落しているコードを探し出す方法についても、Builesに聞いた。
すでに作業中の決まったライブラリ一式があるので、寄り道せずにこのライブラリのドキュメンテーションをすぐに見て、メソッドにさせるべきことを確かめてから、スペックを仕上げます。ドキュメンテーションどおりに機能するなら申し分ありませんが、機能しない場合はソースを読むことから始め、何が起こっているのかを確かめます。
すぐにコードに取り掛からず、ドキュメンテーションを読むことには利点がありますが、その1つは、ものによっては期待どおりに動作しないと判明することがたびたびあることです。REXMのスペックカバレッジを始めたとき、小さなバグや最新状態になっていなかったドキュメンテーション向けに、一日のうちに3つも4つもパッチを送らなければならなかったのですが、現在ではRuby 1.9になって修正されています。今ではRubyspecがMRIの一部になったので、この種のものはすぐに発見され、その修正もずっと早くなると思います。
Rubyspecで使うRSpecの単純なクローンMSpecにより(source)、まだテストがないライブラリでスタブ生成が可能になり、その後、XもしくはY実装向けにタグincomplete、タグready、タグfailingなどを付けることができます。 こうすれば、Ruby実装で問題を起こしているlibの存在が明らかになりますが、修正で加える変更をカバーしてくれるテストスイートが存在すると分かっているので、その問題の修正にすぐに取りかかれます。
Rubyの仕様に取り組む2人目の学生は、19歳のドイツ人、Arthur Schreiberである。Rubiniusとの関わりは2007年5月以来で、これまでに小規模のパッチやバグ修正、多数のスペックで貢献している。Schreiberにも同様の質問をした。
Google Summber of Codeにおける私の目標は、Ruby Standard Libraryの少数のスペックを作成もしくは改良することで、対象ライブラリはCGIやStringIO、Net、Set、その他の小規模ライブラリです。
RubiniusチームのBrian Ford氏がRSpec互換のBDDフレームワーク、MSpecを開発しましたが、このMSpecを主要ツールの1つとして使用します。裏側にあるアイデアは、Ruby言語の高等機能を回避することにより、それほど完璧でない実装でもスペックを実行できるようにすることです。
MSpecはかつて基本的なカバレッジユーティリティーをサポートし、まったくスペックを持たないメソッドを指し示すことができましたが、MSpecとRubyspecsが別々のライブラリに分かれたため、ユーティリティーは削除されてしまいました。Brian Ford氏は、できるだけ早い時期にこの機能の再追加を検討する予定です。RCovを(source)Standard LibraryスペックのSpecカバレッジに使うことについても、検討中です。
これをお読みのあなたも貢献したいなら、Vladimir Sizikov氏が書いたRubySpecのクィックスタート・ガイドに(source)基本的な始めの一歩が説明されている。プロジェクトの詳細については、RubySpecWebサイトをご覧あれ(サイト・英語)。
原文はこちらです:http://www.infoq.com/news/2008/05/rubyspec-website-and-gsoc