Developerサイトに移行します。見た目やトピックエリアなど更新されますが、開発者に必要とされるコンテンツを引き続き提供していきます。RailsはWeb開発に新旋風を巻き起こしています。基本テクノロジーの復習から始めましょう。インタープリタ型スクリプト言語であり、Perlと同様に、テキスト・ファイルを処理し、システム管理タスクを実行するための多くの機能を備えています。Railsは、実世界のアプリケーションをより簡単に、より少ないコードで書くためのフルスタックのRubyのオープン・ソースWebフレームワークです。フルスタックのフレームワークとは、Railsのすべての層が連携するように組み立てられているので、開発者が自分で組み立てる必要がなく、最初から最後まで単一の言語を使用できることを意味します。Railsでは、すべてのもの(テンプレートから制御フロー、ビジネス・ロジックまで)がRubyで書かれています。Railsでは、構成ファイルと注釈よりも、リフレクションとランタイム拡張が好んで用いられます。この記事では、Railsのコンポーネントを説明し、その仕組みを示します。RailsについてRailsについて最初に理解すべきことは、そのモデル/ビュー/コントローラー(MVC)アーキテクチャーです。このアプローチはRailsに固有のものではなく、他のプログラムとは対照的にWebアプリケーションにも見られるものですが、RailsのMVCの考え方は非常に明確です。開発者がMVCアプローチから脱線すると、そのパラダイムに従った場合に比べて、Railsの有用性は著しく損なわれます。モデルRailsアプリケーションのモデル部分は、基本的に、使用するデータベースです。事実、いろいろな意味で、Railsアプリケーションはリレーショナル・データベース管理システム(RDBMS)内のデータに対して直截な方法で操作を加えるための手段に過ぎません。Railsの中心コンポーネントはActiveRecordクラスです。これは、リレーショナル・テーブルをRubyオブジェクトにマップし、その結果、コントローラーによって操作され、ビューに表示されるデータにマップします。Railsアプリケーションでは、広く普及しているMySQLデータベースが使用されることが多いようですが、IBM®DB2®など、他の多くのRDBMS用のバインディングもあります。必要であれば、アプリケーション・モデル内で追加の検証を行ったり、データ・リレーションシップを強制したり、その他のアクションをトリガーするRubyコードを追加することができます。アプリケーションのapp/models/ディレクトリー内のRubyファイルは、ActiveRecordのさまざまな検証メソッドを呼び出すことができます。モデル・コードをスタブのままにしておいて、データを保持するRDBMSの制約だけに依存することもできます。この例で筆者が開発したアプリケーションは、次のようなスケルトン・モデル・コードしか含んでいません(少なくとも最初は)。ActiveRecord::Baseendコントローラーコントローラーは、アプリケーション・ロジックを抽象的な形で実行します。アプリケーションのapp/controllers/ディレクトリー内のRubyスクリプトがモデル・データを変数にロードして、再び保存し、操作します。コントローラーは、データが具体的にどのように表現され、どのようにユーザーによって入力されるかということには関知しません。一般的なMVCパラダイムでは、これにより、ユーザーは同じコントローラーと複数のスタイルの対話を行うことができます。ネイティブGUI、Webインターフェース、視覚障害者用のスピーチ・インターフェースなどのすべてが同じコントローラーと対話できます。Railsはそのままではそれほど汎用性が高いわけではありません。Webページ内のデータの提供と収集を主な目的としています。それにもかかわらず、コントローラー・コードには関係なく、Webページのレイアウト(色、フォント、テーブル、スタイルシートなど)を変更できます。ビューRailsのビューは、Rubyコードを置く場所です。Railsは、純粋なHTMLを埋め込みRubyコードに結びつける.rhtmlファイル用の非常に便利なテンプレート言語を含んでいます。Railsアプリケーション画面のごく表面的な外観は、一般にCSSスタイルシートによって制御されます。.rhtml形式は、HTMLの拡張です。実際には、単純なHTMLファイル自体も有効なRHTMLテンプレートですが、RHTMLによるスクリプティング・コントロールの省力化という点ではあまりメリットがありません。RHTMLは、単にHTMLにコードを埋め込む手段ではなく、本当の意味でのテンプレート形式であり、はるかにパワフルなアプローチです。PHPを使い慣れている人は、PHPそのものとSmartyテンプレートの違いを考えてみてください。埋め込みスクリプトは、インタープリタで解釈されないHTMLとコードを混ぜ合わせたものにすぎません。クライアントに対して何かを出力するときに、プリント文を発行するのは、やはりコード部分です。これに対して、テンプレート・エンジンは、条件、ループ、その他のロジックを拡張HTMLマークアップの一部として表現できるカスタム・タグ・セットをHTMLに追加します。コードの生成Railsが提供するツールは、基本的にコード・ジェネレーターのセットです。筆者は、厳格なワークスペースとIDEの使用を余儀なくされる開発環境よりも、このアプローチの方がはるかに好きです。Railsは開発者のやり方に口を挟むことがなく、しかも人手によるプログラミングの作業の大部分を省力化してくれます。少なくとも、「無料」の足場(scaffold)を提供してくれるので、必要な部分だけ人手でコーディングすれば済みます。足場の概念は、Railsの中心的概念です。単純なアプリケーションであれば、RailsにクライアントHTMLページを実行時に動的に生成させることによって、カスタム・コーディングをほとんどなくすことができます。コード生成の最初のパスでは、生の足場だけを作成します。後で、より具体的なコントローラー、ビュー、およびモデルを生成して、カスタマイズできます。始めからそれほど多くのものを生成する必要はありません。Railsは、固定した、かなり常識的なファイル編成に依存していますが、この編成は比較的厳格です。他のファイル編成やコード編成を使おうとするのは、Rails環境にけんかを売るようなものです。Railsが提供する編成を受け入れるべきでない理由はありません。Rubyファンが好んで言うように、その大部分は「脳にフィット」します。ディレクトリーの名前と編成は、あなたがゼロからフレームワークを設計する場合に選ぶ編成にかなり近いはずです(少なくとも、「Ruby流」の考え方をした場合は)。RailsのWebサイトには、単純なRailsアプリケーションの作成方法を手順を追って説明したチュートリアルがいくつかあります(参考文献を参照)。Railsアプリケーション構築の正しい始め方には一定の作法があるので、ここで示すサンプル・アプリケーションもチュートリアルに似ています。この紹介記事は比較的短いので、まとまったチュートリアルに沿って基礎の理解を固めることをおすすめします。このサンプル・アプリケーションは、基本的なアドレス・ブックの例です。アプリケーションを作成するために一般的な以下のステップを示しています。モデルを生成します(MySQLデータベースとテーブルを作成します)。アプリケーションを生成します(基本コードとディレクトリーの生成を含みます)。Railsを実行します(データベース・アクセスを設定します)。コンテンツを作成します(足場モデルおよびコントローラーの生成と、足場を使用するようにコントローラーに指示することも含みます)。各ステップを詳しく見ていきましょう。AddressBookモデルの生成どんなアプリケーションについても、最初にしなければならないことは、データを入れるデータベースの作成です。実際には、このステップを最初に行う必要はありませんが、すぐに必要になります。コードが自動的に生成される場合でも、アプリケーション・コードの前にデータベースを作成すべきなのは明らかです。MySQLでデータベースを作成して、このデータベース内に最初のテーブルを作ります。(MySQLまたは別のRDBMSを稼働させる方法については、他の資料を参照してください。)ここでは、MySQLがインストールされていて、使用可能になっていると仮定します。mysqlこの最初のテーブルでは、注意しなければならないことがいくつかあります。重要なことは、すべてのテーブルにidという名前のid列が必要なことです。Railsは、さまざまな記録管理タスクや参照タスクに主キー列idを使用します。created_onフィールドおよびupdated_onフィールドは必須ではありませんが、これらのフィールドを指定すると、Railsが自動的に保持します。ほとんどの場合、これらのタイムスタンプを使用しても問題はありません。したがって、ここで追加する唯一の「本当の」データは、アドレス・ブックの連絡先の名前です。Railsでは、さまざまなものの単数形と複数形の名前の使い方も少し変わっています。さまざまな項目は、その用途とコンテキストに応じて、単数形と複数形で名前が変わります。テーブル名には複数形を使用する必要があります。筆者は不規則変化の複数形の単語で実験したことはありませんが、datumとdataのような単語を使用すると、Railsがエラーになるかもしれません。対話の相手であるデータベースができたので、次にAddressBookアプリケーションを作成します。最初のステップは、Railsを実行して、基本的なディレクトリーと足場コードを生成することです。script/server[...]Railsの実行AddressBook/ディレクトリーと必要な子ディレクトリーを作成したら、最小限の初期設定を行う必要があります。YAML構成ファイルを次のように変更して、データベースを設定します。password_if_needed最後に、データを提供する必要があります。Railsには独自の単機能WebサーバーWEBrickが付属していて、この実験に最適です。Webサイトの説明に従ってください。[powerpc-darwin7.8.0]小さなコンテンツの作成ここまでのステップで、WEBrickポート上のウェルカム・ページを表示するには十分のはずです。筆者のローカル・システムでは、http://gnosis-powerbook.local:3000/を見ることができます。カスタム・データベースを操作するために、もう少しだけコードを生成する必要があります。これはgenerateスクリプトで行うことができます。このスクリプトは、AddressBook/アプリケーション・ディレクトリーに作成されています。app/helpers/contact_helper.rbここでは、該当するテーブル名に複数形であるcontactsではなく単数形のcontactを使用する必要があるので注意してください。次に、生成されたもう1つのファイルを少しだけ編集して、コントローラーに足場を使用するように指示する必要があります。:contactendこれで、http://rails.server/contact/などのURL(筆者のテスト・ケースでは、http://gnosis-powerbook.local:3000/contact/)でデータベースの内容を表示したり変更することができるようになります。小さなデータを入力した後は、図1と図2のようになります。前のコードで、データベースの表示と変更のための十分に実用的なインターフェースが作成されますが、(前の例に示されているような)書式化、プレゼンテーション、およびビジネス・ロジックのすべては、高度な知識がなくても、Railsによって動的に行われます。カスタムなものを作成するためには、もう少しコードを生成する必要があります。ここで必要なことは、Railsが自動的・暗黙的に生成する足場を明示的に書き出させて、変更を加えられるようにすることです。app/views/contacts/edit.rhtmlさて、もう少し作業が必要なので、少しだけ手を加えてみましょう。(このコードでは複数形のcontactsに戻っています。理由はよくわかりません。いうものだと思うしかありません。)CSSで色とフォントを変えてみましょう。}コードはできましたが、contacts_controller.rbは何をするのでしょう。前のコードで見たcontact_controller.rbよりも、アクションが明示的かつ構成可能です。部分的に、コントローラーは次のようになります。end約束どおり、コントローラーの主な仕事は、データを変数にロードすることです。オブジェクトContactは、モデルが提供するActiveRecordオブジェクト/リレーショナル・マッピングです。変数@contactsまたは@contactには、適切なメソッドでデータが与えられます。メソッド自体は、http://rails.server/contacts/show/2などのURLによって参照されます(このURLは、idが「2」の連絡先を表示します)。この例のコントローラーは、最終的にビューに接続します。コントローラーによって変数にロードされたデータを利用するRHTMLファイルに接続します。listビューの一部を以下に示します。%>[...]メソッドContactsController.listは変数@contactsをロードして、RHTML内のフロー制御タグが配列から個々のレコードを抽出します。最初のモデルに含まれていたのは、連絡先の名前だけでした。メールなど、実際の連絡先データを含むようにモデルを拡張する紙面の余裕がありません。一般に、このようなデータは、子テーブルに格納されて、外部キーでcontactsテーブルと関連付けられます。Railsモデルは、次のようなカスタム・コードによってリレーションを示します。:contactend最後に、データ・モデルに少しだけ手を加えて、それがアプリケーションにどのような影響を与えるかを見てみましょう。mysql基本モデルhttp://rails.server/contact/(足場の舞台裏バージョン)を変更したので、後は簡単な調整を加えるだけです。コントローラーとビューは、モデルに基づいて完全に自動生成されます。http://rails.server/contacts/にあるアプリケーション・バージョンには、カスタマイズしたファイルがあるので、完全自動化はできません。listビューは、テンプレート・ループの一部としてContact.content_columnsを含んでいるので、どんな列であれ、すべての列を自動的に探し出します。editなど、他のビューはすでに生成されているので、新しいデータ・フィールドを追加する必要があります。%>さて、カスタマイズしたアプリケーションはどうなったでしょうか。デフォルトとの違いはそれほどありませんが、図3と4で変更箇所を見ることができます。変更後の連絡先の編集クリックして大きなイメージを見るまとめRailsを使用すると、柔軟性のあるWebアプリケーションを非常に短時間で開発することができます。この記事では、Railsでの作業がどのようなものか、ほんの少しだけ紹介しました。完全なフレームワークには、Webベースのアプリケーションでよく使用されるアクションを実行するための便利なクラスとメソッドが多数含まれています。Railsの最もよい点は、必要なサポート・コードのすべてが付属しているので、「Rails流の考え方」を身につけられることです。これは、作業対象となる生の材料を与えるだけの他のツールキットやフレームワークにはない大きな利点です。Rails開発は、漠然としたアイデアから完全に機能するWebアプリケーションへの明確な道筋を示してくれます。WebサーバーとRubyを使ってゲストブックWebアプリケーションを作る方法を解説しています。Railsのホームページには、入門用のチュートリアルや案内、ダウンロード可能なソースやドキュメンテーションなどが用意されており、Rubyの手始めとして最適です。Driversのページを見てください。この10分間のビデオは、誰かがRubyベースのWebアプリケーションを開発する場合の、実際の様子を紹介しています。Wikipediaには、MVC方式のアーキテクチャーに関して、素晴らしい項目が挙げられています。BookstoreのLinuxセクションでは、Linux関係の書籍が割り引きで購入できますので、ぜひご利用ください。softwareを使って革新してください。developerWorksから直接ダウンロードすることができます。コメントコメントを登録するにはサインインあるいは登録してください。