RSpecとは、Rubyで書かれたプログラムの動作を確認するための、テストコードを記述・実行するためのフレームワークのことです。実際に動くプログラムの動作のことを振る舞い(ビヘイビア)と呼ぶことから、それまでのテスト駆動開発のやり方をビヘイビア駆動開発(BDD)と呼ぶようになっています。
振る舞いとはすなわち、プログラムの仕様にほかなりませんから、テストコードと呼ばずにスペックと呼ぶようになっていますので、今回の記事中でも、以降はスペックと表現することにします。
Railsアプリケーションでは標準のままだと、Test::Unitというテスティングフレームワークを用います。しかし、SKIPの開発チームでは、RSpecをあえて導入しています。その理由は、Test::Unitに比べて以下に示すようなメリットがあると感じているからです。
もちろん、Ruby on Railsとの親和性の高さも、選択した理由の一つです。
参考までに、以下にRSpecの出力のサンプルを掲載します。
SKIPの開発チームでは、当初は品質向上の目的のためにRSpecを導入したのですが、徐々にRSpecの開発スタイルに慣れてくるに従い、BDDの開発スタイルに変化し、いまでは設計開発のツールとして使うようになりました。
BDDに関する詳しい解説は、今回のコードリーディングの範疇(はんちゅう)を超えてしまいますので割愛します。その代わり、大変参考になる記事のURLを紹介しておきます。
早速、SKIPのスペックを読んでいきたいところですが、その前に、SKIPアプリケーションにおけるグループ機能のデータ構造について解説をしておきます。グループ機能の説明は、第1回をご覧ください。
第1回では、いわゆるMVCモデルのViewとControllerに当たる部分のソースコードを中心に説明しましたが、RSpecのスペックを書くのに一番適しているのは、Model(モデル)部分になりますので、まずは、RailsにおけるModelとSKIPにおけるデータ構造について説明します。
Railsにおけるモデルは、データベース上のテーブルとそこに蓄積されたデータを扱うための役割と、データに関連する処理ロジックを表現する役割を持っています。Railsのモデルのフレームワークに当たるActiveRecordには、主な機能として以下のようなものがあります。
モデルに関する詳しい説明は、次回以降のテーマとして取り上げる予定です。
今回も事例としてSKIPのグループ機能を使いますが、その周辺のテーブル構造は以下の図のようになっています。
グループには、名前や説明のほかに「参加制約」というカラムを持っています。これは、グループへの参加を「承認制」にするか「自由参加」にするかのフラグになります。
承認制だと、グループを作成した管理者の許可を得ないと、参加することができないようになります。こうすることで、秘密の情報などが漏えいしないような仕組みとなっています。
グループ参加状況という中間テーブルを置くことで、ユーザーは複数のグループに所属することが可能なようにしています。
Copyright © ITmedia, Inc. All Rights Reserved.