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'
アセットパイプラインや、jquery の Rails アダプター等余分なものが含まれているので、純粋に次のようにしてみる。
## 純粋に 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 フレームワークのコアな処理を受け持っており、Rails は railties を継承した複数の gem の塊と見ることが出来る。
この辺り、しっかりと理解が及んでいるわけではないので、今後調べたい。
また railties は主に、下記の gem に依存している。
- rack-ssl
- rake
- rdoc
- thor
bundler(バンドラー)
アプリケーションの依存関係を管理してくれるツール。
Rails 使いには定番。
actionmailer
Rails 上から email に関する操作を提供するライブラリ部品。
メール送信に関して、controller と view の分離を行ったり、メールの構成、送信、受信等の操作を
ActionMailer を通して画一的に操作することが出来る。
actionpack
Rails 上での MVC アーキテクチャの構築やテストの構成を手助けするなどを行う。
ActionPack の重要な役目の1つとしては、URL リクエストを解析して、適切なコントローラーのアクションを呼び出すこと。
というふうな解説を見る。
あとで解説するが、ActionPack は次の gem に依存している
- activemodel (O/R マッピング)
- erubies (HTML への埋め込み Ruby)
- journey (ルーティングの最適化 gem)
- rack (Ruby 製ウェブアプリケーションのベース)
- sprockets (アセットパイプラインの土台役)
依存している gem を見ていると、ActionPack がどの辺りを引き受けているのか、なんとなく想像がつく。
activeresource
Object に対して RESTful にアクセスするためのものらしいです。
activeresource を使うと、Web API を明示的に用意しなくてもアプリケーション間での同一DBでの通信が可能になる!
activesupport
- ActiveSupport
- Rails に関する雑多なサポートツール郡というイメージ?
以上が、Rails の基本的な構成となっている。
つぎに Rails を支えている各 gem について、1つずつ見ていくことにする。
rack(ラック)
- 関係:railties, actionpack => rack
- 大御所。
- Ruby 製 Web アプリケーションを実装するためのミドルウェア的なもの。
- Web サーバーと Web アプリケーションの中間に位置するような存在。
rack-ssl
- 関係:railties => rack-ssl
- rack アプリケーション構築するうえで HTTP 上の SSL/TLS 通信に必要な処理を受け持ってくれているらしい。
rake(レイク)
- 関係:railties => rake
- ruby で makefile っぽいことが出来るようにするライブラリ
- Ruby スクリプトをタスクとして自由に記述し、任意にそれを実行することを簡単にする
rdoc(アール・ドック)
- 関係:railties => rdoc
- ソースコード上のコメントから、プログラミングドキュメントを生成する定番ツール
thor(ソー)
- 関係:railties => thor
- これがちょっとよくわからない。。なんとなく重要な役割を果たしているようにみえるのだけど...。
- 関係:actionmailer => mail
- ruby からメールを送信するためのライブラリになっている
builder(ビルダー)
- 関係:actionpack, actionmodel => builder
- builde を使うことで、Ruby から構造化された XML を簡単に出力できるようになります。
erubis(イー・ルビーズ)
- 関係:actionpack => erubis
- HTML の中に Ruby を埋め込むことが出来る 'eRuby' という仕様の実装
- Ruby 自体に、同様のことをおこなう 'ERB' というライブラリが同封されているが、'ERB' と比べて倍以上高速らしい。
journey(ジャーニー)
- 関係:actionpack => journey
- Rails のルーティング処理の高速化を実現しているライブラリらしい
rack-cache
- 関係:actionpack => rack-cache
- rack アプリケーションに対して、HTTP の Cache-Control や ETag の制御をうまく実行させるようにした gem っぽい。
rack-test
- 関係:actionpack => rack-test
- rack 向けの、シンプルなテスティングフレームワークだそうです。
sprockets(スプロケッツ)
- 関係:actionpack => sprockets
- Rails 3.1 系以降に導入された、アセットパイプラインの仕組みを支えているライブラリ。
- JavaScript, CoffeeScript, CSS, SASS などをミニファイ、結合したりする。
arel(アレル)
- 関係:activerecord => arel
- ORM と SQL の中間に位置していて、ActiveRecord を支えている gem。
- 独自の ORM 構築を手助けするためのライブラリらしい。
tzinfo(ティーゼット・インフォ)
- 関係:activerecord => tzinfo
- Ruby 上でタイムゾーンをうまく制御するためのライブラリ。
i18n(アイ・エイティーン・エヌ)
- 関係:activesupport => i18n
- 国際化・ローカライゼーションを受け持っている、Rails でお馴染みの言語対応 gem。
上記以外にも重要そうな gem
multi_json(マルチ・ジェイソン)
- 関係:activesupport などいろいろ => multi_json
- Ruby 上で文字列をハッシュに変換したり、ハッシュを json 形式の文字列へ変換したりする
- シリアライズ/デシリアライザー
execjs
- 関係:coffee-script => execjs
- Ruby 上で JavaScript のコードを実行することが出来るライブラリ。
hike(ハイク)
- 関係:sprockets => hike
- Ruby から簡単な文字列を使って、ディレクトリ内のファイル検索が可能
- Sprockets のファイルのロードパス探索等に利用されているっぽい?