157
Sapporo RubyKaigi 03 株式会社万葉 Smell in Rails Apps Railsアプリ 野生のカン 2010.12.4 Yasuko Ohba Everyleaf Corp. 2010126日月曜日

Smell in Rails Apps (in Sapporo RubyKaigi03)

  • Upload
    nay

  • View
    5.179

  • Download
    2

Embed Size (px)

DESCRIPTION

Slides of my talk in Sapporo RubyKaigi03, on December 4th, 2010.

Citation preview

Page 1: Smell in Rails Apps (in Sapporo RubyKaigi03)

Sapporo RubyKaigi 03

株式会社万葉

Smell in Rails Apps

Railsアプリ野生のカン

2010.12.4Yasuko Ohba

Everyleaf Corp.

2010年12月6日月曜日

Page 2: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

祝・第三回Sappro RubyKaigi

2010年12月6日月曜日

Page 3: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

大場寧子@nay3

Yasuko Ohba

2010年12月6日月曜日

Page 4: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

JRuby on Rails実践開発ガイド

2010年12月6日月曜日

Page 5: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Ruby on Rails逆引きクイックリファレンス

2010年12月6日月曜日

Page 6: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

•http://www.kozuchi.net/•https://github.com/nay•株式会社万葉 (Everyleaf Corp.)

2010年12月6日月曜日

Page 7: Smell in Rails Apps (in Sapporo RubyKaigi03)

提供

株式会社万葉Everyleaf Corp.

2010年12月6日月曜日

Page 8: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

http://leafy.in/

2010年12月6日月曜日

Page 9: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

今日が誕生日です

It’s My Birthday

2010年12月6日月曜日

Page 10: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

今日のお話

Today’s Talk

2010年12月6日月曜日

Page 11: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

「Railsの話」

Requested topicis Rails

2010年12月6日月曜日

Page 12: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

新しいことあんまり

やってないorz

I have not tried much new things this year...

2010年12月6日月曜日

Page 13: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

まだRails2メインだし...orz

Still using Rails 2

2010年12月6日月曜日

Page 14: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

自分のうまくなった(気がする)こと

What are the points I improved this year?

2010年12月6日月曜日

Page 15: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

コードレビュー

Code Reviews

2010年12月6日月曜日

Page 16: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

リファクタリング

Refactoring

2010年12月6日月曜日

Page 17: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

良さそうな設計にはやめに到達

find good (might not be best) designs / solutions

in early stage

2010年12月6日月曜日

Page 18: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

罠を回避

Avoid traps

2010年12月6日月曜日

Page 19: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

そういうことを(須藤さんを目指して)話していきます

I’ll talk about pointsof those activities

2010年12月6日月曜日

Page 20: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

コードレビューは何から始める?

Where to start your code review ?

2010年12月6日月曜日

Page 21: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

設計資料

Design documents

2010年12月6日月曜日

Page 22: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

•Wiki•ノート•cucumber•rspec

2010年12月6日月曜日

Page 23: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

ゴールが書かれているか

Written goals

2010年12月6日月曜日

Page 24: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

「ユーザーがタイトルと本文から自分の日記を検索できる」

“A user can find his or her articles by words in title or body”

GOOD

2010年12月6日月曜日

Page 25: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

「日記検索(日付は別で)」

“Articles Search (there would be another feature for dates)”

BAD

2010年12月6日月曜日

Page 26: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

•User•詳細に少し触れる

With Some Details

•ほかの話題を加えないWithout Other Topics

2010年12月6日月曜日

Page 27: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

複雑なところに図を書いているか

Diagrams for complexity

2010年12月6日月曜日

Page 28: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

•Class, Objects•Modules, mix-in•状態遷移、状態の分類

About status

2010年12月6日月曜日

Page 29: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

ベン図意外といいVenn diagram is good

deleted

Shareddraft

2010年12月6日月曜日

Page 30: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

URL設計がコードの外でされているか

URL design in DOCUMENT

2010年12月6日月曜日

Page 31: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Wiki に書きますWe use wiki for URLs

URL メソッドコントローラ

アクション 説明

2010年12月6日月曜日

Page 32: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

URLは具体例で

Write URLs look like real

2010年12月6日月曜日

Page 33: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

/admin/users/3

2010年12月6日月曜日

Page 34: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

/admin/users/:id

2010年12月6日月曜日

Page 35: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

/admin/users/:id

2010年12月6日月曜日

Page 36: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

/admin/users/:id

/admin/:controller/:id?

