Ruby on Rails入門
Download
Report
Transcript Ruby on Rails入門
Ruby on Rails入門
2007-08-08
稚内北星学園大学
安藤 友晴
Ruby on Rails 概説
Ruby on Railsとは何か
MVCアーキテクチャによるWebアプリケー
ションフレームワーク
プログラミング言語としてRubyを利用
– 名前でわかるけど
フルスタック
– Web周りからDB周りまで
諸元
作者
– David Heinemeier Hansson
– 略して “DHH” と呼ばれることが多い
ライセンス
– MITライセンス
歴史
– 2004年7月
– 2005年12月13日
– 2007年3月14日1.2
公開
1.0
DEMO
Ruby on Railsの考え方
Convention over Configuration
– CoC
– 「設定よりも規約」
Don't Repeat Yourself
– DRY
– 「同じことを繰り返さない」
MVCアーキテクチャ
(Model-View-Controller)
MVCアーキテクチャ
(Model-View-Controller)
Model
View
Controller
Railsの構成要素
ActiveSupport (Rubyクラスの拡張)
ActionPack
– ActionView (View)
– ActionController (Controller)
ActiveRecord (DB接続, Model)
ActiveWebService (Webサービス)
ActionMailer (メールの送受信)
railties (周辺ライブラリ・ツール)
環境構築 (Windows版)
1. Rubyのインストール
Windowsなら One-Click Ruby Installer を
利用すると楽
http://rubyforge.org/projects/rubyinstalle
r/
ruby186-25.exe をダウンロード
ダブルクリックしてインストール開始
2. RubyGemsのインストール
RubyGemsはRubyのパッケージ管理システム
One-Click Ruby Installer を使っていれば既にイ
ンストールされている
そうでない人は下記サイトからダウンロード
– http://rubyforge.org/projects/rubygems/
3. PATHを通す
<Rubyのインストール先>/bin ディレクトリに
PATHを通しておく
RubyGemsを別途インストールしている場合には
そこにもPATHを通す
ruby -v コマンドの実行結果が次のようになれば
OK
$ ruby -v
ruby 1.8.6 (…)
$
4. Railsのインストール
次のコマンドでRailsをインストール
– gem install rails --include-dependencies
– Rails(と関連するソフトウェア)がインストールされる
5. MySQLのインストール
rootユーザの再設定が必要
文字コードはUTF-8で
詳細は別紙プリントを参照
Ruby超特急
Rubyとは
「まつもと ゆきひろ」氏が作成したプログラ
ミング言語
1995年に発表
オープンソースソフトウェア
「オブジェクト指向スクリプト言語」
Rubyを使った「Ruby on Rails」によって、最
近一躍有名に。
http://www.ruby-lang.org/
ビューとコントローラ
やりたいこと
http://localhost:3000/hello/input にアクセ
ス
名前を入力すると
http://localhost:3000/hello/greeting で挨
拶してくれる
データベースは利用しない
Railsのプロジェクト作成
以下のコマンドを入力して、helloというプロ
ジェクトを作成する
– andoh$ rails hello
コントローラの作成
hello ディレクトリに移動して、次のコマンド
を実行
– andoh$ ruby script/generate controller hello
input greeting
hello というコントローラと、input と greeting
というアクションを作成する。
生成された
app/controllers/hello_controller.rb
# コントローラ名は Hello + Controller
# ApplicationControllerを継承
class HelloController < ApplicationController
#inputアクション
def input
end
# greetingアクション
def greeting
end
end
URLとコントローラ
http://localhost:3000/hello/input
http://localhost:3000/hello/greeting
hello がコントローラ名
inputとgreetingがアクション名
# コントローラ名は Hello + Controller
class HelloController < ApplicationController
#inputアクション
def input
end
# greetingアクション
def greeting
end
end
Railsアプリケーションの動作
1.
2.
3.
4.
5.
DispatcherがRequestを受け取る (HTTP)
コントローラとアクションを決定
コントローラ中のアクションが処理
ビューを処理
ブラウザにResponseを返す (HTTP)
Railsのビュー
eRubyフォーマットの実装であるERBが担
当
– eRubyはRubyのテンプレートエンジン
“(アクション名).rhtml” というファイル名
サーバを起動する
ruby script/server コマンドを実行
WEBrick という Rails組み込みのWebサー
バが起動される
– デフォルトでは3000ポートで起動
アクションに対応したビューが表示される
– http://localhost:3000/hello/input
– http://localhost:3000/hello/greeting
app/views/hello/input.rhtmlに
フォームを追加
<h1>お名前を入力</h1>
ボタンを押したらgreeting
アクションに移る
<% form_tag :action => :greeting do %>
<%= text_field :input, :name %>
<%= submit_tag 'OK' %>
<% end %>
text_filed object_name, method, options = {}
app/controllers/hello_controller.rb
を編集
# @params はパラメータ情報を管理するため
# のインスタンス変数
# アクションで定義されたインスタンス変数は
# ビューで利用できる
def greeting
@str = @params.inspect
end
app/views/hello/greeting.rhtml
を編集
<%= @str %>
greetingアクションの@str変数の値を
表示
実行
input のテキストフィールドに「安藤友晴」と入力し
てボタンを押すと
greeting で次の文字列が表示される
{ "commit"=>"OK", "action"=>"greeting",
"controller"=>"hello",
"input"=>{"name"=>"安藤友晴"} }
これがパラメータの情報になる
greetingで名前を表示する
app/controllers/hello_controller.rb を編集
def greeting
@name = @params[:input][:name]
end
app/views/hello/greeting.rhtmlを編集
<h1>ごあいさつ</h1>
<%= "こんにちは、#{@name}さん" %>
<% form_tag :action => :input do %>
<%= submit_tag '戻る' %>
<% end %>
config/routes.rb
ActionController::Routing::Routes.draw do |map|
map.connect ':controller/service.wsdl', :action => 'wsdl'
map.connect ':controller/:action/:id.:format'
map.connect ':controller/:action/:id'
end
#
#
#
#
#
map.connect ‘:controller/:action/:id’ に着目
URLの形式が <コントローラ名>/<アクション名>/<id> で
あることを示している
このファイルに
map.connect 'h/:action/:id', :controller => 'hello'
# を追加したらどのように動くだろうか?
データベースの取り扱い
基本的な作業手順
(本の管理アプリケーション)
データベース(MySQL)の準備
rails books
config/database.yml の編集
MySQLでデータベース作成
ruby script/generate model book title:string author:string
publisher:string isbn:string published_on:date
rake db:migrate
ruby script/generate scaffold Book
サーバの立ち上げ
アプリケーションの修正
database.yml
development:
adapter: mysql
database: books_development
username: root
password: tomoharu
socket: /var/lib/mysql/mysql.sock
encoding: utf8
test:
database: books_test
……
production:
database: books_test
……
エンタープライズアプリケーションアー
キテクチャパターン
マーチン・ファウラー著
翔泳社
ISBN: 4-7981-0553-8
エンタープライズ・アプリケーションの設計
技法について。オブジェクト指向設計全般
で参考になる
原書名: 「Patterns of Enterprise
Application Architecture」
翻訳の質は微妙
「PofEAA」とか「PoEAA」と呼ばれる
http://capsctrl.que.jp/kdmsnr/wiki/PofEAA
/
データソースのアーキテクチャパ
ターン
Table Data Gateway
Row Data Gateway
Active Record
Data Mapper
Active Record パターン
データと振る舞いの両方を持つオブジェク
ト。Personクラス自身にデータベースにア
クセスする処理が記述されている。
データベースに対するCRUD
Create
– テーブルへの情報の追加
– insert into 文
Read
– テーブルからの情報の読み出し
– select文
Update
– テーブルの情報の更新
– update文
Delete
– テーブルの情報の削除
– delete文
Active Record とCRUD
Create
b = Book.new
b.title = ‘…’;
b.save
Read
b = Book.find(id)
Active Record とCRUD
Update
b = Book.find(id)
b.title = ‘…’
b.save
Delete
b = Book.find(id)
b.destroy
findメソッド
books = Book.find(:all,
:conditions=>[“title like ?”, % + Ruby + %]
# conditions の値は、SQLのwhere句の内容
Ajax
Ajax ということば
“Ajax”という名前のはじまり
–
–
–
–
Ajax: A New Approach to Web Applications
Jesse James Garrett 氏
2005年2月18日
http://www.adaptivepath.com/publications/essays/archives/00
0385.php
日本語訳
– Ajax: Web アプリケーション開発の新しいアプローチ
– けんたろ 氏
– http://antipop.gs/docs/translations/ajax.html
Ajax
Ajax = Asynchronous JavaScript + XML
– Asynchronous = 非同期
技術的な特徴
– Ajax Engineを用いる
– Webサーバと非同期に通信する
Ajax Engineを用いる
従来のクライア
ントとサーバの
間に Ajax
Engine が入る
Ajax Engine
– ユーザインタ
フェースのレン
ダリング
– 必要に応じて
サーバと通信
する
Webサーバと
非同期に通信する
WebブラウザとWeb
サーバが通信してい
るあいだ、クライアント
側では待ち時間が発
生しない
Ajaxの構成技術
Ajaxの構成技術
HTML (XHTML)
JavaScript
DOM (Document Object Model)
CSS (Cascading Style Sheet)
XML
XMLHttpRequest
JavaScript
(基本的には)Webブラウザ上で動作するプ
ログラミング言語
– Java言語とは関係ない
オブジェクト指向言語
– 「関数型言語」でもある
“ECMAScript” として標準化されている
JavaScript: 世界で最も誤解され
たプログラミング言語
(原文) JavaScript: The World's Most
Misunderstood Programming Language
– http://www.crockford.com/javascript/javascri
pt.html
http://d.hatena.ne.jp/brazil/20050829/112
5321936
DOM
(Document Object Model)
HTMLやXML文書をアプリケーションから
操作するためのAPI
HTMLやXML文書をツリー構造として扱う
XMLHttpRequest
Webサーバからデータを取得するためのオ
ブジェクト
もともと Microsoft 社が Internet Explorer
に実装
ほかのブラウザも追随
標準化された規格という訳ではない
XMLHttpRequestで
できること
“XML”
– XMLじゃなくても、テキストファイルやJSONで
の受け渡しが可能
“Http”
– HTTPじゃなくても大丈夫 (なこともある)。ロー
カルのテキストファイルなど。
Ajaxのプログラミング
JavaScriptの利用
Ajaxのプログラミングでは、JavaScriptを利
用するのが基本
配慮すべきことが多い
– Webブラウザごとの挙動の違い
– 機能が少ない
JavaScriptライブラリの利用
DOJO Toolkit
Prototype.js
Yahoo! UI Library
script.aculo.us
Rico
Google Web Toolkit
Zimbra
Kabuki
……
他のシステムとの連携
JavaScriptのプログラムは、他のシステム
と連動して動くことが多い
– たとえばデータベースへのアクセスなど
Restfulなサービス
REST
分散システムのアーキテクチャスタイル
– 「スタイル」であって仕様が存在しているわけ
ではない
Roy Fielding (HTTPのプロトコル作成者の
一人) が考案
RESTの考え方に従ったスタイル
– Restful
RESTの考え方
すべてのリソースをURIで
すべてのリソースにHTTPでアクセス
ステートレスであること
XMLでリソースを扱うことが多い
リソースへの “CRUD”
Create
– 情報の追加
– POSTメソッド (HTTP)
Read
– 情報の読み出し
– GETメソッド (HTTP)
Update
– 情報の更新
– PUTメソッド (HTTP)
Delete
– 情報の削除
– DELETEメソッド (HTTP)
落ち穂拾い
サーバ
WEBrickは遅いので実運用には不向き
よくある組み合わせ
– Lightty + FastCGI + Apache
– Mongrel + Pound + Apache
• DHH推奨
Mongrel + Pound + Apache
Mongrel
– Railsでの利用が一般的になりつつあるWebサーバ
– gem install mongrel でインストール
– Mongrelをインストールすると、ruby script/server コマ
ンドでMongrelが起動
Pound
– リバースプロキシ + ロードバランサ
Apache Http Server
– 静的コンテンツ
バリデータ
入力された値を検証するためのもの
モデルに記述
class Book < ActiveRecord::Base
validates_presence_of :title, :author
validates_uniqueness_of :isbn
validates_format_of :isbn, :with => /[0-9xX¥-]+/
end
バリデータの種類 (1)
#必須項目のチェック
validates_presence_of :title, $author
#長さチェック
validates_length_of :username, :minimum => 6, :maximum => 8
#数値であるかチェック
validates_numericality_of :number
バリデータの種類 (2)
#値がユニークであるかチェック
validates_uniqueness_of :email
#正規表現によるチェック
validates_format_of :isbn, :with => /[0-9xX¥-]+/
アプリケーションの日本語化
日本語化の手法
Ruby Gettext Package を使う
Rubyで書かれたアプリケーションを国際化
するためのフレームワーク
インストール
gem install gettext
準備
config/environment.rb を編集
require 'gettext/rails’
app/controllers/application.rb を編集
init_gettext 'book' # プロジェクト名を指定
Gettextで利用するファイル
poファイル
– 人間が利用するファイル
moファイル
– アプリケーションが利用するファイル
Gettext Scaffold generator
プラグイン
プラグイン
– Railsの機能を拡張するためのしくみ
Gettext Scaffold generator
– これを使うとpoファイルやmoファイルの作成が楽にな
る
インストール
ruby script/plugin install
svn://rubyforge.org/var/svn/gettextscaffold/ge
ttext_scaffold
利用手順 (1)
rake gettext:setup
– poファイルとmoファイル(の雛形)を作成
rake gettext:update_po
– ビューやモデルから日本語化すべき部分を追
加する
利用手順 (2)
po/ja/books.po ファイルの編集
msgid "Book|Author”
msgstr "著者"
利用手順 (3)
日本語化したい文字列を _( ) メソッドで囲
い、po/ja/books.po ファイルを編集
<%= link_to _('Show'), …
msgid "Show”
msgstr "表示"
利用手順 (4)
rake gettext:make_mo
– moファイルの生成