連載
» 2011年03月09日 00時00分 公開

Ruby on Rails3で学ぶWeb開発のキホン(2):Railsの全体像を知ろう (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 メールの送受信を行うための機能を提供します
Mail 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

 メールの送受信を行うための機能を提供するコンポーネントで、ユーザーにメールを送信する時などに使用します。使用する際は、メーラーと呼ばれるクラスとメール本文を生成するためのテンプレートを作成します。

Mail

 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文字あります)。アプリケーションの各種文言を言語ごとに、出力する文字列を出し分ける際に使われます。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。