2010年12月6日月曜日

Page 37: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

具体的なURLを目で見て美しさを評価

Look real URLs and feel nice or not

2010年12月6日月曜日

Page 38: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

RESTful I/F

2010年12月6日月曜日

Page 39: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

4つの動詞しか使わない

Use only 4 verbs

2010年12月6日月曜日

Page 40: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

(美内すずえ 「ガラスの仮面」より四つの言葉のエチュードの場面を引用)

2010年12月6日月曜日

Page 41: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

○○を取得するGet WHAT

○○を作成するCreate WHAT

○○を更新するUpdate WHAT

○○を削除するDelete WHAT

2010年12月6日月曜日

Page 42: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

名詞で調整する

Use whatever nouns

2010年12月6日月曜日

Page 43: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Example

2010年12月6日月曜日

Page 44: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

本を借りる

borrow a book

2010年12月6日月曜日

Page 45: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

borrow_book

2010年12月6日月曜日

Page 46: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Book

2010年12月6日月曜日

Page 47: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Bookborrow User

2010年12月6日月曜日

Page 48: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

/books/189

Bookborrow User

2010年12月6日月曜日

Page 49: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

/books/189

Bookborrow User

/borrow

2010年12月6日月曜日

Page 50: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Well, we change it after all...まあ、変更するし。。

POST/books/189

Bookborrow User

/borrow

2010年12月6日月曜日

Page 51: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Well, we change it after all...まあ、変更するし。。

POST/books/189

Bookborrow User

/borrow

2010年12月6日月曜日

Page 52: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Book

2010年12月6日月曜日

Page 53: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Bookborrowing借りること

of

2010年12月6日月曜日

Page 54: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Book Usercreate

borrowing借りること

of

2010年12月6日月曜日

Page 55: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Book Usercreate

borrowing借りること

of

2010年12月6日月曜日

Page 56: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

/books/189/

Book Usercreate

borrowing借りること

of

2010年12月6日月曜日

Page 57: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

/books/189/

Book Usercreate

borrowing借りること

of

borrowings

2010年12月6日月曜日

Page 58: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

/books/189/POST

Create

作る

Book Usercreate

borrowing借りること

of

borrowings

2010年12月6日月曜日

Page 59: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

REST語で考える

Think in REST lang.

2010年12月6日月曜日

Page 60: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Model ≠ Resource

2010年12月6日月曜日

Page 61: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

/a

Different Resources & Features from one model

A model classResources

/a/b

/a/c

1モデル : 多リソース

2010年12月6日月曜日

Page 62: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Controller

2010年12月6日月曜日

Page 63: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

フィルター

Controller Filters

2010年12月6日月曜日

Page 64: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

filters

too muchtoo less

2010年12月6日月曜日

Page 65: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

filters

too muchtoo less

Not DRY

2010年12月6日月曜日

Page 66: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

filters

too muchtoo less

Not DRY Complex

2010年12月6日月曜日

Page 67: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

before_filterには前提条件を

before-filters as conditions, not just

pre-tasks

2010年12月6日月曜日

Page 68: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

:only :except

2010年12月6日月曜日

Page 69: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

before_filter :find_book :only => [:show, :edit, :update]

2010年12月6日月曜日

Page 70: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

記述量で選ぶ?

choose simpler one ?

2010年12月6日月曜日

Page 71: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

記述量で選ぶ?

choose simpler one ?

2010年12月6日月曜日

Page 72: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

:only を使いましょう!

Use :only always !

2010年12月6日月曜日

Page 73: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

どのアクションがどのフィルターを通るかの可読性

You can easily checkwhich filter for which action

2010年12月6日月曜日

Page 74: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

指定されてないものは把握しづらい

It’s hard to understandthose do not appear

2010年12月6日月曜日

Page 75: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

A except :show, :editB only :show, :deleteC except :index

What filters for :show ?

2010年12月6日月曜日

Page 76: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

未来のことThink about future

2010年12月6日月曜日

Page 77: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

:except は未来を含む

:except is effective on future actions

2010年12月6日月曜日

Page 78: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

A except :show, :editB only :show, :deleteC except :index

add :confirm

2010年12月6日月曜日

Page 79: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

実装を足したい?引きたい?

Do you like adding filters or removing filters ?

2010年12月6日月曜日

Page 80: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

All or :only

2010年12月6日月曜日

Page 81: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

privateprotectedpublic

2010年12月6日月曜日

Page 82: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

例外処理

rescue errors

2010年12月6日月曜日

Page 83: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

