rails.20110405

39
Ruby on Rails とは何か

Upload: -

Post on 19-Jan-2015

3.219 views

Category:

Technology


0 download

DESCRIPTION

第21回あしたのオープンソース研究所 Ruby on Rails 座談会資料

TRANSCRIPT

Page 1: Rails.20110405

Ruby on Rails とは何か

Page 2: Rails.20110405

Ruby on Rails とは �

�  オープンソースのWebアプリケーションフレームワーク �  RoRまたは単にRailsと呼ばれる。 �  Rubyで書かれている。 �  MVCアーキテクチャに基づいて構築されている。

�  Railsの特徴 「実アプリケーションの開発を他のフレームワークより少ないコードで簡単に開発できるよう考慮し設計されている。」Wikipedia

Page 3: Rails.20110405

Railsの歴史

�  David Heinemeier Hanssonが開発 プロジェクト管理ツール“basecamp”の開発に用いられた知見やコードを抽出し、一般化することにより作成された。

�  2004年7月 最初のバージョン公開 �  2005年12月13日 バージョン1.0リリース �  2007年12月7日 バージョン2.0リリース �  2010年8月29日 バージョン3.0リリース �  最新版は2011.2.27リリースのバージョン3.0.5

Page 4: Rails.20110405

Railsの実用例

他多数⇛ http://rubyonrails.org/applications

Page 5: Rails.20110405

Rails の特徴

「Rails は Webの新しいデファクトスタンダードを

追いかけるのではない。 むしろそれを定義する。」

『RailsによるアジャイルWebアプリケーション開発第2版』p.2

�  Ajax �  REST

Page 6: Rails.20110405

Rails の哲学

DRY (Don’t Repeat Yourself) 同じことを繰り返さない

�  システムのあらゆるピースは1箇所にのみ記述される。

CoC (Convention over Configuration) 設定より規約

�  記述すべき箇所はMVCアーキテクチャの規約が提案してくれる。

Page 7: Rails.20110405

RailsのMVCアーキテクチャ �  Model

「データベース駆動のMVC WebアプリケーションではModelはRDBMSのテーブルを表すクラスを意味する。 RailsではActive Recordを通じてModelクラスを扱う。通常プログラマはActiveRecord::Baseクラスのサブクラスを作る必要がある。そうすることでRDBMSのどのテーブルを使うべきか、どういったカラムを持つべきかを自動的に決定してくれる。」

�  View 「MVCではViewは表示のためのロジックであり、コントローラクラスからのデータをどのように表示するかを規定している。 WebアプリケーションではHTML内に若干のコードを埋め込むことで実現される。」

�  Controller 「MVCではControllerはRailsのAction Packに含まれるアプリケーションコントローラクラスによって扱われる。 WebベースMVCアプリケーションではWebブラウザを操作するユーザによりコントローラのメソッドが起動される。」

Wikipediaより引用

Page 8: Rails.20110405

Active Record

�  Active Record = Railsが提供するORM層 「クラス定義において、データベースから読み取るべき属性名等を指定する必要はない。ActiveRecordはRDBMSの表定義から自動的にその情報を取得する。従ってプログラムとRDBMSの両方にそれを定義するというような冗長な作業を行う必要はない。」

Wikipedia 2011.4.4より引用

�  ORM(Object-Relational Mapping) �  データベーステーブルをクラスにマッピング

Page 9: Rails.20110405

Action Pack

�  Action Pack = Action Controller + Action View �  Action Pack はRailsアプリケーションの心臓部 �  この2つのモジュールで、受け取ったリクエストを処理し、レスポンスを生成して返す。

Page 10: Rails.20110405

Action Controller

Page 11: Rails.20110405

Action View

�  Helper

�  レイアウト

�  コンポーネント

Page 12: Rails.20110405

RESTful なwebサービスとは何か

Page 13: Rails.20110405

REST(Representational State Transfer)の定義

�  RESTは「ウェブのような分散ハイパーメディアシステムのためのソフトウェアアーキテクチャのスタイルのひとつ」(出典Wikipedia)

�  2000年にHTTPプロトコル規格の主要著者の一人であるRoy Fieldingがウェブについて書いた博士論文で初めて使った。

