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ファイルの生成
© Copyright 2024 ExpyDoc