Railsの全体像を知ろう:Ruby on Rails3で学ぶWeb開発のキホン(2)(1/2 ページ)
Railsは、機能ごとに異なるコンポーネントで構成されています。Railsの全体像を見渡すために、今回はこのコンポーネントの種類や機能を紹介します。
前回の記事では、Ruby on Railsの基本であるMVCについて紹介し、Railsアプリケーションがどのような構造になっているかや、開発の際にどんなツールを使うかを見ました。さっそくアプリケーション開発の詳細を知りたい方もいることでしょうが、連載第2回目となる本記事では、もう少しだけ全体像についてお話しします。
Ruby on Railsは、機能ごとに異なるコンポーネントで構成されています。このため、デフォルトのRuby on Railsをそのまま使うだけでなく、目的に応じて一部のライブラリを入れ替えて使うといった、大きな粒度でのカスタマイズが可能になっています。一部を入れ替えて使うことも含めると、Ruby on Railsを利用できる場面はかなり広いのではないかと思います。このような可能性を念頭においておくために、大まかな構成要素を知ることは役に立つはずです。また、開発を進める上で何か詰まったり深く知りたいことに遭遇したとき、対象のコンポーネントが何であるかが分かることも重要です。
そこで、本記事では、Ruby on Railsを構成する各部品の概要を解説します。また、その中でも、もっとも汎用的で、Railsを使っていれば必ずお世話になると思われるActiveSupportライブラリについて、よく使うメソッドをご紹介します。
それでは、まずRailsの基本的な構成について見ていきましょう。
Railitieが数多くのライブラリを組み合わせる
Railsでは、Railitieというライブラリが他の数多くの独立的なライブラリを組み合わせてフレームワークを形成します。Railsを構成するライブラリ群は、機能に応じて抽象化が図られている部分もあります。例えば、モデル部分を担当する抽象化レイヤはActiveModelですが、標準構成でそれを実現するライブラリはActiveRecordであるという具合に、同じ機能に対しても抽象度の違いで異なるライブラリが用意されます。このような箇所では、実現レイヤのライブラリを別のものに置き換えたり、自分で新しいライブラリを作って使うといったことも可能です。
また、Railsアプリケーションは、WebサーバとRubyアプリケーションの間の標準的なインターフェイスであるRackに準拠したアプリケーションとなるので、Rackライブラリが必要です。この他、gemのライブラリ管理に使われるBundlerなどにも依存します。
主要なライブラリを、その位置付けと抽象化の度合いで整理すると、次のようになります。
- Railsの前提環境
- Webインターフェイス … Rack
- ビルド・タスク実行 … Rake
- Railsの中核 … Railtie
- コントローラ層
- 抽象化レイヤ … AbstractController
- 実現レイヤ … ActionController(Web用)、ActionMailer (メール用)
- モデル層
- 抽象化レイヤ … ActiveModel
- 実現レイヤ … ActiveRecord
- ビュー層 … ActionView
- ルーティング … ActionDispatch
- ユーティリティ … ActiveSupport
- Webサービス … ActiveResource
- 国際化 … I18n
- ツール系
- 自動テスト … test/unit
- gemライブラリ管理 … Bundler
Railsを構成する主なライブラリの解説
それでは、前述の分類を念頭に、標準構成のRailsで使われるライブラリの中から特に重要と思われるものを順に見ていきましょう。解説するライブラリの一覧を下記の表にまとめました。ここでは前述の分類にあがったライブラリだけでなく、さらにその中から使われるライブラリにも触れます。
ライブラリ名 | 機能 |
---|---|
ActionMailer | メールの送受信を行うための機能を提供します |
ActionMailerが使用するメールの送受信を行うためのライブラリです | |
ActionController | ユーザーからのリクエストを処理する機能を提供します |
ActionView | HTMLやXMLを生成するための機能を提供します |
Erubis | HTMLを生成する際に使われるテンプレートエンジンです |
ActiveRecord | データベースとのやりとりを行うための機能を提供します |
Arel | ArelActiveRecordが使用するライブラリで、SQLをプログラムとして自然な形で記述するためのDSLを提供します |
ActiveModel | ActiveRecordのデータベースに関連する部分以外の機能を切り出したものです |
ActiveResource | RESTfullなAPIをActiveRecordと同じようなインターフェイスで扱うための機能を提供します |
ActiveSupport | Rubyをより便利にするための機能拡張を寄せ集めたライブラリです |
Railtie | Railsの核をなすコンポーネントで、Railsを拡張するための機能を提供します |
Bundler | Railsアプリケーションで使用するgemライブラリの管理を行うためのライブラリです |
Rack | Webサーバとアプリケーションフレームワークとの間の共通のインターフェイスを提供します |
I18n | Railsアプリケーションの国際化を行うための機能を提供します |
Railsで使われる主なライブラリとその機能 |
ライブラリの詳しい説明
ActionMailer
メールの送受信を行うための機能を提供するコンポーネントで、ユーザーにメールを送信する時などに使用します。使用する際は、メーラーと呼ばれるクラスとメール本文を生成するためのテンプレートを作成します。
ActionMailerが使用するメールの送受信を行うためのライブラリです。Rails3より前のバージョンではTMailというライブラリが使われていました。
ActionController
MVCのC(コントローラー)に相当するコンポーネントで、ユーザーからのリクエストを処理するための機能を提供します。モデルの機能を呼び出したり、ビューの表示、リダイレクトなどの処理を行います。前述のActionMailerがメール用のコントローラという位置付けであるのに対して、ActionControllerはWeb用のコントローラという位置付けになります。
ActionView
MVCのV(ビュー)に相当するコンポーネントで、主にHTMLやXMLを生成するための機能を提供します。HTML要素を生成するためのさまざまなヘルパーメソッドが用意されており、効率良くビューを実装できるようになっています。
Erubis
Railsのデフォルトのテンプレートエンジンで、ビューを出力する際に使われます。HTMLの中にRubyのコードを埋め込む形でテンプレートを記述します。Railsでは、この他にもHamlというテンプレートエンジンがよく使われます。
ActiveRecord
MVCのM(モデル)に相当するコンポーネントで、データベースとのやり取りを行います。いわゆるO/Rマッパーで、Rubyのオブジェクトとデータベースにおけるレコードとを結び付けます。
アプリケーションによっては、データベースを使わなかったり、データベースとのやり取りにActiveRecordとは別のライブラリを使う場合もあります。そういった場合のために、“rails new”コマンドには“-O”(または“--skip-active-record”)オプションが用意されています。このオプションを付けるとActiveRecord関連のファイルが生成されなくなります。
Arel
ActiveRecordが使用するライブラリで、SQLをプログラムとして自然な形で記述するためのDSLを提供します。
ActiveModel
Rails3から新たに登場したコンポーネントで、ActiveRecordのデータベースに関連する部分以外の機能を切り出したものです。ActiveRecordを継承していないクラスにバリデーションなどの機能を簡単に追加することができるようになっています。
ActiveResource
Web上のRESTfulなAPIをActiveRecordと同じようなインターフェイスで扱うための機能を提供します。これにより、他システムとの連携がシンプルになります。
ActiveSupport
Rubyをより便利にするための機能拡張を寄せ集めたライブラリです。例えば、日時や文字列の操作など頻繁に行う操作を簡潔に記述できるようにしてくれます。Railsアプリケーション以外からもActiveSupportは単独で使えます。ActiveSupportについては後で詳しく説明します。
Bundler
Railsアプリケーションで使用するgemライブラリの管理を行うためのライブラリです。アプリケーションに必要なgemライブラリは、すべてBundlerで管理およびインストールします。Bundlerでインストールしていないライブラリはアプリケーションからは使用できません。
Railtie
Railsの核をなすコンポーネントで、Railsを拡張するための機能を提供します。
Rack
Webサーバとアプリケーションフレームワークとの間の共通のインターフェイスを提供します。Railsの他にも、Sinatra、Merbなど、さまざまなWebアプリケーションフレームワークがこのRackに準拠して実装されています。
I18n
Railsアプリケーションの国際化を行うために必要なライブラリで、 “Internationalization”の略です(iとnの間に18文字あります)。アプリケーションの各種文言を言語ごとに、出力する文字列を出し分ける際に使われます。
Copyright © ITmedia, Inc. All Rights Reserved.