第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) 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ |
|
- 構造体の便利な用途、インターフェイス入門 (2010/3/10)
継承機能を排除したインターフェイス機能でダックタイピングが可能となった。サンプルで確かめてみよう - プライベートモードの履歴状態 (2010/3/1)
仕事に集中できるときと、なかなかできないとき、ありますよね。状態遷移図で考えてみよう - Goのswitch文で解くFizzBuzzと構造体のイントロ (2010/2/25)
Goではif文と同等の制御構造をswitch文で表現できる。試してみよう - SQL4GでGAE+Railsを体験しよう (2010/2/23)
Google App Engine上でRDBMSを使ったRailsアプリケーションを構築する。環境設定手順を詳しく解説
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 New! |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
お勧め求人情報

**先週の人気講座ランキング**
〜Java編〜
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |

| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |

| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |
| ◆ | 直属上司が海外にいるのエンジニアに見る 【実例】場所に捉われないワークスタイル |

| ◆ | 「仮想化工房」のマイスターが選んだのは VMware、Hyper-V、そしてVirtageだった! |
| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |








