Ruby on Rails 3.2 系の基本セット

Ruby on Rails 3.2 系の基本セット

Rails を構成する gem や機能について基礎を学んでみようと思う。
gem を覗いてみる事で、それがヒントになるのではないか?

Ruby on Rails を構成する gem について
Ruby on Rails の 3.2系 (現時点で 3.2.13) では下記のような Gemfile が生成される。

## 「$ rails new xxx」コマンドを実行した直後の Gemfile の内容

source 'https://rubygems.org'

gem 'rails', '3.2.13'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'debugger'

アセットパイプラインや、jqueryRails アダプター等余分なものが含まれているので、純粋に次のようにしてみる。

## 純粋に Rails のみを含む Gemfile
source "https://rubygems.org"

gem "rails", "~> 3.2.0" # 3.2.x 系の最新版を利用する

「bundle install」を実行すると、rails 3.2 系がインストールされ、Gemfile.lock が作られる。
Gemfile.lock には最終的にアプリケーションにインストールされた gem が追記されているので、これを確認する。

GEM
  remote: https://rubygems.org/
  specs:
    actionmailer (3.2.13)
      actionpack (= 3.2.13)
      mail (~> 2.5.3)
    actionpack (3.2.13)
      activemodel (= 3.2.13)
      activesupport (= 3.2.13)
      builder (~> 3.0.0)
      erubis (~> 2.7.0)
      journey (~> 1.0.4)
      rack (~> 1.4.5)
      rack-cache (~> 1.2)
      rack-test (~> 0.6.1)
      sprockets (~> 2.2.1)
    activemodel (3.2.13)
      activesupport (= 3.2.13)
      builder (~> 3.0.0)
    activerecord (3.2.13)
      activemodel (= 3.2.13)
      activesupport (= 3.2.13)
      arel (~> 3.0.2)
      tzinfo (~> 0.3.29)
    activeresource (3.2.13)
      activemodel (= 3.2.13)
      activesupport (= 3.2.13)
    activesupport (3.2.13)
      i18n (= 0.6.1)
      multi_json (~> 1.0)
    arel (3.0.2)
    builder (3.0.4)
    erubis (2.7.0)
    hike (1.2.2)
    i18n (0.6.1)
    journey (1.0.4)
    json (1.8.0)
    mail (2.5.4)
      mime-types (~> 1.16)
      treetop (~> 1.4.8)
    mime-types (1.23)
    multi_json (1.7.5)
    polyglot (0.3.3)
    rack (1.4.5)
    rack-cache (1.2)
      rack (>= 0.4)
    rack-ssl (1.3.3)
      rack
    rack-test (0.6.2)
      rack (>= 1.0)
    rails (3.2.13)
      actionmailer (= 3.2.13)
      actionpack (= 3.2.13)
      activerecord (= 3.2.13)
      activeresource (= 3.2.13)
      activesupport (= 3.2.13)
      bundler (~> 1.0)
      railties (= 3.2.13)
    railties (3.2.13)
      actionpack (= 3.2.13)
      activesupport (= 3.2.13)
      rack-ssl (~> 1.3.2)
      rake (>= 0.8.7)
      rdoc (~> 3.4)
      thor (>= 0.14.6, < 2.0)
    rake (10.0.4)
    rdoc (3.12.2)
      json (~> 1.4)
    sprockets (2.2.2)
      hike (~> 1.2)
      multi_json (~> 1.0)
      rack (~> 1.0)
      tilt (~> 1.1, != 1.3.0)
    thor (0.18.1)
    tilt (1.4.1)
    treetop (1.4.12)
      polyglot
      polyglot (>= 0.3.1)
    tzinfo (0.3.37)

PLATFORMS
  ruby

DEPENDENCIES
  rails (~> 3.2.0)

ずらずらっと一覧で表示されたが、これらがすべて Rails が依存している gem の一覧である。
これだけではツラくなってくるので、情報を整理する。まず上記の gem を元に Rails が直接依存している gem のみ
まとめると下記のようになる。

