Good Names in Right Places on Rails

5,995 views

Published on

Presentation for Okayama RubyKaigi01. Written in Japanese only.

Good Names in Right Places on Rails

  1. 1. 岡山Ruby会議01 良い場所に、良い名前で Good Names in the right places on Rails 2012. 7. 7 株式会社万葉 大場寧子(@nay3) 株式会社万葉2012年7月10日火曜日
  2. 2. 岡山Ruby会議01 祝!! 岡山Ruby会議01 株式会社万葉2012年7月10日火曜日
  3. 3. 岡山Ruby会議01 私と岡山 •曾祖母が住んでいました • 山の方に先祖のお墓があるよう です 株式会社万葉2012年7月10日火曜日
  4. 4. 岡山Ruby会議01 昨晩 @岡山 株式会社万葉2012年7月10日火曜日
  5. 5. 岡山Ruby会議01 1985年 @岡山 株式会社万葉2012年7月10日火曜日
  6. 6. 岡山Ruby会議01 岡崎理枝子さん オリーズデザイン CSS NiTE in OKAYAMA 株式会社万葉2012年7月10日火曜日
  7. 7. 岡山Ruby会議01 山口真央さん (@gutch_jp) 株式会社万葉2012年7月10日火曜日
  8. 8. 岡山Ruby会議01 Romantic Ruby! ...ロビー活動不足!!! 株式会社万葉2012年7月10日火曜日
  9. 9. 岡山Ruby会議01 自己紹介 •大場寧子 おおばやすこ •@nay3 • プログラマ • 株式会社万葉 代表取締役社長 株式会社万葉2012年7月10日火曜日
  10. 10. 岡山Ruby会議01 2006年から Rubyを使うように 株式会社万葉2012年7月10日火曜日
  11. 11. 岡山Ruby会議01 たのしい開発 スタートアップRuby Coming Soon! 7/31 株式会社万葉2012年7月10日火曜日
  12. 12. 岡山Ruby会議01 私の関心事 •実装するのが好きです • メンテナンスしやすいコードが 好き 株式会社万葉2012年7月10日火曜日
  13. 13. 岡山Ruby会議01 会場のみなさまは? •Ruby触ったことのある人 •Rails触ったことのある人 • Webアプリ作ったことのある人 • Railsでお仕事している人 株式会社万葉2012年7月10日火曜日
  14. 14. 岡山Ruby会議01 今日の話題 • Railsアプリ開発入門 • 何をどこに書くか • どんな名前をつけるか 株式会社万葉2012年7月10日火曜日
  15. 15. 岡山Ruby会議01 Railsアプリ 開発入門 株式会社万葉2012年7月10日火曜日
  16. 16. 岡山Ruby会議01 ライブ コーディングで ご紹介 株式会社万葉2012年7月10日火曜日
  17. 17. 岡山Ruby会議01 実装だけじゃなく 要件や設計から 雰囲気をご紹介 株式会社万葉2012年7月10日火曜日
  18. 18. 岡山Ruby会議01 時間が足りないので 実演はさわりだけ 株式会社万葉2012年7月10日火曜日
  19. 19. 岡山Ruby会議01 私とペアプロ しているつもりで どうぞ :) 株式会社万葉2012年7月10日火曜日
  20. 20. 岡山Ruby会議01 1. 環境 株式会社万葉2012年7月10日火曜日
  21. 21. 岡山Ruby会議01 環境 • Mac OS X • RVM • Ruby1.9.3 • Rails 3.2.6 株式会社万葉2012年7月10日火曜日
  22. 22. 岡山Ruby会議01 2. 何を作るか 決める 株式会社万葉2012年7月10日火曜日
  23. 23. 岡山Ruby会議01 定番の掲示板 ...は飽きたので 株式会社万葉2012年7月10日火曜日
  24. 24. 岡山Ruby会議01 タスク管理 株式会社万葉2012年7月10日火曜日
  25. 25. 岡山Ruby会議01 今日絶対 やりたいこと 最大3つを 登録する 株式会社万葉2012年7月10日火曜日
  26. 26. 岡山Ruby会議01 できたかどうか チェックできる 株式会社万葉2012年7月10日火曜日
  27. 27. 岡山Ruby会議01 今日も がんばった と思える 株式会社万葉2012年7月10日火曜日
  28. 28. 岡山Ruby会議01 色わけしたい •人生の目標に とって大事 •その他 株式会社万葉2012年7月10日火曜日
  29. 29. 岡山Ruby会議01 これまでの タスクを 見られる 株式会社万葉2012年7月10日火曜日
  30. 30. 岡山Ruby会議01 トップページ 2012/7/7 今日のタスク 2012/7/6 編集 2012/7/5 チケット#218完了 2012/7/4 勉強会に参加 完了(レ)/あきらめ( )/未記入 株式会社万葉2012年7月10日火曜日
  31. 31. 岡山Ruby会議01 過去のページ 2012/7/7のタスク 2012/7/7 2012/7/6 チケット#218完了 2012/7/5 2012/7/4 勉強会に参加 株式会社万葉2012年7月10日火曜日
  32. 32. 岡山Ruby会議01 今日のタスクの編集 今日のタスク チケット218完了 重要 勉強会に参加 重要 重要 更新 株式会社万葉2012年7月10日火曜日
  33. 33. 岡山Ruby会議01 3. 設計 株式会社万葉2012年7月10日火曜日
  34. 34. 岡山Ruby会議01 アプリ名を 決める 株式会社万葉2012年7月10日火曜日
  35. 35. 岡山Ruby会議01 1日に 3つのタスク... (でも設定で変 えるかも?) 株式会社万葉2012年7月10日火曜日
  36. 36. 岡山Ruby会議01 数はやめて 意味にしよう 株式会社万葉2012年7月10日火曜日
  37. 37. 岡山Ruby会議01 mit Most Important Tasks 株式会社万葉2012年7月10日火曜日
  38. 38. 岡山Ruby会議01 モデル設計 株式会社万葉2012年7月10日火曜日
  39. 39. 岡山Ruby会議01 RailsのMVC モデル コントローラ ビュー 株式会社万葉2012年7月10日火曜日
  40. 40. 岡山Ruby会議01 モデル • アプリケーションの中 核となるデータやロジッ クを書く • オブジェクト指向で 株式会社万葉2012年7月10日火曜日
  41. 41. 岡山Ruby会議01 mitのモデル •Task •タスク1件を表すモデル •User •ユーザー •※将来追加する 株式会社万葉2012年7月10日火曜日
  42. 42. 岡山Ruby会議01 もうひとつ •Day •ユーザー1人の1日のタ スクをまとめるモデル • DB的にはなくてもいいけ どRails的に楽 株式会社万葉2012年7月10日火曜日
  43. 43. 岡山Ruby会議01 クラス図 Day tasks Task day_id day 株式会社万葉2012年7月10日火曜日
  44. 44. 岡山Ruby会議01 Task • day_id - 日 • name - 名前 • lifework - 人生に重要? • status - new/done/ canceled 株式会社万葉2012年7月10日火曜日
  45. 45. 岡山Ruby会議01 Day • created_on - 日 株式会社万葉2012年7月10日火曜日
  46. 46. 岡山Ruby会議01 URL設計 株式会社万葉2012年7月10日火曜日
  47. 47. 岡山Ruby会議01 URLの考え方 • トップは / • 名詞や名詞を修飾する語 を使う •/tasks/done ○ •/create_task 株式会社万葉2012年7月10日火曜日
  48. 48. 岡山Ruby会議01 RESTful • Rails には良くある CRUD 向けのお決まりの URL、HTTPメソッド、 アクションのセットがある • うまくはまる時は使う 株式会社万葉2012年7月10日火曜日
  49. 49. 岡山Ruby会議01 よくあるセット リソース名 group の場合 HTTP URL アクション 説明 メソッド GET /groups index 一覧 GET /groups/17 show 詳細 GET /groups/new new 作成画面 POST /groups create 作成実行 GET /groups/17/edit edit 編集画面 PUT /groups/17 update 編集実行 DELETE /groups/17 destroy 削除実行 株式会社万葉2012年7月10日火曜日
  50. 50. 岡山Ruby会議01 mitの主なリクエスト 1.トップの表示 2.過去のタスクの表示 3.今日のタスクの編集画面の表示 4.今日のタスクの更新実行 5.タスクのステータス変更(Ajax) 株式会社万葉2012年7月10日火曜日
  51. 51. 岡山Ruby会議01 1.トップの表示 URL / HTTPメソッド GET コントローラ TasksController アクション index 株式会社万葉2012年7月10日火曜日
  52. 52. 岡山Ruby会議01 2.過去タスクの表示 URL /tasks/2012/7/6 HTTPメソッド GET コントローラ TasksController アクション daily 株式会社万葉2012年7月10日火曜日
  53. 53. 岡山Ruby会議01 3.今日のタスクの編集画面 URL /today/edit HTTPメソッド GET コントローラ TasksController アクション edit_today 株式会社万葉2012年7月10日火曜日
  54. 54. 岡山Ruby会議01 4.今日のタスクの編集実行 URL /today HTTPメソッド PUT コントローラ TasksController アクション update_today 株式会社万葉2012年7月10日火曜日
  55. 55. 岡山Ruby会議01 5.タスクのステータス変更 URL /tasks/17 HTTPメソッド PUT コントローラ TasksController アクション update 株式会社万葉2012年7月10日火曜日
  56. 56. 岡山Ruby会議01 4. テスト/スペック 株式会社万葉2012年7月10日火曜日
  57. 57. 岡山Ruby会議01 モデルのSpecなど を書きます 株式会社万葉2012年7月10日火曜日
  58. 58. 岡山Ruby会議01 詳しくは山本さんの 発表で :) 株式会社万葉2012年7月10日火曜日
  59. 59. 岡山Ruby会議01 5. 実装・確認 株式会社万葉2012年7月10日火曜日
  60. 60. 岡山Ruby会議01 ライブ コーディング 株式会社万葉2012年7月10日火曜日
  61. 61. 岡山Ruby会議01 http://github.com/ nay/mit 株式会社万葉2012年7月10日火曜日
  62. 62. 岡山Ruby会議01 何をどこに 書くか 株式会社万葉2012年7月10日火曜日
  63. 63. 岡山Ruby会議01 Rails内の 場所 • routes.rb • コントローラ • モデル • ビュー • ヘルパー • config/initializers • データベース • バッチ処理 株式会社万葉2012年7月10日火曜日
  64. 64. 岡山Ruby会議01 routes.rb • どのURL+HTTPメソッドをど のコントローラのアクションに 案内するか • アクションへのパラメータの チェックや、付与ができる 株式会社万葉2012年7月10日火曜日
  65. 65. 岡山Ruby会議01 get tasks/:year/:month/:day => "tasks#daily", :constraints => { :year => /[0-9]+/, :month => /(12¦11¦10¦ [1-9])/, :day => /[1-3]?[0-9]/ }, :as => :daily_tasks 株式会社万葉2012年7月10日火曜日
  66. 66. 岡山Ruby会議01 コントローラ •リクエストの内容をチェックし ておかしければハネる • ビューで使うデータを用意する • どのビューを使うか指定する 株式会社万葉2012年7月10日火曜日
  67. 67. 岡山Ruby会議01 def daily date = Date.new( params[:year].to_i, params[:month].to_i, params[:day].to_i) @day = Day.on(date) end 株式会社万葉2012年7月10日火曜日
  68. 68. 岡山Ruby会議01 モデル •アプリケーション内のデータと それに付随するロジック • 関連するモデルを簡単に呼び出 す 株式会社万葉2012年7月10日火曜日
  69. 69. 岡山Ruby会議01 コントローラは すっきりと 株式会社万葉2012年7月10日火曜日
  70. 70. 岡山Ruby会議01 モデルに コードを集める (メソッドを作る) 株式会社万葉2012年7月10日火曜日
  71. 71. 岡山Ruby会議01 ただし MVCを乱さない •モデルではリクエストパラメー タやセッションを扱わない • アクションごとにモデルのメ ソッドを作ったりしない 株式会社万葉2012年7月10日火曜日
  72. 72. 岡山Ruby会議01 積極的に使おう • 関連 (Association) • 検証 • Scope • コールバック (before_save など) 株式会社万葉2012年7月10日火曜日
  73. 73. 岡山Ruby会議01 関連 class Day < ActiveRecord::Base has_many :tasks, :dependent => :destroy, :autosave => true .... @day.tasks 株式会社万葉2012年7月10日火曜日
  74. 74. 岡山Ruby会議01 検証 class Task < ActiveRecord::Base validates status, :presence => true ... 株式会社万葉2012年7月10日火曜日
  75. 75. 岡山Ruby会議01 Scope class Task < ActiveRecord::Base scope :on, ->(date) { where(:created_on => date)} .... 株式会社万葉2012年7月10日火曜日
  76. 76. 岡山Ruby会議01 コールバック class Task < ActiveRecord::Base before_validation :adjust_status private def adjust_status self.status = new if status != done && status != canceled end 万葉 株式会社2012年7月10日火曜日
  77. 77. 岡山Ruby会議01 コントローラに コードが溢れたら? 株式会社万葉2012年7月10日火曜日
  78. 78. 岡山Ruby会議01 コントローラに サブルーチンみたい なのが沢山 株式会社万葉2012年7月10日火曜日
  79. 79. 岡山Ruby会議01 パラメータやセッ ションがらみ以外は モデルへ 株式会社万葉2012年7月10日火曜日
  80. 80. 岡山Ruby会議01 パラメータを調査し て分岐したり加工し たりが多い場合 株式会社万葉2012年7月10日火曜日
  81. 81. 岡山Ruby会議01 if params[...] = ... ... end 株式会社万葉2012年7月10日火曜日
  82. 82. 岡山Ruby会議01 パラメータの構造を 工夫して モデルに任せる 株式会社万葉2012年7月10日火曜日
  83. 83. 岡山Ruby会議01 パラメータの受け渡し Controller 画面 <form..> params ハッシュ field の name key "task[name] " :task => {:name => 値} 株式会社万葉2012年7月10日火曜日
  84. 84. 岡山Ruby会議01 構造を練ることで 加工をモデルに 任せることができる 株式会社万葉2012年7月10日火曜日
  85. 85. 岡山Ruby会議01 task.attributes = params[:task] :task 以下の構造をさばくのは モデル(task)におまかせ 株式会社万葉2012年7月10日火曜日
  86. 86. 岡山Ruby会議01 ユーザーのロール等 による条件分岐が 多いとき 株式会社万葉2012年7月10日火曜日
  87. 87. 岡山Ruby会議01 if xxx ... elsif xxx ... elsif xxx ... end 株式会社万葉2012年7月10日火曜日
  88. 88. 岡山Ruby会議01 条件分岐をモデルや 専用レイヤーに 移動できるかも 株式会社万葉2012年7月10日火曜日
  89. 89. 岡山Ruby会議01 アクションを 分割したほうが よいかも 株式会社万葉2012年7月10日火曜日
  90. 90. 岡山Ruby会議01 丁寧すぎる 例外処理 株式会社万葉2012年7月10日火曜日
  91. 91. 岡山Ruby会議01 コントローラ単位や アプリ単位でも 処理できる 株式会社万葉2012年7月10日火曜日
  92. 92. 岡山Ruby会議01 ビューで使う変数が たくさんある場合 株式会社万葉2012年7月10日火曜日
  93. 93. 岡山Ruby会議01 @foo = ... @foo2 = ... @foo3 = ... @foo4 = ... 株式会社万葉2012年7月10日火曜日
  94. 94. 岡山Ruby会議01 単純なものなら ビューに直接 書けばいい 株式会社万葉2012年7月10日火曜日
  95. 95. 岡山Ruby会議01 <%= @size %> <%= @tasks.size %> 株式会社万葉2012年7月10日火曜日
  96. 96. 岡山Ruby会議01 ビュー •画面(HTMLやJSを作る) • レイアウトや部分テンプレート を使って構造化 株式会社万葉2012年7月10日火曜日
  97. 97. 岡山Ruby会議01 ビューに ロジックを 書いちゃだめ? 株式会社万葉2012年7月10日火曜日
  98. 98. 岡山Ruby会議01 合理的なら 問題ない 株式会社万葉2012年7月10日火曜日
  99. 99. 岡山Ruby会議01 ヘルパー •ビューで繰り返し現れるコード をメソッドに抽出 • 名前空間に注意 株式会社万葉2012年7月10日火曜日
  100. 100. 岡山Ruby会議01 モデルに 表示レイヤーの 実装しちゃだめ? 株式会社万葉2012年7月10日火曜日
  101. 101. 岡山Ruby会議01 合理的なら 問題ない 例)属性の装飾 株式会社万葉2012年7月10日火曜日
  102. 102. 岡山Ruby会議01 config/initializers •アプリが起動するときに呼ばれ る •フレームワークへのadd-on的 なコードの置き場 株式会社万葉2012年7月10日火曜日
  103. 103. 岡山Ruby会議01 データベース(RDB) •デフォルト値 •NULL不可 • 各種制約 • プロシージャ等 株式会社万葉2012年7月10日火曜日
  104. 104. 岡山Ruby会議01 バッチ処理 •cron等で定期的なタスクを実行 • 決まった時間に行う処理 • データの掃除 etc 株式会社万葉2012年7月10日火曜日
  105. 105. 岡山Ruby会議01 どんな名前を つけるのがよいか 株式会社万葉2012年7月10日火曜日
  106. 106. 岡山Ruby会議01 単数形と複数形を 区別する 株式会社万葉2012年7月10日火曜日
  107. 107. 岡山Ruby会議01 単語を短縮しない 株式会社万葉2012年7月10日火曜日
  108. 108. 岡山Ruby会議01 prefixは なるべくつけない 株式会社万葉2012年7月10日火曜日
  109. 109. 岡山Ruby会議01 関連名を 冗長にしない 株式会社万葉2012年7月10日火曜日
  110. 110. 岡山Ruby会議01 URLには名詞を 株式会社万葉2012年7月10日火曜日
  111. 111. 岡山Ruby会議01 値を返すメソッド名 には名詞を 株式会社万葉2012年7月10日火曜日
  112. 112. 岡山Ruby会議01 スコープには 「名詞を修飾する 語」を 株式会社万葉2012年7月10日火曜日
  113. 113. 岡山Ruby会議01 booleanカラムや 問い合わせは trueがどちらか わかるように 株式会社万葉2012年7月10日火曜日
  114. 114. 岡山Ruby会議01 本質的な 名前をつける 株式会社万葉2012年7月10日火曜日
  115. 115. 岡山Ruby会議01 Railsの文脈に あった単語を 選ぶ 株式会社万葉2012年7月10日火曜日
  116. 116. 岡山Ruby会議01 日本人にとって 楽な単語には 価値がある 株式会社万葉2012年7月10日火曜日
  117. 117. 岡山Ruby会議01 Enjoy Rails ! 株式会社万葉2012年7月10日火曜日

×