rails tips 氏久 達博
注 この資料は後で読む用に 作られており、プレゼン 時にスクリーンに映るも のと内容が若干異なりま す。
自己紹介 氏久 達博 「うじひさ」 大阪大学の大学院生 奈良・香川・長崎出身の大阪人
自己紹介 Ruby 歴 : 2006 年 6 月から Rails のため Ruby を勉強 それ以前は Perl, PHP など 株式会社アジャイル ( 元 ) Haskell 勉強会を企画 次回は 1 月 28 日 ( 日 )
『 rails tips 』 対象 : Ruby on Rails を使いは じめてみたものの、本格的な アプリケーション開発はこれ からという人 内容 : ハマりどころ回避方法, 事例紹介など
HTML 出力エスケー プ AR, フォーム (params), cookie な ど由来のデータをそのまま出力す るのは危険。 → クロスサイトスクリプティング ERB::Util#h で、きちんとエス ケープしましょう。
HTML 出力エスケー プ View で ') %> みたく毎回 h をつけるのは面倒 だし、美しくない。 (h があるのがふつうで、ないのはむしろ例外的 )
HTML 出力エスケー プ プラグインに頼ろう! write less code!
HTML 出力エスケー プ autoescape プラグイン : デフォルトで h がかかる。 ( 正確には CGI.util#escapeHTML) タグ除去 ( なにもしなくていい ) そのまま model で acts_as_raw :name もしくは 安全、破壊的
HTML 出力エスケー プ autoescape プラグイン : 対象は AR 由来データのみ (after_find でフィルタリング ) acts as raw な要素がなくても acts_as_raw 宣言が必要 汚い …?
HTML 出力エスケー プ Safe ERB プラグイン : AR 由来の値や、リクエスト由来の値を h を使 わずに表示しようとすると例外を発生する。 タグ除去 そのまま controller し てから 安全、非破壊的
HTML 出力エスケー プ inverse h プラグイン : プラグインがあるだけで、全ての view の h ありと h なしが逆転。 タグ除去 そのまま 安全、非破壊的、自然 誰か作ってください
CSS/JS での画像指 定 例 : CSS にて background:url('/images/a.jpg'); では OK では NG ( 相対パス問題 )
CSS/JS での画像指 定 ● 解決策 1 CSS に対応する View を用意して ERb で記述する。 background:url( ); application.rhtml で 'main') %>
CSS/JS での画像指 定 ● 解決策 2 Relative Path Plugin の スタティックファイルフィルタ機能を使う。 ( 正規表現で置換 ) ※ WEBrick, Mongrel 限定!
CSS/JS での画像指 定 ● 解決策 3 javascript 側で対応。 ( 美しくない )
CSS/JS での画像指 定 " きれいな " 解決策は ないものか … public 以下でも ERb が 使えるように拡張するとか?
振舞駆動開発 ・ Rails でも BDD: Behaviour Driven Development ・ RSpec については 先月の Ruby 勉強会を参照
振舞駆動開発 RSpec on Rails の例 : require File.dirname(__FILE__) + '/../spec_helper' context " モデルのユーザクラスについての仕様 " do fixtures :users setup = User.find users(:ujihisa).id end specify " 氏久は 22 歳のはず " 22 end
振舞駆動開発 RSpec on Rails の実行 : $ rake spec RAILS_ENV=test または、 (1) spec サーバを立ち上げておいて $ ruby script/rails_spec_server (2) 別ターミナルで実行 $ ruby script/rails_spec spec/models/*
振舞駆動開発 RSpec on Rails の良いところ : ・ assert_* じゃなく should_* ・ context, specify で日本語が 使える柔軟性 ・ Rails の環境設定を再読込み しないので、超高速
振舞駆動開発 RSpec on Rails の穴 : ・日本語のドキュメントが ほとんどない ・ rails_spec_server が C-c で 終了しない。バグ? ・ rake spec すると development 環境 の DB データが fixtures で上書き!
デプロイ ( 配置 ) Rails 関連書籍では、なぜか デプロイ関係の記述が非常に 少ない。 →blog など、 Web 上の情報に頼 らざるを得ない
デプロイ ( 配置 ) ・早めの SwitchTower ・手作業でのデプロイは かなり面倒。
はじめてのデプロイ ありがちな道のり ( これでも順調 ) (1) svn/cvs/ftp とかでアップロード (2) パーミッション変更 (log, tmp) (3) rake db:migrate RAILS_ENV=production (4) (rake db:fixtures:load RAILS_ENV=production) (5) (apache+cgi で動作確認 ) (6) public/.htaccess 書き換え (7) apache+fcgi で動作確認 (8) あれ、動かない … (9) log 見たりして確認、修正、 etc...
はじめてのデプロイ たくさんあるハマりどころ ・ production 環境への設定し忘れ ・ php と違って、普通に apache 使うだけというのはむしろ異端 ( apache mod_proxy + lighttpd とか ) ・相対パス問題 (Relative Path Plugin 使いましょう ) ・ public/index.html 削除し忘れ (public 以下は優先される静的ファイル ) ・ポートの競合 (lighttpd を 80 で起動しようとしたら apache と競合 ) ・そもそもサーバに Ruby, rubygems, rails, fcgi などをインストールしなきゃ ならない (php とか PEAR なら今はどこでも最初から入ってる ) ・ ssh 使えるのが前提 ( 一応なくてもできるけど、とっても不便 ) ・ etc... よくあるレンタルサーバで すぐ使えるようなモノじゃない
はじめてのデプロイ 出先でも使える、自分のための プライベートな Web アプリ → 作ってはみたものの、 どうやって運用する? ・専用サーバ借りる ・自宅サーバ構築する
はじめてのデプロイ rails の問題点 : 「とりあえず公開」が できない これが出来ると rails はもっと広 く普及するのでは … ?
Just in Time on Rails 作ってみました 作った rails アプリを圧縮して アップロードするだけ
Just in Time on Rails α 版 無料, 無保証 Linux + Pound + Mongrel + SQLite3
Just in Time on Rails 1 アプリ 1 ポート、 サブドメインに割り当て 悪用しないでね
事例紹介 : HighTube 動画配信システム など多数 開発 : ( 株 ) アジャイル ( 株 ) 京都三条ラジオカフェ
事例紹介 : HighTube HTML 出力エスケープ ふつうに h 使ってる CSS/JS での画像指定 CSS は舞波方式、 JS は JS で
事例紹介 : HighTube テスト駆動開発 デプロイ : cron & Subversion 構成 Linux + {Apache mod_proxy + Lighttpd, Pound + Mongrel} + MySQL + Rails 1.1.6}
事例紹介 : HighTube 『京都総文』 2006 年 7 月に PHP + Maple で開発 開発期間は 3 週間 メインスタッフは 2 人
事例紹介 : HighTube 『京都府立植物園』 2006 年 10 月に、いろいろと 機能追加したものを rails で作り直し 開発期間は 2 週間 メインスタッフは 3 人
おわり ご清聴ありがとうございました。