Successfully reported this slideshow.
RUBY ON RAILS 3 Tutorial  を日本語訳してみた Chapter 5-7 2011/11/10
おさらい <ul><li>前回 Chapter4 を軽く飛ばしました </li></ul><ul><ul><li>rails console コマンドの話 </li></ul></ul><ul><ul><li>Ruby の文法的部分の話だったの...
目次 <ul><li>Chapter1 Rails 導入からデプロイ </li></ul><ul><li>Chapter2  デモアプリ (scaffold 使用 ) </li></ul><ul><li>Chapter3 Web アプリケーショ...
目次 <ul><li>Chapter8  ユーザ登録 </li></ul><ul><li>Chapter9  ログイン・ログアウト </li></ul><ul><li>Chapter10  ユーザデータの更新・編集・追加 </li></ul><...
Chapter5 Filling in the Layout <ul><li>CSS を追加する話 </li></ul><ul><li>レイアウトの話なので、気になった所のみ </li></ul>
5.2.1 Integration Tests <ul><li>routes.rb を触る前に </li></ul><ul><ul><li>Integration test( 結合テスト ) を行う </li></ul></ul><ul><li...
5.2.1 Integration Tests <ul><li>spec/requests/layout_links_spec.rb </li></ul><ul><li> に以下のテストを追加 </li></ul>describe   &quo...
5.2.1 Integration Tests <ul><li>自動でテストが実行されない場合 </li></ul><ul><ul><li>.autotest に追加 </li></ul></ul><ul><ul><li>Mac OS X の場...
5.2.1 Integration Tests <ul><ul><li>Ubuntu か Linux の場合 </li></ul></ul>Autotest . add_hook   :initialize   do   | autotest|...
5.2.2 Rails Routes <ul><li>URL マッピングは config/routes.rb で </li></ul><ul><li>routes.rb 例: </li></ul><ul><li>:to => ‘ コントローラ名...
5.4 Conclusion <ul><li>CSS の当て方 </li></ul><ul><li>route.rb の使い方 </li></ul><ul><li>link_to の使いかた </li></ul>
目次 <ul><li>Chapter1 Rails 導入からデプロイ </li></ul><ul><li>Chapter2  デモアプリ (scaffold 使用 ) </li></ul><ul><li>Chapter3 Web アプリケーショ...
Chapter6 Modeling and Viewing Users, PartⅠ <ul><li>( 前提 ) ユーザがログインするシステムを作っている途中 </li></ul><ul><li>ユーザモデルの作成 </li></ul><ul...
Box 6.1  Roll Your Own Authentication System <ul><li>OpenID や OAuth </li></ul><ul><li>Rails に備わっている認証モジュール </li></ul><ul><...
<ul><li>Rails の認証に答えが無いから </li></ul><ul><ul><li>チュートリアルで扱っても時代遅れになる可能性 </li></ul></ul><ul><li>正しい方法を示しても、古くなってしまう </li></u...
6.1.1 Database Migration <ul><li>User コントローラ作成 (new アクション付き ) </li></ul><ul><li>User モデル作成 (name と email を持っている ) </li></u...
6.1.1 Database Migration <ul><li>DB 作成 </li></ul><ul><li>DB 削除 </li></ul>$ bundle exec rake db:migrate $ bundle exec rake ...
6.1.2 The Model File <ul><li>Model Annotation </li></ul><ul><li>annotate という gem を入れる </li></ul><ul><ul><li>Gemfile に’ ann...
6.1.2 The Model File <ul><li>実行結果 </li></ul>$ bundle exec annotate --position before # == Schema Information # # Table nam...
6.1.3 Creating user objects <ul><li>--sandbox で DB には変更を加えない </li></ul><ul><li>-f オプションで常に最新のログを見れる </li></ul>$ rails cons...
6.2 User Validations  <ul><li>TDD のため、 development DB の 構造 を test DB に反映させる </li></ul>$ bundle exec rake db:test:prepare
6.2.3 Format Validation <ul><li>email 等のバリデーション用正規表現 </li></ul><ul><li>Rubular(http://rubular.com/) </li></ul><ul><ul><li>...
6.2.3 Format Validation <ul><li>余談 (Gmail の場合 ) </li></ul><ul><ul><li>例えば… </li></ul></ul><ul><ul><li>+ やスペースなどのメールアドレスに使え...
6.3.1 Debug and Rails Environments <ul><li>Rails の環境 </li></ul><ul><ul><li>test( テスト用 ) </li></ul></ul><ul><ul><li>develop...
6.3.1 Debug and Rails Environments <ul><li>Rails console のデフォルトは development </li></ul><ul><li>console で以下のメソッドで確認可能 </li>...
6.3.1 Debug and Rails Environments <ul><li>環境を指定して実行出来る </li></ul><ul><li>Rails を動かすときも環境指定可能 </li></ul>$ rails console te...
6.3.1 Debug and Rails Environments <ul><li>production 環境の DB を構築する </li></ul><ul><li>ちなみに </li></ul><ul><ul><li>heroku con...
目次 <ul><li>Chapter1 Rails 導入からデプロイ </li></ul><ul><li>Chapter2  デモアプリ (scaffold 使用 ) </li></ul><ul><li>Chapter3 Web アプリケーショ...
<ul><li>ユーザのログイン周り </li></ul><ul><ul><li>パスワード暗号化 </li></ul></ul><ul><li>ユーザの個人ページ作成 </li></ul><ul><ul><li>Gravatar を利用する ...
7.2.2 Some Secure Password Theory <ul><li>ユーザのログイン </li></ul><ul><ul><li>パスワードハッシュ化して比較 </li></ul></ul>
7.2.2 Some Secure Password Theory <ul><li>$ rails console   </li></ul><ul><li>>>  require   'digest'   </li></ul><ul><li>>...
7.2.2 Some Secure Password Theory <ul><li>rainbow attack ( 事前計算攻撃 / レインボー攻撃 ) </li></ul><ul><ul><li>http://michisugara-aud...
7.2.2 Some Secure Password Theory >>  Time . now . utc   => Fri Jan 29 18:11:27 UTC 2010   >>  password   =   &quot;secret...
7.2.3 Implementing has_password? <ul><li>User モデルに salt フィールド追加する </li></ul><ul><li>migration の設定 </li></ul><ul><ul><li>db...
<ul><li>作成した migration の実行 </li></ul>7.2.3 Implementing has_password? $ bundle exec rake db:migrate $ bundle exec rake db:...
7.3.2 A Name and a Gravatar <ul><li>Gemfile に gravatar_image_tag 追加 </li></ul><ul><ul><li>Gravatar(http://gravatar.com) を利...
今回のまとめ <ul><li>5 章では CSS の導入的な話 </li></ul><ul><li>User モデルの作り方について、 6 ・ 7 章だった </li></ul><ul><li>全体的にざっくり削った </li></ul><ul...
次回予告 <ul><li>8 章  Sign Up  新規登録 </li></ul><ul><li>9 章  Sign In, Sign Outs  セッション周り </li></ul><ul><li>10 章  Updating, Showi...
Upcoming SlideShare
Loading in …5
×

Ruby on Rails Tutorial Chapter5-7

2,519 views

Published on

I try to Ruby on Rails tutorial in Japanese. This is Chap5 to 7.

Published in: Technology
  • Be the first to comment

Ruby on Rails Tutorial Chapter5-7

  1. 1. RUBY ON RAILS 3 Tutorial を日本語訳してみた Chapter 5-7 2011/11/10
  2. 2. おさらい <ul><li>前回 Chapter4 を軽く飛ばしました </li></ul><ul><ul><li>rails console コマンドの話 </li></ul></ul><ul><ul><li>Ruby の文法的部分の話だったので、このまま飛ばします </li></ul></ul><ul><li>Chapter3 では TDD(Test Driven Development) </li></ul>
  3. 3. 目次 <ul><li>Chapter1 Rails 導入からデプロイ </li></ul><ul><li>Chapter2 デモアプリ (scaffold 使用 ) </li></ul><ul><li>Chapter3 Web アプリケーション </li></ul><ul><li>Chapter4 Rails 風 Ruby </li></ul><ul><li>Chapter5 スタイルを追加する </li></ul><ul><li>Chapter6 User Model と View その 1 </li></ul><ul><li>Chapter7 User Model と View その 2 </li></ul>
  4. 4. 目次 <ul><li>Chapter8 ユーザ登録 </li></ul><ul><li>Chapter9 ログイン・ログアウト </li></ul><ul><li>Chapter10 ユーザデータの更新・編集・追加 </li></ul><ul><li>Chapter11 ミニブログ ( ツイート ) </li></ul><ul><li>Chapter12 ユーザのフォロー </li></ul>
  5. 5. Chapter5 Filling in the Layout <ul><li>CSS を追加する話 </li></ul><ul><li>レイアウトの話なので、気になった所のみ </li></ul>
  6. 6. 5.2.1 Integration Tests <ul><li>routes.rb を触る前に </li></ul><ul><ul><li>Integration test( 結合テスト ) を行う </li></ul></ul><ul><li>テスト用 spec ファイル作成 </li></ul><ul><li>※ RSpec では integration tests のことを request specs と言う </li></ul>$ rails generate integration_test layout_links invoke rspec create spec/requests/layout_links_spec.rb
  7. 7. 5.2.1 Integration Tests <ul><li>spec/requests/layout_links_spec.rb </li></ul><ul><li> に以下のテストを追加 </li></ul>describe   &quot; GET 'home' &quot;   do    it   &quot; should be successful &quot;   do      get   ' home '      response .should be_success    end end
  8. 8. 5.2.1 Integration Tests <ul><li>自動でテストが実行されない場合 </li></ul><ul><ul><li>.autotest に追加 </li></ul></ul><ul><ul><li>Mac OS X の場合 </li></ul></ul>Autotest . add_hook :initialize do | autotest | autotest . add_mapping( /^spec/requests/.*_spec.rb$/ ) do autotest . files_matching( /^spec/requests/.*_spec.rb$/ ) end end
  9. 9. 5.2.1 Integration Tests <ul><ul><li>Ubuntu か Linux の場合 </li></ul></ul>Autotest . add_hook :initialize do | autotest| autotest . add_mapping( %r%^spec/(requests)/.*rb$% ) do | filename, _ | filename end end  
  10. 10. 5.2.2 Rails Routes <ul><li>URL マッピングは config/routes.rb で </li></ul><ul><li>routes.rb 例: </li></ul><ul><li>:to => ‘ コントローラ名 # アクション名’ </li></ul>SampleApp :: Application .routes.draw   do    match   ' /contact ' ,   :to  =>   ' pages#contact '    match   ' /about ' ,     :to  =>   ' pages#about '    match   ' /help ' ,     :to  =>   ' pages#help ' end  
  11. 11. 5.4 Conclusion <ul><li>CSS の当て方 </li></ul><ul><li>route.rb の使い方 </li></ul><ul><li>link_to の使いかた </li></ul>
  12. 12. 目次 <ul><li>Chapter1 Rails 導入からデプロイ </li></ul><ul><li>Chapter2 デモアプリ (scaffold 使用 ) </li></ul><ul><li>Chapter3 Web アプリケーション </li></ul><ul><li>Chapter4 Rails 風 Ruby </li></ul><ul><li>Chapter5 スタイルを追加する </li></ul><ul><li>Chapter6 User Model と View その 1 </li></ul><ul><li>Chapter7 User Model と View その 2 </li></ul>
  13. 13. Chapter6 Modeling and Viewing Users, PartⅠ <ul><li>( 前提 ) ユーザがログインするシステムを作っている途中 </li></ul><ul><li>ユーザモデルの作成 </li></ul><ul><li>DB のテーブル作成 </li></ul><ul><li>バリデーション </li></ul>
  14. 14. Box 6.1 Roll Your Own Authentication System <ul><li>OpenID や OAuth </li></ul><ul><li>Rails に備わっている認証モジュール </li></ul><ul><ul><li>それらを使わずに認証を自作すべし </li></ul></ul>
  15. 15. <ul><li>Rails の認証に答えが無いから </li></ul><ul><ul><li>チュートリアルで扱っても時代遅れになる可能性 </li></ul></ul><ul><li>正しい方法を示しても、古くなってしまう </li></ul><ul><li>Rails と認証の両方の勉強になる </li></ul>Box 6.1 Roll Your Own Authentication System
  16. 16. 6.1.1 Database Migration <ul><li>User コントローラ作成 (new アクション付き ) </li></ul><ul><li>User モデル作成 (name と email を持っている ) </li></ul>$ rails g controller Users new $ rails g model User name:string email:string
  17. 17. 6.1.1 Database Migration <ul><li>DB 作成 </li></ul><ul><li>DB 削除 </li></ul>$ bundle exec rake db:migrate $ bundle exec rake db:rollback “ bundle exec を使うと、 BUNDLE_PATH 以下の gem を使って、スクリプトを実行できます。” ( http://d.hatena.ne.jp/mirakui/20100703/1278165723 )
  18. 18. 6.1.2 The Model File <ul><li>Model Annotation </li></ul><ul><li>annotate という gem を入れる </li></ul><ul><ul><li>Gemfile に’ annotate’ 追加 </li></ul></ul><ul><ul><ul><li>※ 注意 :git=> 以下を追加しないと 3.1 系で動かない </li></ul></ul></ul><ul><ul><ul><li>https://github.com/ctran/annotate_models/issues/28 </li></ul></ul></ul>group  :development   do    gem   ' rspec-rails '    gem   ' annotate ' ,  :git  =>  ' git://github.com/ctran/annotate_models.git ' end  
  19. 19. 6.1.2 The Model File <ul><li>実行結果 </li></ul>$ bundle exec annotate --position before # == Schema Information # # Table name: users # #  id         :integer         not null, primary key #  name       :string(255) #  email      :string(255) #  created_at :datetime #  updated_at :datetime # class   User  <  ActiveRecord :: Base end   追加されている
  20. 20. 6.1.3 Creating user objects <ul><li>--sandbox で DB には変更を加えない </li></ul><ul><li>-f オプションで常に最新のログを見れる </li></ul>$ rails console --sandbox $ tail –f log/development.log
  21. 21. 6.2 User Validations <ul><li>TDD のため、 development DB の 構造 を test DB に反映させる </li></ul>$ bundle exec rake db:test:prepare
  22. 22. 6.2.3 Format Validation <ul><li>email 等のバリデーション用正規表現 </li></ul><ul><li>Rubular(http://rubular.com/) </li></ul><ul><ul><li>正規表現の入力 </li></ul></ul><ul><ul><li> ->マッチするか確認 </li></ul></ul>
  23. 23. 6.2.3 Format Validation <ul><li>余談 (Gmail の場合 ) </li></ul><ul><ul><li>例えば… </li></ul></ul><ul><ul><li>+ やスペースなどのメールアドレスに使えない記号もバリデーションで許可必要 </li></ul></ul>test@gmail.com == test+hoge@gmail + から @ 前までが無視される
  24. 24. 6.3.1 Debug and Rails Environments <ul><li>Rails の環境 </li></ul><ul><ul><li>test( テスト用 ) </li></ul></ul><ul><ul><li>development( 開発用 ) </li></ul></ul><ul><ul><ul><ul><li>app 以下のコード変更が常に反映される </li></ul></ul></ul></ul><ul><ul><li>production( 本番環境 ) </li></ul></ul><ul><ul><ul><ul><li>コード変更反映にはサーバーの再起動必要。こちらのほうが早い </li></ul></ul></ul></ul><ul><ul><li>http://d.hatena.ne.jp/zariganitosh/20070108/1168246932 </li></ul></ul>
  25. 25. 6.3.1 Debug and Rails Environments <ul><li>Rails console のデフォルトは development </li></ul><ul><li>console で以下のメソッドで確認可能 </li></ul>>> Rails.env => “development” >> Rails.env.development? => “true” >> Rails.env.test? => “false”
  26. 26. 6.3.1 Debug and Rails Environments <ul><li>環境を指定して実行出来る </li></ul><ul><li>Rails を動かすときも環境指定可能 </li></ul>$ rails console test $ rails server --environment production
  27. 27. 6.3.1 Debug and Rails Environments <ul><li>production 環境の DB を構築する </li></ul><ul><li>ちなみに </li></ul><ul><ul><li>heroku console で試すと、 Heroku は production 環境であることが分かる </li></ul></ul>$ bundle exec rake db:migrate RAILS_ENV=production
  28. 28. 目次 <ul><li>Chapter1 Rails 導入からデプロイ </li></ul><ul><li>Chapter2 デモアプリ (scaffold 使用 ) </li></ul><ul><li>Chapter3 Web アプリケーション </li></ul><ul><li>Chapter4 Rails 風 Ruby </li></ul><ul><li>Chapter5 スタイルを追加する </li></ul><ul><li>Chapter6 User Model と View その 1 </li></ul><ul><li>Chapter7 User Model と View その 2 </li></ul>
  29. 29. <ul><li>ユーザのログイン周り </li></ul><ul><ul><li>パスワード暗号化 </li></ul></ul><ul><li>ユーザの個人ページ作成 </li></ul><ul><ul><li>Gravatar を利用する gem </li></ul></ul>Chapter7 Modeling and Viewing Users, PartⅡ
  30. 30. 7.2.2 Some Secure Password Theory <ul><li>ユーザのログイン </li></ul><ul><ul><li>パスワードハッシュ化して比較 </li></ul></ul>
  31. 31. 7.2.2 Some Secure Password Theory <ul><li>$ rails console </li></ul><ul><li>>> require 'digest' </li></ul><ul><li>>> def secure_hash (string) </li></ul><ul><li>>> Digest :: SHA2 . hexdigest(string) </li></ul><ul><li>>> end </li></ul><ul><li>>> password = &quot;secret&quot; </li></ul><ul><li>>> encrypted_password = secure_hash(password) </li></ul><ul><li>“ 2bb80d537b1da3e38bd30361aa85…( 省略 )&quot; </li></ul><ul><li>>> submitted_password = &quot;secret&quot; </li></ul><ul><li>>> encrypted_password == secure_hash(submitted_password) </li></ul><ul><li>=> true   </li></ul>
  32. 32. 7.2.2 Some Secure Password Theory <ul><li>rainbow attack ( 事前計算攻撃 / レインボー攻撃 ) </li></ul><ul><ul><li>http://michisugara-aud.sakura.ne.jp/lectures/lectures_25.html </li></ul></ul><ul><li>パスワードが類推される可能性がある </li></ul><ul><li>-> salt ( 今回は現在時刻の文字列 ) を利用する </li></ul><ul><ul><li>ハッシュ関数 (pass) を ハッシュ関数 ( 時刻 +pass) に </li></ul></ul>
  33. 33. 7.2.2 Some Secure Password Theory >> Time . now . utc => Fri Jan 29 18:11:27 UTC 2010 >> password = &quot;secret&quot; => &quot;secret&quot; >> salt = secure_hash( &quot; #{ Time . now . utc } -- #{ password } &quot; ) => &quot;d1a3eb8c9aab32ec19cfda810d2ab351873b5dca4e16e7f57b3c1932113314c8&quot; >> encrypted_password = secure_hash( &quot; #{ salt } -- #{ password } &quot; ) => &quot;69a98a49b7fd103058639be84fb88c19c998c8ad3639cfc5deb458018561c847&quot;   ※ 明確にするため、ハッシュ化する文字列は” --” で区切られるらしい
  34. 34. 7.2.3 Implementing has_password? <ul><li>User モデルに salt フィールド追加する </li></ul><ul><li>migration の設定 </li></ul><ul><ul><li>db/migrate/<timestamp>_add_salt_to_users.rb が作成される </li></ul></ul><ul><ul><li>migration 名 (add_password_to_users) は自由 </li></ul></ul><ul><ul><li>※ _to_users にしておくと、自動で User に追加される!便利! </li></ul></ul>$ rails generate migration add_password_to_users encrypted_password:string
  35. 35. <ul><li>作成した migration の実行 </li></ul>7.2.3 Implementing has_password? $ bundle exec rake db:migrate $ bundle exec rake db:test:prepare sqlite> .schema CREATE TABLE &quot;schema_migrations&quot; (&quot;version&quot; varchar(255) NOT NULL); CREATE TABLE &quot;users&quot; (&quot;id&quot; INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, &quot;name&quot; varchar(255), &quot;email&quot; varchar(255), &quot;created_at&quot; datetime, &quot;updated_at&quot; datetime, &quot;salt&quot; varchar(255));
  36. 36. 7.3.2 A Name and a Gravatar <ul><li>Gemfile に gravatar_image_tag 追加 </li></ul><ul><ul><li>Gravatar(http://gravatar.com) を利用する gem </li></ul></ul><ul><li><%= gravatar_image_tag ‘email’ %> </li></ul><ul><ul><li>これだけで、登録された email のアイコンを表示してくれる </li></ul></ul><ul><li>      ← Gravatar に登録がない場合に表示される </li></ul>
  37. 37. 今回のまとめ <ul><li>5 章では CSS の導入的な話 </li></ul><ul><li>User モデルの作り方について、 6 ・ 7 章だった </li></ul><ul><li>全体的にざっくり削った </li></ul><ul><ul><li>Tutorial ではちゃんとテストする過程がある </li></ul></ul><ul><ul><li>RSpec のコードも載っていたが割愛 </li></ul></ul><ul><ul><li>Heroku ・ Git も使っている ( 章毎に push している ) </li></ul></ul>
  38. 38. 次回予告 <ul><li>8 章 Sign Up 新規登録 </li></ul><ul><li>9 章 Sign In, Sign Outs セッション周り </li></ul><ul><li>10 章 Updating, Showing, and Deleting Users </li></ul><ul><li>うまく行けば、次の次の回で最終回…? ( 全 12 章 ) </li></ul>

×