読者です 読者をやめる 読者になる 読者になる

おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

パーフェクト Ruby on Rails のサンプルアプリケーションを Github 上で公開しました

パーフェクトRuby on Rails 中の第6章で取り扱っている題材、イベント開催支援系のRailsアプリケーション awesome_events のソースコードを Github 上で公開しました。

ソースコードは技術評論社さんのサポートページからダウンロードすることもできますが、やっぱり Github から持ってこれたほうがいいですよね。

さて awesome_events とはどんなアプリケーションでしょうか。すごくざっくり書くと、DoorkeeperATND の簡略版です。

使っている gem は、Rails を普段使っている人から見たらかなり普通な感じ。特筆すべきなのは carrierwave と ransack くらいでしょうか。omniauth で「Twitterログイン」機能を作ったりもしています。

gem 'rails', '4.1.1'
gem 'sqlite3', '~> 1.3.9'
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '~> 2.5.0'
gem 'coffee-rails', '~> 4.0.1'
gem 'jquery-rails', '~> 3.1.0'
gem 'turbolinks', '~> 2.2.2'
gem 'omniauth', '~> 1.2.1'
gem 'omniauth-twitter', '~> 1.0.1'
gem 'kaminari', '~> 0.15.1'
gem 'kaminari-bootstrap', '~> 3.0.1'
gem "ransack", '~> 1.2.2'
gem 'carrierwave', '~> 0.10.0'
gem 'mini_magick', '~> 3.7.0'

group :development do
  gem "capistrano", "3.1.0"
  gem "capistrano-rails"
  gem "capistrano-bundler"
  gem "capistrano3-unicorn"
  gem 'spring'
end

group :development, :test do
  gem 'rspec-rails', '~> 3.0.0.beta', github: 'rspec/rspec-rails'
  gem 'rspec-core', '~> 3.0.0.beta', github: 'rspec/rspec-core'
  gem 'rspec-expectations', '~> 3.0.0.beta', github: 'rspec/rspec-expectations'
  gem 'rspec-mocks', '~> 3.0.0.beta', github: 'rspec/rspec-mocks'
  gem 'rspec-support', '~> 3.0.0.beta', github: 'rspec/rspec-support'
  gem 'factory_girl_rails', '~> 4.4.1'
end

group :test do
  gem 'shoulda-matchers', '~> 2.6.0'
  gem 'capybara', '~> 2.2.1'
  gem 'poltergeist', '~> 1.5.0'
  gem 'database_cleaner', '~> 1.2.0'
end

group :staging, :production do
  gem 'unicorn'
end

デザインは完全に Bootstrap です。

welcome-with-ransack

add-carrierwave-to-show-event

第6章に載っているコードをひたすら写経すれば、ちゃんと作れるようになっていますが、それなりに分量があるので全部写経するのはツライはず。このサンプルコードを最大限に活用してください。

テストはそれなりにきちんと書いています。お仕事よりもきちんと書いているかもしれません。rake stats すると Code to Test Ratio: 1:4.9 となっていますね(たくさん書けばいいというものではないですが)。

rake stats
+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          |   162 |   130 |       6 |      22 |   3 |     3 |
| Helpers              |    15 |    15 |       0 |       1 |   0 |    13 |
| Models               |    78 |    60 |       3 |       6 |   2 |     8 |
| Mailers              |     0 |     0 |       0 |       0 |   0 |     0 |
| Javascripts          |    33 |    14 |       0 |       3 |   0 |     2 |
| Libraries            |     0 |     0 |       0 |       0 |   0 |     0 |
| Controller specs     |   553 |   431 |       0 |       4 |   0 |   105 |
| Feature specs        |   566 |   456 |       0 |       0 |   0 |     0 |
| Helper specs         |    12 |     9 |       0 |       0 |   0 |     0 |
| Model specs          |   200 |   163 |       0 |       0 |   0 |     0 |
| View specs           |    23 |    19 |       0 |       0 |   0 |     0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                |  1642 |  1297 |       9 |      36 |   4 |    34 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 219     Test LOC: 1078     Code to Test Ratio: 1:4.9

テストの章である7章では紙面の都合上、「テストの流れ」を紹介するのにとどめていますが、Github 上では、モデル、コントローラ、エンドツーエンドのテストを全て確認することができます。プロダクトコードにある程度の分量がないと、テストコードの「実践的なサンプル」としては成り立たないので、ブログなどでテストコード例を見せるのって難しいはず。awesome_events は程々の規模のアプリケーションの上にきちんとテストを書いているので、「Rails プロジェクトのテストが具体的にどのように書かれているか」を把握するのに役立つのではないかと思います。

フラゲした方もいるみたいですが、そろそろみなさんのお手元にも届くはずです。まだの方はポチっとどうぞ。サンプルコードと一緒にお楽しみください。

パーフェクト Ruby on Rails
すがわら まさのり 前島 真一 近藤 宇智朗 橋立 友宏
技術評論社
売り上げランキング: 370

あわせて読みたい