good names in right places on rails
DESCRIPTION
Presentation for Okayama RubyKaigi01. Written in Japanese only.TRANSCRIPT
岡山Ruby会議01
株式会社万葉
良い場所に、良い名前でGood Names in the right
places on Rails
2012. 7. 7株式会社万葉 大場寧子(@nay3)
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
祝!!
岡山Ruby会議01
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
私と岡山
•曾祖母が住んでいました•山の方に先祖のお墓があるようです
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
昨晩 @岡山
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
1985年 @岡山
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
岡崎理枝子さんオリーズデザイン
CSS NiTEin OKAYAMA
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
山口真央さん(@gutch_jp)
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
Romantic Ruby!
...ロビー活動不足!!!2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
自己紹介
•大場寧子 おおばやすこ•@nay3•プログラマ•株式会社万葉 代表取締役社長
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
2006年からRubyを使うように
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
たのしい開発スタートアップRuby
Coming Soon!
7/31
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
私の関心事
•実装するのが好きです•メンテナンスしやすいコードが好き
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
会場のみなさまは?
•Ruby触ったことのある人•Rails触ったことのある人•Webアプリ作ったことのある人•Railsでお仕事している人
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
今日の話題
•Railsアプリ開発入門•何をどこに書くか•どんな名前をつけるか
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
Railsアプリ開発入門
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
ライブコーディングで
ご紹介2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
実装だけじゃなく要件や設計から雰囲気をご紹介
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
時間が足りないので実演はさわりだけ
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
私とペアプロしているつもりで
どうぞ :)
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
1. 環境
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
環境•Mac OS X•RVM•Ruby1.9.3•Rails 3.2.6
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
2. 何を作るか決める
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
定番の掲示板...は飽きたので
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
タスク管理
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
今日絶対やりたいこと最大3つを登録する
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
できたかどうかチェックできる
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
今日もがんばったと思える
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
色わけしたい
•人生の目標にとって大事•その他
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
これまでのタスクを見られる
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
トップページ今日のタスク
チケット#218完了勉強会に参加
編集2012/7/62012/7/52012/7/4
2012/7/7
完了(レ)/あきらめ(×)/未記入2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
過去のページ2012/7/7のタスク
チケット#218完了勉強会に参加
2012/7/62012/7/52012/7/4
2012/7/7
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
今日のタスクの編集今日のタスク
更新
チケット218完了勉強会に参加
重要重要重要
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
3. 設計2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
アプリ名を決める
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
1日に3つのタスク...(でも設定で変えるかも?)
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
数はやめて意味にしよう
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
mitMost Important
Tasks
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
モデル設計
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
RailsのMVC
コントローラ
モデル
ビュー
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
モデル
•アプリケーションの中核となるデータやロジックを書く•オブジェクト指向で
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
mitのモデル•Task•タスク1件を表すモデル•User•ユーザー•※将来追加する
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
もうひとつ•Day•ユーザー1人の1日のタスクをまとめるモデル•DB的にはなくてもいいけどRails的に楽
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
Day Tasktasks
day
クラス図
day_id
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
Task•day_id - 日•name - 名前•lifework - 人生に重要?•status - new/done/canceled
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
Day
•created_on - 日2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
URL設計
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
URLの考え方•トップは /•名詞や名詞を修飾する語を使う•/tasks/done ○•/create_task ×
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
RESTful•Rails には良くあるCRUD 向けのお決まりのURL、HTTPメソッド、アクションのセットがある•うまくはまる時は使う
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
よくあるセット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 削除実行
リソース名 group の場合
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
mitの主なリクエスト1.トップの表示2.過去のタスクの表示3.今日のタスクの編集画面の表示4.今日のタスクの更新実行5.タスクのステータス変更(Ajax)
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
1.トップの表示URL /
HTTPメソッド GET
コントローラ TasksController
アクション index
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
2.過去タスクの表示URL /tasks/2012/7/6
HTTPメソッド GET
コントローラ TasksController
アクション daily
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
3.今日のタスクの編集画面
URL /today/edit
HTTPメソッド GET
コントローラ TasksController
アクション edit_today
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
4.今日のタスクの編集実行
URL /today
HTTPメソッド PUT
コントローラ TasksController
アクション update_today
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
5.タスクのステータス変更
URL /tasks/17
HTTPメソッド PUT
コントローラ TasksController
アクション update
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
4. テスト/スペック
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
モデルのSpecなどを書きます
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
詳しくは山本さんの発表で :)
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
5. 実装・確認
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
ライブコーディング
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
http://github.com/nay/mit
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
何をどこに書くか
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
Rails内の “場所”•routes.rb•コントローラ•モデル•ビュー•ヘルパー•config/initializers•データベース•バッチ処理
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
routes.rb
•どのURL+HTTPメソッドをどのコントローラのアクションに案内するか•アクションへのパラメータのチェックや、付与ができる
2012年7月10日火曜日
株式会社万葉
岡山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日火曜日
株式会社万葉
岡山Ruby会議01
コントローラ
•リクエストの内容をチェックしておかしければハネる•ビューで使うデータを用意する•どのビューを使うか指定する
2012年7月10日火曜日
株式会社万葉
岡山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日火曜日
株式会社万葉
岡山Ruby会議01
モデル
•アプリケーション内のデータとそれに付随するロジック•関連するモデルを簡単に呼び出す
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
コントローラはすっきりと
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
モデルにコードを集める(メソッドを作る)
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
ただしMVCを乱さない
•モデルではリクエストパラメータやセッションを扱わない•アクションごとにモデルのメソッドを作ったりしない
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
積極的に使おう
•関連 (Association)•検証•Scope•コールバック (before_saveなど)
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
関連class Day < ActiveRecord::Base
has_many :tasks, :dependent => :destroy, :autosave => true....
@day.tasks
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
検証
class Task < ActiveRecord::Base
validates status, :presence => true ...
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
class Task < ActiveRecord::Base scope :on, ->(date) {where(:created_on => date)}
....
Scope
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
コールバックclass Task < ActiveRecord::Basebefore_validation :adjust_status
privatedef adjust_status self.status = 'new' if status != 'done' && status != 'canceled' end
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
コントローラにコードが溢れたら?
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
コントローラにサブルーチンみたいなのが沢山
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
パラメータやセッションがらみ以外は
モデルへ
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
パラメータを調査して分岐したり加工したりが多い場合
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
if params[...] = ......end
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
パラメータの構造を工夫して
モデルに任せる
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
パラメータの受け渡し画面
<form..>ハッシュ
Controller
params
field の name key
"task[name] " :task => {:name => 値}
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
構造を練ることで加工をモデルに
任せることができる
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
task.attributes = params[:task]:task 以下の構造をさばくのはモデル(task)におまかせ
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
ユーザーのロール等による条件分岐が多いとき
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
if xxx...elsif xxx...elsif xxx...end
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
条件分岐をモデルや専用レイヤーに移動できるかも
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
アクションを分割したほうがよいかも
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
丁寧すぎる例外処理
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
コントローラ単位やアプリ単位でも処理できる
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
ビューで使う変数がたくさんある場合
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
@foo = ...@foo2 = ...@foo3 = ...@foo4 = ...
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
単純なものならビューに直接書けばいい
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
<%= @size %>
<%= @tasks.size %>
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
ビュー
•画面(HTMLやJSを作る)•レイアウトや部分テンプレートを使って構造化
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
ビューにロジックを書いちゃだめ?
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
合理的なら問題ない
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
ヘルパー
•ビューで繰り返し現れるコードをメソッドに抽出•名前空間に注意
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
モデルに表示レイヤーの実装しちゃだめ?
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
合理的なら問題ない
例)属性の装飾
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
config/initializers
•アプリが起動するときに呼ばれる•フレームワークへのadd-on的なコードの置き場
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
データベース(RDB)
•デフォルト値•NULL不可•各種制約•プロシージャ等
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
バッチ処理
•cron等で定期的なタスクを実行•決まった時間に行う処理•データの掃除 etc
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
どんな名前をつけるのがよいか
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
単数形と複数形を区別する
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
単語を短縮しない
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
prefixはなるべくつけない
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
関連名を冗長にしない
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
URLには名詞を
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
値を返すメソッド名には名詞を
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
スコープには「名詞を修飾する
語」を
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
booleanカラムや問い合わせはtrueがどちらかわかるように
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
本質的な名前をつける
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
Railsの文脈にあった単語を選ぶ
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
日本人にとって楽な単語には価値がある
2012年7月10日火曜日
株式会社万葉
岡山Ruby会議01
EnjoyRails !
2012年7月10日火曜日