�  RESTは初めはアーキテクチャの原則と制約の集まりを指していたが、次第に、XMLやHTTPを使った簡易なウェブベースのインターフェイスのうち、WebサービスのSOAPプロトコルのような MEP(Message Exchange Pattern; SOAPノード相互のメッセージ交換のパターンを確立するための雛型)ベースの特別な抽象化をしないもののことを、大まかに意味する用語として使われるようになった。(出典Wikipedia)

Page 14: Rails.20110405

RESTという用語の使われ方

RESTは次に述べるように2つのやや異なる意味で使われている。

�  FieldingのRESTアーキテクチャスタイルの原則に合わせたWebサービスシステム。

�  RPCスタイルに合わせた簡易な XML+HTTP インターフェイスを採用したシステム(SOAPは使わない) 。

出典:Wikipedia

Page 15: Rails.20110405

RESTful なwebサービスの特徴

�  シンプルな動詞セットで多様な名詞を操作する

�  動詞=HTTPメソッド �  GET �  PUT �  POST �  DELETE

�  名詞=リソース �  URLによってリソースに名前を付ける

Page 16: Rails.20110405

RESTful なwebサービスの意味

�  Webを「分散プログラミングのプラットフォーム」と解釈する。

�  Webを構成する要素はすべて「リソース」だと解釈する。

�  RESTは新しいリソースをWebというプラットフォームにシームレスに統合するための方法or視点or考え方である。

Page 17: Rails.20110405

COMやCORBAとどこが違うか

�  「Webサービス」はCOMやCORBAでも実装できるが…

�  それらは「Webを成功させるためのすべての機能を一から作り直すか、それらを無視するかである。」『RESTful Webサービス』p.ix

�  「そのままのHTTPで問題なく処理できるジョブに対し、プログラマや企業が大Webサービスを導入することはしょっちゅうある。これにより、HTTPは(中略)膨大なXMLペイロードのトランスポートプロトコルになり下がってしまう。結果として得られるサービスは極端に複雑で、デバッグが不可能で、クライアント側にサーバー側とまったく同じ構成がなければうまくいかない。」同書p.xii

Page 18: Rails.20110405

SOAP vs. REST

�  SOAPとRESTに関する論争…2000~2003

�  2002年 Amazon Webサービス登場 �  SOAP形式とREST形式の両方でサービスを提供 �  利用比率は SOAP形式:REST形式=20:80 �  これでSOAP対RESTの論争に火がついた

�  2004年以降のWeb2.0でGoogleやAmazonがRESTを選択 �  RESTのシンプルさがマッシュアップに有利だった �  SOAPは標準化に手間取り実装が先行>相互運用性欠如 �  結論としてRESTの勝利に終わる

出展:山本陽平『Webを支える技術』pp.22-24

Page 19: Rails.20110405

RESTfulアプローチの特徴1

�  ネットワーク設計者にとっての利点「いつどこでリクエストに対するレスポンスをキャッシュできるかネットワークを設計した人にわかるのが、RESTfulなアプローチの特徴です。RESTfulなアプローチでは、負荷をネットワークに分散したり、遅延を軽減しながらパフォーマンスや障害回復力を向上させたりすることができます。」 『RailsによるアジャイルWebアプリケーション開発第2版』p.378

Page 20: Rails.20110405

RESTfulアプローチの特徴2

�  アプリケーション開発者にとっての利点「RESTによってもたらされる制約によって、アプリケーションが書きやすくなり、保守も容易になります。RESTfulなアプリケーションでは、リモートでアクセスできるサービスの実装に気をもむ必要はありません。その代わり、リソースセットに対する標準の(シンプルな)インタフェースが用意されています。」 『RailsによるアジャイルWebアプリケーション開発第2版』p.379

Page 21: Rails.20110405

公開されたRESTfulアプリケーション

�  Amazon.com …デベロッパーインターフェイスをRESTバージョンとSOAPバージョンの両方で提供(RESTバージョンがトラフィックの大部分を占める)

�  eBay…REST デベロッパーインターフェイスを提供

�  Yahoo!…REST デベロッパーインターフェイスを提供

�  Zope のオブジェクト出版システム

�  他多数  

出典:Wikipedia

Page 22: Rails.20110405

Rails以外のREST向けフレームワーク

�  Restlet(Java) RESTfulアプリ構築のための軽量(Lightweight)Javaフレームワーク

