EY-Office ブログ

EY-Officeの吉田裕美が、まだ Ruby on RailsやiPhone開発を行ってない技術者や技術系マネージャー向けに、技術や教育に付いて書いています。

2011-04-03 Webアプリ作成の三種の神器 (Ruby on Rails, RSpec, Capistorano)

EY-Officeでは ネットショップiPhoneアプリ内課金サーバーエンターテイメント系サイト を Ruby on Rails を使って立て続けに作ってきましたが、 Ruby on Rails自体の素晴らしもさることながら、 Ruby on Rails文化圏から生まれた、ユニットテストやEnd-to-Endテスト用ツール RSpec、アプリを実サーバーへ1コマンドでデプロイ(配置、インストール)出来る Capistorano の良さも、開発やメンテナンスサイクルの高速化やミスを防ぐのに大きく役立っています。

RSpec

RSpecはRuby言語でユニットテストやEnd-to-Endテストを書くための DSLとツールの集まりです。
出来る事は従来のxUnitと同じですが、Ruby言語の柔軟性を生かしたテスト記述用の DSL により、テストコードをテストの為のプログラムというより、テスト対象のプログラムの仕様を記述するように書けます。
したがって RSpecで書かれたテストコードは簡潔で何をテストしているかが解り易く、テストコードの可読性が高くテストコードのメンテナンスを容易にしてくれます。

ユニットテスト等は、プログラムのメンテナンス性や信頼性を上げてくれますが、テストを書く事で大きく生産性が下がってしまうのでは、Ruby on Railsの良さを殺してしまいます。RSpecはこの問題を解決してくれていると思います。
また、最近は Capybara という Webアプリに対しての Webブラウザーの部分をシミュレーションしてくれるライブラリーが現れ、ユニットテストだけでなく、実際にWebブラウザーでアプリを使うような End-to-Endテスト も RSpec で書けるように成ってきています。

Capistorano

Capistorano はアプリを実サーバーにコピーしたり、データーベースの更新などのデプロイ(配置、インストール)操作を簡潔なコマンドで行えるツールです。また万が一デプロイしたソフトに問題が発見された場合は、速やかに前のバージョンに戻す事も出来ます。
Ruby には Rake というコマンドがあり、良く行う作業を RakefileにDSLで書いておくことで、複数の手順の操作を1つのコマンドで行えます。 Unixにある make をまねた機能ですが make の記述は可読性が低く、また機能も低いので自分で書くのは大変です。しかし、RakeのDSLはRubyプログラムなので Rubyプログラマーには簡単に書けます。Ruby on Rails にもデータベースの更新など良く行う操作の Rakefile が用意されています。

Capistorano は基本的には、サーバーに ssh等でログインし Rakeのように定義されたコマンドを実行してくれるツールと、通常のデプロイで必要になる DSL の集まりです。Capistoranoの標準の機能だけで、実サーバーに最新のアプリを(git, Subversionから)取り出し古いアプリと置き換えたり、データベース定義の変更などが行えます。もちろん設定ファイルにDSLを追加するとこでデプロイ時に特定のファイルをコピーしたり、リンクを作ったりなどのアプリやサーバー固有の作業も自動化できます。

Capistorano を使うと、デプロイ作業を間違いなく実行する事が出来ます。デプロイは難しい作業ではありませんが、ちょっとした間違い予定以上に長い時間サービスを止めてしまうので緊張する作業です。

まとめ

Rubyには Ruby on Rails のような生産性の高いフレームワークだけではなく、可読性の高い良いテストを書く RSpecのようなツール、 開発時やデプロイで行う作業を自動化してくれる Rake, Capistrano のようなツールも発達しています。
これらを習得することでよりWebアプリの開発から運用・メンテナンスの生産性を高め、良いアプリを早く作り、そしてユーザーからのフィードバックを元により良く改良するというビジネス価値の高い事にたくさんの時間を使う事とが出来るようになり、よりビジネスの成功へと近付けますます。