Rails が直接依存している gem

  • actionmailer
  • actionpack
  • actionrecord
  • actionresource
  • actionsupport
  • bundler
  • railties
    • rack-ssl
    • rake
    • rdoc
    • thor

数が多くてしんどいが1つずつ見ていく
これらは Rails を構成している一つ一つの要素なので、把握しておくだけで Rails の挙動をつかみやすくなる(はず)

railties(レイリティーズ)

Rails フレームワークのコアな処理を受け持っており、Railsrailties を継承した複数の gem の塊と見ることが出来る。
この辺り、しっかりと理解が及んでいるわけではないので、今後調べたい。

また railties は主に、下記の gem に依存している。

  • rack-ssl
  • rake
  • rdoc
  • thor
bundler(バンドラー)

アプリケーションの依存関係を管理してくれるツール。
Rails 使いには定番。

actionmailer

Rails 上から email に関する操作を提供するライブラリ部品。
メール送信に関して、controller と view の分離を行ったり、メールの構成、送信、受信等の操作を
ActionMailer を通して画一的に操作することが出来る。

actionpack

Rails 上での MVC アーキテクチャの構築やテストの構成を手助けするなどを行う。
ActionPack の重要な役目の1つとしては、URL リクエストを解析して、適切なコントローラーのアクションを呼び出すこと。
というふうな解説を見る。

あとで解説するが、ActionPack は次の gem に依存している

依存している gem を見ていると、ActionPack がどの辺りを引き受けているのか、なんとなく想像がつく。

activerecord

O/R マッパー

activeresource

Object に対して RESTful にアクセスするためのものらしいです。
activeresource を使うと、Web API を明示的に用意しなくてもアプリケーション間での同一DBでの通信が可能になる!

activesupport

  • ActiveSupport
  • Rails に関する雑多なサポートツール郡というイメージ?


以上が、Rails の基本的な構成となっている。
つぎに Rails を支えている各 gem について、1つずつ見ていくことにする。

rack(ラック)

rack-ssl

  • 関係:railties => rack-ssl
  • rack アプリケーション構築するうえで HTTP 上の SSL/TLS 通信に必要な処理を受け持ってくれているらしい。

rake(レイク)

rdoc(アール・ドック)

thor(ソー)

  • 関係:railties => thor
  • これがちょっとよくわからない。。なんとなく重要な役割を果たしているようにみえるのだけど...。

mail

builder(ビルダー)

erubis(イー・ルビーズ)

  • 関係:actionpack => erubis
  • HTML の中に Ruby を埋め込むことが出来る 'eRuby' という仕様の実装
  • Ruby 自体に、同様のことをおこなう 'ERB' というライブラリが同封されているが、'ERB' と比べて倍以上高速らしい。

journey(ジャーニー)

rack-cache

  • 関係:actionpack => rack-cache
  • rack アプリケーションに対して、HTTP の Cache-Control や ETag の制御をうまく実行させるようにした gem っぽい。

rack-test

sprockets(スプロケッツ)

arel(アレル)

  • 関係:activerecord => arel
  • ORM と SQL の中間に位置していて、ActiveRecord を支えている gem。
  • 独自の ORM 構築を手助けするためのライブラリらしい。

tzinfo(ティーゼット・インフォ)

i18n(アイ・エイティーン・エヌ)

  • 関係:activesupport => i18n
  • 国際化・ローカライゼーションを受け持っている、Rails でお馴染みの言語対応 gem。


上記以外にも重要そうな gem

multi_json(マルチ・ジェイソン)

execjs

hike(ハイク)

  • 関係:sprockets => hike
  • Ruby から簡単な文字列を使って、ディレクトリ内のファイル検索が可能
  • Sprockets のファイルのロードパス探索等に利用されているっぽい?

sass(サス)


だいたいこんな感じ。