�  Django(Python) データベース主体の複雑なWebサイトを簡単に構築するためのMVCベースのフレームワーク

�  BEAR(PHP) リソース指向、ページ指向のPHP5専用イベント駆動型DI Webアプリケーションフレームワーク

Page 23: Rails.20110405

Rails 3 の紹介

Page 24: Rails.20110405

Rails3 の新機能

�  Action Dispatch

�  Bundler & Action Mailer

�  Active Relation & Active Model

�  Cross-site scripting & Unobtrusive JavaScript

�  New Action Controller

Page 25: Rails.20110405

Dive into Rails 3

Page 26: Rails.20110405

Action Dispatch

�  Action Dispatch contains a new syntax for routing which is even more concise and readable.

Page 27: Rails.20110405

Bundler & Action Mailer

�  Rails 3 ships with Bundler, a Ruby library that makes Dependency Management a painless process.

Page 28: Rails.20110405

Active Relation & Active Model

�  Active Relation gives you a more powerful syntax for pulling data into your application. We'll learn about the new syntax and discover how to leverage Active Model to enhance our plain old Ruby objects.

Page 29: Rails.20110405

Cross-site scripting & Unobtrusive JavaScript �  Cross-site scripting (XSS) protection has been improved

in Rails 3. Html 5 standards have also been adopted to encourage unobtrusive javascript and allow for seamless integration of any Javascript Framework.

Page 30: Rails.20110405

New Action Controller

�  The Action Controller stack has been completely overhauled to allow for increased modularity and code reuse. We'll learn about Abstract Controller and the new respond_to syntax to help simplify RESTful controllers.

Page 31: Rails.20110405

簡単なデモ

Page 32: Rails.20110405

Railsのインストール

�  Ruby �  Rails用の推奨バージョン 1.8.7 or 1.9.2 �  Mac OS X 10.5 以降はデベロッパーツールに含まれている

�  RubyGems �  Rubyのパッケージマネージャ

�  Rails �  gem install rails

Page 33: Rails.20110405

Railsのアップデート

�  Mac OS X では出荷時から Ruby と Rails がインストール済みだがバージョンが旧いので Rails と RubyGems を更新 �  sudo gem update --system �  sudo gem install rails

�  これだけで必要なパッケージ類をfetchしてインストール �  gem list …インストール済みパッケージを一覧表示 �  gem server �  http://localhost:8088 …ブラウザでパッケージを一覧表示

Page 34: Rails.20110405

サンプルアプリケーションの作成

サンプルアプリケーション名 expenses

�  rails new expenses

�  cd expenses

�  rails server

�  http://localhost:3000

Page 35: Rails.20110405

ディレクトリ構成

Page 36: Rails.20110405

Hello, Rails!

サンプルアプリケーション名 Hello, World!

�  rails generate controller Say

�  cd expenses

�  rails server

�  http://localhost:3000

Page 37: Rails.20110405

処理の基本的な流れ

1.  ユーザがアプリケーションを呼び出す。

2.  指定したURLがRailsによって解析される。

3.  URLパスの次に指定されたアクション名

4.  結果を表示するためのテンプレートを検索する。

5.  ERbを使用してこのテンプレートを処理する。

6.  結果がブラウザに返されてリクエストの処理が完了する。

Page 38: Rails.20110405

Manifesto for Agile Software Development

We are uncovering better ways of developing software by doing it and helping others do it.

Through this work we have come to value:

�  Individuals and interactions over processes and tools

�  Working software over comprehensive documentation

�  Customer collaboration over contract negotiation

�  Responding to change over following a plan

That is, while there is value in the items on the right, we value the items on the left more.

http://agilemanifesto.org/

Page 39: Rails.20110405

アジャイルソフトウェア開発宣言

私たちは、ソフトウェア開発の実践あるいは実践を 手助けをする活動を通じて、よりよい開発方法を

見つけだそうとしている。この活動を通して、私たちは 以下の価値に至った。

�  プロセスやツールよりも個人と対話を、

�  包括的なドキュメントよりも動くソフトウェアを、

�  契約交渉よりも顧客との協調を、

�  計画に従うことよりも変化への対応を、

価値とする。すなわち、左記のことがらに価値があることを 認めながらも、私たちは右記のことがらにより価値をおく。

出典 http://agilemanifesto.org/iso/ja/