SonicGardenコードレビュー勉強会#2 に参加しました
広島からリモートで、SonicGardenコードレビュー勉強会#2 に参加しました。
何をしたか
SonicGardenさんの主催する、コードレビュー勉強会に参加しました。
Ruby on Railsのソースコードレビューになります。
今回で2回目です。10名の参加でした。
なぜ参加したのか
実は、私はSonicGardenさんのソニックガーデンギルドに挑戦中なのです。
その一環としてコードレビューを受けるのですが、ほかの人のコードレビューにも参加して、学習を加速させるというわけです。
どうやったのか
Google Hangouts on Airというサービスを利用して参加しました。
これは、ライブ配信を行いながらビデオ通話やチャットができ、配信を終了するとYoutubeに動画として登録される、というものです。すごい!
レビューアはCTOの松村さんです。
困ったこと
はじめのうち、音声がハウリングしてしまい、よく聞き取れなくなりました。
レビューアとレビューイ以外がマイクをOFFにするといい具合になったので、チャット等で質問を投げる形式ですすめました。
感想
コードレビューをリアルタイムで視聴して、その場で質問できるというのは、すごくよい勉強になると思いました。
今回は見ながら考えてばかりで、質問投げれなかったのですが…
学んだこと
今回も含め、過去のレビュー動画を見て学んだことを、列挙してみます。
全般
- 極力コードが短くなるようにする
- ひとつのメソッドにひとつの仕事を書く
- セッションに大きなデータ入れない
- Ruby1.9以降のhashシンタックスを使ってコードを短く書く
controller
- ロジックはconrollerではなくmodelに書く
- scaffoldくらいの量のcontrollerで機能を実現できるのが理想
- 表示に関する処理は、controllerではなくviewやhelperに書く
- 共通した処理はbefore_actionなどのフィルターにまとめる
- find!メソッドでデータ取れなければ、例外で404ページに飛ばせる
model
- 正しいリレーションにする (belongs_toを書く)
- scopeでModelに検索条件を定義できる
- “sexy” validations を利用する
- ActiveRecordのメソッドチェインを使って流れるように書く
- after_saveなど、ActiveRecordのコールバックを効果的に使う
- アソシエーションしたモデルは、直接操作しない
- 親オブジェクトからメソッドチェイン的にbuildを呼び出すと、引数忘れがない
- find_or_create_by便利
- 1対多のモデルでaccepts_nested_attributes_forを使うとコードがすっきりする
- has_manyなモデルはviewでfields_forを使う
- default_value_forを使うと、modelにデフォルト値が簡単に書ける
view
- helperを使ってDRYにする
- erbで文字列に変数を連結するときは、+でつなげるより、#{ 変数 } を使う
- simple_formを使うと、シンプルなフォームなら早く作れる(デザインが凝った画面は大変かも)
- パンくずリストはgretelを使うとよい
- hamlでインデントつけてもHTML通りにならない。content_tag_forを使う(これは好み)
routes
- routesのresourcesブロックでmember(単票系)やcollection(一覧系)が使える
- リソースを入れ子にして、親を only:[ ] だけにすると、子供のURLのみ生成
- モデルのカーディナリティを意識したURL設計をする
そのほか
- githubでURLをcompare/<ハッシュ>…masterと打てばコンペアできる
- deviseとomniauthで、Twitterとgithubアカウントでのログインを可能に
- better_errors、binding_of_callerを入れて、エラー画面でreplできる
- hashieを使って、ハッシュにドットでアクセスできる
- enumerizeを使うと列挙が扱える
まとめ
とても勉強になります!また参加したいです。
ちなみにSonicGardenさんではギルド参加者を募集しています。
納品のない受託開発に興味のあるエンジニアは、申し込んでみるとよいのではないでしょうか。