good names in right places on rails

117
岡山Ruby会議01 株式会社万葉 良い場所に、良い名前で Good Names in the right places on Rails 2012. 7. 7 株式会社万葉 大場寧子(@nay3) 2012710日火曜日

Upload: nay

Post on 02-Nov-2014

11 views

Category:

Documents


0 download

DESCRIPTION

Presentation for Okayama RubyKaigi01. Written in Japanese only.

TRANSCRIPT

Page 1: Good Names in Right Places on Rails

岡山Ruby会議01

株式会社万葉

良い場所に、良い名前でGood Names in the right

places on Rails

2012. 7. 7株式会社万葉 大場寧子(@nay3)

2012年7月10日火曜日

Page 2: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

祝!!

岡山Ruby会議01

2012年7月10日火曜日

Page 3: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

私と岡山

•曾祖母が住んでいました•山の方に先祖のお墓があるようです

2012年7月10日火曜日

Page 4: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

昨晩 @岡山

2012年7月10日火曜日

Page 5: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

1985年 @岡山

2012年7月10日火曜日

Page 6: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

岡崎理枝子さんオリーズデザイン

CSS NiTEin OKAYAMA

2012年7月10日火曜日

Page 7: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

山口真央さん(@gutch_jp)

2012年7月10日火曜日

Page 8: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

Romantic Ruby!

...ロビー活動不足!!!2012年7月10日火曜日

Page 9: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

自己紹介

•大場寧子 おおばやすこ•@nay3•プログラマ•株式会社万葉 代表取締役社長

2012年7月10日火曜日

Page 10: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

2006年からRubyを使うように

2012年7月10日火曜日

Page 11: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

たのしい開発スタートアップRuby

Coming Soon!

7/31

2012年7月10日火曜日

Page 12: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

私の関心事

•実装するのが好きです•メンテナンスしやすいコードが好き

2012年7月10日火曜日

Page 13: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

会場のみなさまは?

•Ruby触ったことのある人•Rails触ったことのある人•Webアプリ作ったことのある人•Railsでお仕事している人

2012年7月10日火曜日

Page 14: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

今日の話題

•Railsアプリ開発入門•何をどこに書くか•どんな名前をつけるか

2012年7月10日火曜日

Page 15: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

Railsアプリ開発入門

2012年7月10日火曜日

Page 16: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

ライブコーディングで

ご紹介2012年7月10日火曜日

Page 17: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

実装だけじゃなく要件や設計から雰囲気をご紹介

2012年7月10日火曜日

Page 18: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

時間が足りないので実演はさわりだけ

2012年7月10日火曜日

Page 19: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

私とペアプロしているつもりで

どうぞ :)

2012年7月10日火曜日

Page 20: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

1. 環境

2012年7月10日火曜日

Page 21: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

環境•Mac OS X•RVM•Ruby1.9.3•Rails 3.2.6

2012年7月10日火曜日

Page 22: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

2. 何を作るか決める

2012年7月10日火曜日

Page 23: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

定番の掲示板...は飽きたので

2012年7月10日火曜日

Page 24: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

タスク管理

2012年7月10日火曜日

Page 25: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

今日絶対やりたいこと最大3つを登録する

2012年7月10日火曜日

Page 26: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

できたかどうかチェックできる

2012年7月10日火曜日

Page 27: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

今日もがんばったと思える

2012年7月10日火曜日

Page 28: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

色わけしたい

•人生の目標にとって大事•その他

2012年7月10日火曜日

Page 29: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

これまでのタスクを見られる

2012年7月10日火曜日

Page 30: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

トップページ今日のタスク

チケット#218完了勉強会に参加

編集2012/7/62012/7/52012/7/4

2012/7/7

完了(レ)/あきらめ(×)/未記入2012年7月10日火曜日

Page 31: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

過去のページ2012/7/7のタスク

チケット#218完了勉強会に参加

2012/7/62012/7/52012/7/4

2012/7/7

2012年7月10日火曜日

Page 32: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

今日のタスクの編集今日のタスク

更新

チケット218完了勉強会に参加

重要重要重要

2012年7月10日火曜日

Page 33: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

3. 設計2012年7月10日火曜日

Page 34: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

アプリ名を決める

2012年7月10日火曜日

Page 35: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

1日に3つのタスク...(でも設定で変えるかも?)

2012年7月10日火曜日

Page 36: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

数はやめて意味にしよう

2012年7月10日火曜日

Page 37: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

mitMost Important

Tasks

2012年7月10日火曜日

Page 38: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

モデル設計

2012年7月10日火曜日

Page 39: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

RailsのMVC

コントローラ

