この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは、SHIMADAです。
最近、オライリー社の新刊「プログラマが知るべき97のこと」がTwitterで話題に上っているようですね。
ここでは、Railsプログラマが知るべきことを挙げてみました。
残念ながら97も思いつかなかったので、25個です。看板に偽りありですね。ごめんなさい!
■ コントローラ
- 行数よりもインデントの深さに気をつける
- if-then-elseをネストしたくなったらロジックが間違っている
- アクションでないメソッドはprotected/privateにする
- 行数を減らす目的でbeforeフィルタを書かない
- グローバル変数、インスタンス変数にアクセスするポイントを集中させる
- グローバル変数(paramsとか)に代入しない
- ダイナミックファイダを使えないfindをみつけたらモデルのメソッド/named_scopeにする
■ ビュー
- eachとif以外のロジックを書かない
- 複雑になるところはヘルパにまとめる
- 分からないことはモデルに聞く
- 分割するためだけにパーシャルしない
- 代入とか副作用の起こることをしない
- eachの中でSQLが走らないかチェックする
■ モデル
- DBのテーブルを持たないクラスはAR::Baseを継承しない(笑
- テーブルを持たないクラスのうち、多態を使う一連のグループはサブディレクトリを作ってモジュールにまとめる
- モジュールとディレクトリ名の命名規約はRailsに合わせる
- モデルが大きくなってきたら機能群をモジュールに切り出してincludeする
- 共有しないモジュールはクラス名::モジュール名にしてクラスと同じ名前のディレクトリに入れる
- モジュール名は-ableを気取ってみる
- モジュールに切り出すときはクラス内にモジュールを作ってテストが通るように
- 定数はselectable_attrを使う
- 理由を説明できないfind_by_sqlは使わない
- conditionsをnamed_scopeにできないか検討する
■ その他一般論
- 引数に代入とかしない
- あるメソッドの中で同じオブジェクトへのメソッド呼び出しが多い場合、メソッド自体を相手に移すことを検討する
■ さいごに
いかがでしょうか。
皆さんもそれぞれ「自分はこうすべきだと思う」「これは知っておくべき」という経験則を持っているかと思います。
こういうものを集めて洗練していくと「ベストプラクティス」と呼ばれるものができあがります。
また、これらを体系的に
- 名前
- 背景となる状況
- 課題点
- 解決策
としてまとめていくと、パタンランゲージができあがります。
みんなで知恵を出しあって、いきいきとしたシステム開発を進めて行きましょう。
……おっと、さっそくCuriさんからビューについてひとことあるようです。
- 「SEOやEFOのことは頭に入れておけ」
「エントリーフォーム最適化」なんて言葉があるんですね。勉強になりました!