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

Good Names in Right Places on Rails

Nov 02, 2014

Download

Documents

nay

Presentation for Okayama RubyKaigi01. Written in Japanese only.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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日火曜日