アクション内の独自例外処理が必要なことは稀

rescues in actionsare rare

2010年12月6日月曜日

Page 84: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

特にJavaから来るとやりすぎる

People from Javaoften rescue errors

too much

2010年12月6日月曜日

Page 85: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

パラメータのチェックや加工

checks and modifications of

parameters

2010年12月6日月曜日

Page 86: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

もっと練れるケースがある

There might be better ways

2010年12月6日月曜日

Page 87: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

into Models

if params[:skip_preview] == '1' ...

2010年12月6日月曜日

Page 88: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

into Models

if params[:skip_preview] == '1' ...

2010年12月6日月曜日

Page 89: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

into Models

if params[:skip_preview] == '1' ...

params[:book][:skip_preview]

2010年12月6日月曜日

Page 90: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

into Models

if params[:skip_preview] == '1' ...

attr_accessor :skip_preview...if skip_preview? ...

params[:book][:skip_preview]

2010年12月6日月曜日

Page 91: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

transactions

2010年12月6日月曜日

Page 92: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

コントローラでのトランザクションは不要なことが多い

Most transaction blocks in controllers are not really

necessary

2010年12月6日月曜日

Page 93: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

•それコールバックで(rUse AR callbacks

•モデルの専用メソッドMove it into an original method in the model

2010年12月6日月曜日

Page 94: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

抽象化

Abstraction

2010年12月6日月曜日

Page 95: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

ApplicationController

Admin::BaseController

Admin::UsersController

Good

filters, utilities

filters, utilities

actions filters, utilities

2010年12月6日月曜日

Page 96: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

ApplicationController

Admin::BaseController

Admin::UsersController

Bad

filters, utilities

filters, utilities

actions filters, utilities

actions

actions

2010年12月6日月曜日

Page 97: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

A B C

A B AC B

D

Why bad ?Controller

ControllerController

2010年12月6日月曜日

Page 98: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

A B C

A B AC B

D

Why bad ?Controller

ControllerController

?

2010年12月6日月曜日

Page 99: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

A B C

A B AC B

D

view

view

view

?

Why bad ?Controller

ControllerController

?

2010年12月6日月曜日

Page 100: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

A B C

A B AC B

D

view

view

view

?

Why bad ?Controller

ControllerController

?

2010年12月6日月曜日

Page 101: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

アクション共有は難易度が高い

Sharing actionsis tough

2010年12月6日月曜日

Page 102: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

慎重になるべき

Be prudentto share actions

2010年12月6日月曜日

Page 103: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

アクション共有には継承よりMix-in

Use mix-infor action sharing

2010年12月6日月曜日

Page 104: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

ビューは継承でなくパーシャルで

Share views using partials, not via

abstraction

2010年12月6日月曜日

Page 105: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

PossibleA BC

A B AC B

D

Module

Controller Controller

Module

2010年12月6日月曜日

Page 106: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

PossibleA BC

A B AC B

D

Module

Controller

view

view

partial views

Controller

Module

2010年12月6日月曜日

Page 107: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Model (ActiveRecord)

2010年12月6日月曜日

Page 108: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

attr_protectedattr_accessible

2010年12月6日月曜日

Page 109: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

不正なパラメータからモデルを守る

Protect model from evil params

# {:book => {:user_id => 10, ...}}Book.create(params[:book])

2010年12月6日月曜日

Page 110: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Exampleattr_protected :hashed_password, :salt, :activated

attr_accessible :name, :email

2010年12月6日月曜日

Page 111: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

記述がシンプルになるほうを選ぶ?

Choose simpler one?

2010年12月6日月曜日

Page 112: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

attr_protectedを使いましょう!

Use attr_protected always !

2010年12月6日月曜日

Page 113: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

可読性もさることながら

More readable? Yes. And..

2010年12月6日月曜日

Page 114: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

attr_accessibleは事故のもと!

Awful accidentshappen if you use attr_accessible !

2010年12月6日月曜日

Page 115: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

新しい属性を追加するときにつまづく

Trouble with NEW attributes

2010年12月6日月曜日

Page 116: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

attr_accessible :name, :email

未来に追加される属性も拒絶指定

Rejecting future attributes

:address:phone_number:kana_name

2010年12月6日月曜日

Page 117: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

特に新人が!

Especially it’s dangerous

for beginners !

2010年12月6日月曜日

Page 118: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

「カラムを追加したんですがセーブされ

ません...」

“Well, I added a column but it’s not

saved...”

2010年12月6日月曜日

Page 119: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

時間が失われる

time will be lost

2010年12月6日月曜日

Page 120: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

継承元やモジュールやプラグインで使われていたらなお大変!

Really hard if it’s used in super class, modules or plug-ins !

?1 new attribute

2010年12月6日月曜日

Page 121: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

継承元やモジュールやプラグインで使われていたらなお大変!

Really hard if it’s used in super class, modules or plug-ins !

?1

attr_accessible

new attribute

2010年12月6日月曜日

Page 122: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

継承元やモジュールやプラグインで使われていたらなお大変!

Really hard if it’s used in super class, modules or plug-ins !

?1

attr_accessible

new attribute

2010年12月6日月曜日

Page 123: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

attr_accessible

2010年12月6日月曜日

Page 124: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

attr_accessible

2010年12月6日月曜日

Page 125: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

!2010年12月6日月曜日

Page 126: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

保存されることを確信してるなら

Use ! if you believe it can be saved

2010年12月6日月曜日

Page 127: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

失敗する可能性def some_action @obj.saveend

This might fail

2010年12月6日月曜日

Page 128: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

•save•save!•create•update_attribute

2010年12月6日月曜日

Page 129: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Callbacks

2010年12月6日月曜日

Page 130: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

「なぜか保存されないんですけど...」

I don’t know why this won’t be saved...

2010年12月6日月曜日

Page 131: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

set and cry

before_validation :set_sweet_flagprivatedef set_sweet_flag @my_sweet_flag = happy?end

2010年12月6日月曜日

Page 132: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

before_validation :set_sweet_flagprivatedef set_sweet_flag @my_sweet_flag = happy? trueend

2010年12月6日月曜日

Page 133: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

検証まわり

Validation

2010年12月6日月曜日

Page 134: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

また今度

need another 30min.

2010年12月6日月曜日

Page 135: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

関連をつかう

Use associations

2010年12月6日月曜日

Page 136: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

FKでの検索はあやしい

@books = Book.where(:user_id => current_user.id)

finding by a foreign key ?

2010年12月6日月曜日

Page 137: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

FKでの検索はあやしい

@books = Book.where(:user_id => current_user.id)

finding by a foreign key ?

@books = current_user.books

2010年12月6日月曜日

Page 138: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

逆に関連オブジェクトよりFKがいいことも

However, sometimes FK is better than object

2010年12月6日月曜日

Page 139: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

不要な検索を避けるavoid unnecessary SQL

if book.publisher.id

2010年12月6日月曜日

Page 140: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

不要な検索を避けるavoid unnecessary SQL

if book.publisher.id

if book.publisher_id

2010年12月6日月曜日

Page 141: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

例外をなげよう

raise errors

2010年12月6日月曜日

Page 142: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

独自例外クラスはあるのが普通

App’s original error classes are expected

2010年12月6日月曜日

Page 143: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

routes.rb

2010年12月6日月曜日

Page 144: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

コントローラ別に整理

routes should be organized by controllers, not resources

2010年12月6日月曜日

Page 145: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Comments

2010年12月6日月曜日

Page 146: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

コードが不自然なところに理由を書く

Reason is required where the code is not natural

2010年12月6日月曜日

Page 147: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

「不自然」の例• Leaving code commented outコードのコメントアウトを残してる

• not using common helper methodヘルパーメソッドを使っていない

• checking it’s really nilfalseとnilを区別してる•etc...

Things unnatural

2010年12月6日月曜日

Page 148: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

あるべきコメントがないのも指摘する

comments should be checked in code reviews

2010年12月6日月曜日

Page 149: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

最後にひとつ

The last topic

2010年12月6日月曜日

Page 150: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

スライドに英語を入れる理由

Why I have Englishon my slides

2010年12月6日月曜日

Page 151: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

かっこいいからじゃないです

Not becauseit’s cool

2010年12月6日月曜日

Page 152: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

後から読める人が増えるから

To get more readersafter my talk is over

2010年12月6日月曜日

Page 153: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

未来

future

2010年12月6日月曜日

Page 154: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

自分でない誰か

Somebody else

2010年12月6日月曜日

Page 155: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

意識するといい気がする

I think imaging future and somebody else is efficient

2010年12月6日月曜日

Page 156: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

集合体の一部としてコードを書く

Write code feeling the mass

2010年12月6日月曜日

Page 157: Smell in Rails Apps (in Sapporo RubyKaigi03)

株式会社万葉

Sapporo RubyKaigi 03

Thank you!

2010年12月6日月曜日