モデル

ビュー

2012年7月10日火曜日

Page 40: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

モデル

•アプリケーションの中核となるデータやロジックを書く•オブジェクト指向で

2012年7月10日火曜日

Page 41: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

mitのモデル•Task•タスク1件を表すモデル•User•ユーザー•※将来追加する

2012年7月10日火曜日

Page 42: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

もうひとつ•Day•ユーザー1人の1日のタスクをまとめるモデル•DB的にはなくてもいいけどRails的に楽

2012年7月10日火曜日

Page 43: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

Day Tasktasks

day

クラス図

day_id

2012年7月10日火曜日

Page 44: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

Task•day_id - 日•name - 名前•lifework - 人生に重要?•status - new/done/canceled

2012年7月10日火曜日

Page 45: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

Day

•created_on - 日2012年7月10日火曜日

Page 46: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

URL設計

2012年7月10日火曜日

Page 47: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

URLの考え方•トップは /•名詞や名詞を修飾する語を使う•/tasks/done ○•/create_task ×

2012年7月10日火曜日

Page 48: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

RESTful•Rails には良くあるCRUD 向けのお決まりのURL、HTTPメソッド、アクションのセットがある•うまくはまる時は使う

2012年7月10日火曜日

Page 49: Good Names in Right Places on Rails

株式会社万葉

岡山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日火曜日

Page 50: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

mitの主なリクエスト1.トップの表示2.過去のタスクの表示3.今日のタスクの編集画面の表示4.今日のタスクの更新実行5.タスクのステータス変更(Ajax)

2012年7月10日火曜日

Page 51: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

1.トップの表示URL /

HTTPメソッド GET

コントローラ TasksController

アクション index

2012年7月10日火曜日

Page 52: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

2.過去タスクの表示URL /tasks/2012/7/6

HTTPメソッド GET

コントローラ TasksController

アクション daily

2012年7月10日火曜日

Page 53: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

3.今日のタスクの編集画面

URL /today/edit

HTTPメソッド GET

コントローラ TasksController

アクション edit_today

2012年7月10日火曜日

Page 54: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

4.今日のタスクの編集実行

URL /today

HTTPメソッド PUT

コントローラ TasksController

アクション update_today

2012年7月10日火曜日

Page 55: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

5.タスクのステータス変更

URL /tasks/17

HTTPメソッド PUT

コントローラ TasksController

アクション update

2012年7月10日火曜日

Page 56: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

4. テスト/スペック

2012年7月10日火曜日

Page 57: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

モデルのSpecなどを書きます

2012年7月10日火曜日

Page 58: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

詳しくは山本さんの発表で :)

2012年7月10日火曜日

Page 59: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

5. 実装・確認

2012年7月10日火曜日

Page 60: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

ライブコーディング

2012年7月10日火曜日

Page 61: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

http://github.com/nay/mit

2012年7月10日火曜日

Page 62: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

何をどこに書くか

2012年7月10日火曜日

Page 63: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

Rails内の “場所”•routes.rb•コントローラ•モデル•ビュー•ヘルパー•config/initializers•データベース•バッチ処理

2012年7月10日火曜日

Page 64: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

routes.rb

•どのURL+HTTPメソッドをどのコントローラのアクションに案内するか•アクションへのパラメータのチェックや、付与ができる

2012年7月10日火曜日

Page 65: Good Names in Right Places on Rails

株式会社万葉

岡山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日火曜日

Page 66: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

コントローラ

•リクエストの内容をチェックしておかしければハネる•ビューで使うデータを用意する•どのビューを使うか指定する

2012年7月10日火曜日

Page 67: Good Names in Right Places on Rails

株式会社万葉

岡山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日火曜日

Page 68: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

モデル

•アプリケーション内のデータとそれに付随するロジック•関連するモデルを簡単に呼び出す

2012年7月10日火曜日

Page 69: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

コントローラはすっきりと

2012年7月10日火曜日

Page 70: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

モデルにコードを集める(メソッドを作る)

2012年7月10日火曜日

Page 71: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

ただしMVCを乱さない

•モデルではリクエストパラメータやセッションを扱わない•アクションごとにモデルのメソッドを作ったりしない

2012年7月10日火曜日

Page 72: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

積極的に使おう

•関連 (Association)•検証•Scope•コールバック (before_saveなど)

2012年7月10日火曜日

Page 73: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

関連class Day < ActiveRecord::Base

has_many :tasks, :dependent => :destroy, :autosave => true....

@day.tasks

2012年7月10日火曜日

Page 74: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

検証

class Task < ActiveRecord::Base

validates status, :presence => true ...

2012年7月10日火曜日

Page 75: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

class Task < ActiveRecord::Base scope :on, ->(date) {where(:created_on => date)}

....

Scope

2012年7月10日火曜日

Page 76: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

コールバックclass Task < ActiveRecord::Basebefore_validation :adjust_status

privatedef adjust_status self.status = 'new' if status != 'done' && status != 'canceled' end

2012年7月10日火曜日

Page 77: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

コントローラにコードが溢れたら?

2012年7月10日火曜日

Page 78: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

コントローラにサブルーチンみたいなのが沢山

2012年7月10日火曜日

Page 79: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

パラメータやセッションがらみ以外は

モデルへ

2012年7月10日火曜日

Page 80: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

パラメータを調査して分岐したり加工したりが多い場合

2012年7月10日火曜日

Page 81: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

if params[...] = ......end

2012年7月10日火曜日

Page 82: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

パラメータの構造を工夫して

モデルに任せる

2012年7月10日火曜日

Page 83: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

パラメータの受け渡し画面

<form..>ハッシュ

Controller

params

field の name key

"task[name] " :task => {:name => 値}

2012年7月10日火曜日

Page 84: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

構造を練ることで加工をモデルに

任せることができる

2012年7月10日火曜日

Page 85: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

task.attributes = params[:task]:task 以下の構造をさばくのはモデル(task)におまかせ

2012年7月10日火曜日

Page 86: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

ユーザーのロール等による条件分岐が多いとき

2012年7月10日火曜日

Page 87: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

if xxx...elsif xxx...elsif xxx...end

2012年7月10日火曜日

Page 88: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

条件分岐をモデルや専用レイヤーに移動できるかも

2012年7月10日火曜日

Page 89: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

アクションを分割したほうがよいかも

2012年7月10日火曜日

Page 90: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

丁寧すぎる例外処理

2012年7月10日火曜日

Page 91: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

コントローラ単位やアプリ単位でも処理できる

2012年7月10日火曜日

Page 92: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

ビューで使う変数がたくさんある場合

2012年7月10日火曜日

Page 93: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

@foo = ...@foo2 = ...@foo3 = ...@foo4 = ...

2012年7月10日火曜日

Page 94: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

単純なものならビューに直接書けばいい

2012年7月10日火曜日

Page 95: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

<%= @size %>

<%= @tasks.size %>

2012年7月10日火曜日

Page 96: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

ビュー

•画面(HTMLやJSを作る)•レイアウトや部分テンプレートを使って構造化

2012年7月10日火曜日

Page 97: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

ビューにロジックを書いちゃだめ?

2012年7月10日火曜日

Page 98: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

合理的なら問題ない

2012年7月10日火曜日

Page 99: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

ヘルパー

•ビューで繰り返し現れるコードをメソッドに抽出•名前空間に注意

2012年7月10日火曜日

Page 100: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

モデルに表示レイヤーの実装しちゃだめ?

2012年7月10日火曜日

Page 101: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

合理的なら問題ない

例)属性の装飾

2012年7月10日火曜日

Page 102: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

config/initializers

•アプリが起動するときに呼ばれる•フレームワークへのadd-on的なコードの置き場

2012年7月10日火曜日

Page 103: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

データベース(RDB)

•デフォルト値•NULL不可•各種制約•プロシージャ等

2012年7月10日火曜日

Page 104: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

バッチ処理

•cron等で定期的なタスクを実行•決まった時間に行う処理•データの掃除 etc

2012年7月10日火曜日

Page 105: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

どんな名前をつけるのがよいか

2012年7月10日火曜日

Page 106: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

単数形と複数形を区別する

2012年7月10日火曜日

Page 107: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

単語を短縮しない

2012年7月10日火曜日

Page 108: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

prefixはなるべくつけない

2012年7月10日火曜日

Page 109: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

関連名を冗長にしない

2012年7月10日火曜日

Page 110: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

URLには名詞を

2012年7月10日火曜日

Page 111: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

値を返すメソッド名には名詞を

2012年7月10日火曜日

Page 112: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

スコープには「名詞を修飾する

語」を

2012年7月10日火曜日

Page 113: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

booleanカラムや問い合わせはtrueがどちらかわかるように

2012年7月10日火曜日

Page 114: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

本質的な名前をつける

2012年7月10日火曜日

Page 115: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

Railsの文脈にあった単語を選ぶ

2012年7月10日火曜日

Page 116: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

日本人にとって楽な単語には価値がある

2012年7月10日火曜日

Page 117: Good Names in Right Places on Rails

株式会社万葉

岡山Ruby会議01

EnjoyRails !

2012年7月10日火曜日