第2回 RSpecを使ったテストコードを読もう

倉貫 義人
松村 章弘
TIS株式会社
SonicGarden

2008/11/26

優れたプログラマはコードを書くのと同じくらい、コードを読みこなせなくてはならない。優れたコードを読むことで、自身のスキルも上達するのだ(編集部)
- PR -

 第1回「コードリーディングを始めよう」では、Railsアプリケーションの基本であるCRUDのソースコードを読解しました。最低限の基本の動きということで、ディレクトリ構造の説明すら割愛していたので、今回はディレクトリ構造の解説から行います。その後、今回のメインテーマであるテストコードのコードリーディングに入っていきます。

 ここで扱うテストコードというのは、Javaの世界でいうとJUnitを使ったテストコードと同じ粒度、つまり、単体テストに近い粒度のテストケースを動くプログラムで表したものになります。Javaの開発者にとってのJUnitやテスト駆動開発と同じくらい、Rubyの開発者にとって、RSpecとビヘイビア駆動開発は一般的なものになりつつあります。

 本連載で題材として扱うオープンソース「SKIP」でも、テスティング環境としてRSpecを導入していますので、今回のコードリーディングのゴールは、RSpecを使ったテストコードの読み方の基本をマスターする、ということになります。

関連リンク:
リンク オープンソース「SKIP」
http://www.openskip.org/

ソースコードの準備

 さて、前回から2カ月ほど経過しましたので、扱うソースコードのバージョンを変更します。第1回である前回は、1.0 rc1というリリース候補第1弾を使いましたが、今回は、その第2弾である1.0 rc2を使います。1.0 rc1からは細かな見た目の修正のほか、いくつかの機能追加などを行っています。詳しくは以下のURLを参照してください。

関連リンク:
リンク SKIP ver1.0 rc2のリリースノート
http://www.openskip.org/2008/10/skipver10rc2.html

 1.0 rc2の目玉機能として追加したコメントのソートについてだけ、少し紹介しておきます。

 SKIPでは、ユーザーの書いたブログの記事に対して、コメントを付けることができますが、その際に、ツリー形式でコメントを返すことができるようになっています。この機能のおかげで、誰のコメントへの返信か、すぐに分かるため大変便利に使えるのですが、そのソートができない点がいままでの不満でした。

 これを解消するため、最近のコメントにアイコンを付けて、しかもソート機能を提供することで、さらにコメントが追いやすくなりました。

図1 コメントのソート

 1.0 rc2のソースコードは、前回同様、Subversionのリポジトリからチェックアウトしておくことで、見やすくなります。

関連リンク:
リンク SKIP ver1.0 rc2
http://svn.openskip.org/skip/tags/1.0rc2/

SKIPのディレクトリ構造

 初めに、前回は割愛したディレクトリ構造についての説明から行います。Rails用に作られたアプリケーションは、Railsに用意されたrailsコマンドを使っているはずなので、どれもほとんどが同じようなディレクトリ構造になります。SKIPの場合も同様です。以下のような構造になっています。

app アプリケーション用のソースコード(自分の作るファイルはこちら)
├model データベースを扱うソースコード
├controller 画面制御に関するソースコード
└view 表示用のテンプレートファイル
config 各種設定に関するファイル
db データベース関連のファイル
└migrate マイグレート(バージョンアップ時のDB構造変更)用のファイル
doc ドキュメント
lib 各種ライブラリファイル
log 実行時のログファイル
public JavaScriptや画像などの静的ファイル
script サーバ起動スクリプトなど
spec RSpecのテストコード
├model app/modelに対応するテストコード
├controller app/controllerに対応するテストコード
├view app/viewに対応するテストコード
└lib libに対応するテストコード
stories specのストーリーと呼ばれるテストコード
test Test::Unitのテストコード
tmp 一時的なファイル
vendor プラグインやgemなどの外部から取り込んだファイル

 通常のRailsアプリケーションには存在しないspecというディレクトリがあるのが特徴です。このディレクトリこそが、今回のテーマであるRSpecのテストコードを配置するためのディレクトリになります。appという実際にアプリケーションとして動くソースコードと対応するようにサブディレクトリが用意されています。

 また、storiesというディレクトリも、RSpecで使うストーリーと呼ばれるテストですが、今回はSKIPで利用していないこともあり、説明は割愛します。

 
1/4

Index
RSpecを使ったテストコードを読もう
Page1
ソースコードの準備
SKIPのディレクトリ構造
  Page2
RSpecについて
グループ機能のデータ構造
  Page3
モデルのスペックを読んでみよう
  Page4
コントローラのスペックを読んでみよう

Railsコードリーディング 〜scaffoldのその先へ〜

 Ruby/Rails関連記事
プログラミングは人生だ
まつもと ゆきひろのコーディング天国
 ときにプログラミングはスポーツであり、ときにプログラミングは創造である。楽しいプログラミングは人生をより実りあるものにしてくれる
生産性を向上させるRuby向け統合開発環境カタログ
Ruby on Rails 2.0も強力サポート
 生産性が高いと評判のプログラミング言語「Ruby」。統合開発環境を整えることで、さらに効率的なプログラミングが可能になる
かんたんAjax開発をするためのRailsの基礎知識
Ruby on RailsのRJSでかんたんAjax開発(前編)
 実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう
Praggerとnetpbmで作る画像→AA変換ツール
Rubyを使って何か面白いものを作ってみよう!
 一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう
コードリーディングを始めよう
Railsコードリーディング〜scaffoldのその先へ〜(1)
 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ
  Coding Edgeフォーラムフィード  2.01.00.91

TechTargetジャパン

Coding Edge フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH