SlideShare a Scribd company logo
Railsハイパー実践講座
                           第35回NaCl勉強会

                             中村 成洋
                          ネットワーク応用通信研究所




Powered by Rabbit 0.6.2
今日お話しすること
 細かすぎて本には書かれていない内容
 ハイパーでアチョーな実践的なテクニック
 来年には使えないテクニック多数
 Tips22連発
 適宜ツッコミ歓迎




                       1/27
jsはprototype.jsを使うこと
  jqueryに対応していない
  Rails3だと切り替えられるらしいとの風の噂




                            2/27
fixtureは使うな
  必ず破綻します
  machinistやfactory_girlを最初から導入するこ
  とを強くお勧め
    ただし、小さいアプリでは気にする必要はない

  画像アップロードのテストがしづらい
  marsでは手動テスト用のテストデータとして
  fixtureを利用


                                 3/27
mock,stubライブラリを使え(た
だし適材適所)
 ところ構わず使わないこと
 ここをだましたいって時に使うべし
  グローバルな情報を修正したい場合。
  例:クラス内のメソッド書き換え、Time.nowの値を変え
  たいとか

 mock,stubの違いは自分で調べるべし


                             4/27
マスタデータのロードには
seed.rbを使う
 rake db:setup の際に呼ばれる
 DBマスターデータ等々、アプリケーションに必要
 なデータはここで読ませると良い




                         5/27
STIはロードではまる
 STIはテーブルが存在しないクラスができてしま
 う
 requireを書いた方が良いかも(要確認ですが)




                         6/27
ポリモーフィックアソシエーショ
ンはソートではまる
 ソート画面があったら注意
 STIの方が好ましい
 ポリモーフィックアソシエーションだと処理が煩雑
 になる




                       7/27
プロジェクト専用のscaffoldを
作るべし
 コントローラや、viewがある程度似てくる
 共通化は出来ない程度
 ミスの大量生産に注意




                         8/27
確認画面でセッションは使うな
 色々とはまる
 いつクリアする?とかとか




                9/27
polymorphic_urlを使え
  STIやポリモーフィックアソシエーションでコント
  ローラのURLが変わってしまうとき
  意外と知らない人が多い




                         10/27
g,nをデバッグ時に使う
 Macなら g
 Linuxなら n




               11/27
困ったらrailsのソースコードを
引くこと
 すぐ引けるようにしておくことが大事
 gemも同様




                     12/27
attr_accessible,
attr_protectedを忘れずに
  :user_id, :xxx_id には attr_protected しておい
  た方がセキュア
  まあ、そういう使い方をコントローラでしなければ
  問題ないけど




                                      13/27
boolean型の名付け方
 is_xxx は辞めよう
 usable みたいなのがいい
 モデルにはusable?メソッドが自動で定義される




                        14/27
gemのバージョンは絶対指定し
ろ
 environment.rbに必要なgem記述
   絶対バージョン指定する

 不意にバーションが上がって最悪の自体
 どのバージョンを使っているかわからなくなる




                           15/27
レコードは親、子供の順でセー
ブする
 Railsの仕組み上、そうできている




                      16/27
親、子供を一つのアクションで
保存するときは auto_save を
使え
 has_many :xxx, :auto_save => true
 親が保存されると子供も保存される
 valid? の時に子供に対して valid? が届く
 この際に validates_association は使わないこ
 と

                                     17/27
accepts_nested_attributes_f
orを使うべし
  便利




                        18/27
count,size,lengthの違いは常
に意識して
  件数のみ取得したい
   size
      カウンタキャッシュの使用
      すべてロード済みの場合、配列の個数。駄目な
      場合、SQLのCOUNT文。ロードはしない。
   count
      ロード済みでもSQLのcount文を発行する。ロー
      ドはしない。(件数の後、色々操作したい)

                            19/27
count,size,lengthの違いは常
に意識して
  件数取得後、色々と操作
   length
   DBからロード済みであれば配列の件数、なければDB
   から実際にロードする
   子要素の中身をその後使用する際に使う。




                          20/27
counter_cacheの使い所
 子レコード数でソートするときなんかに使う
 それ以外は全く使う必要なんかない
 親を先にセーブしとかないと駄目
 条件も指定できない(これはとんでもなく酷い)
   カラム名を規則に合わせて、自分でカウントアップ、ダウ
   ン処理を作ることで回避




                           21/27
form_forのpost,put
  @xxx が new_record? だと自動的にpostにな
  る
  それ以外は put
  アレ、正しいアクションに飛ばない?って時は大体
  コレを疑う




                               22/27
rvmの勧め
 通常のrubyスクリプトはパッケージの物を使いた
 い(当然!)
   他のパッケージとの兼ね合いもあるしね

 patch-levelは上がっていく
   その版の最新のものを使いたい

 project毎の .rvmrc !!



                        23/27
お勧めplugin,gem
 ruby-toolboxを見るべし
   http://ruby-toolbox.com/




                              24/27
enum_columnプラグインの紹
介(拙作)
 フラグを扱いたい
  例 :publiced, :private, :member_only
  けどテーブルにするまでもない




                                        25/27
実例
おわり
Ad

More Related Content

What's hot (13)

ざんねんなワークフロー図鑑
ざんねんなワークフロー図鑑ざんねんなワークフロー図鑑
ざんねんなワークフロー図鑑
Seiya Noguchi
 
Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース
悠滋 山本
 
俺とDockerとtDiaryとkubernetes
俺とDockerとtDiaryとkubernetes俺とDockerとtDiaryとkubernetes
俺とDockerとtDiaryとkubernetes
Masayuki KaToH
 
私が ASP.NET を選ぶ理由
私が ASP.NET を選ぶ理由私が ASP.NET を選ぶ理由
私が ASP.NET を選ぶ理由
m ishizaki
 
Javaに這いよる.NET
Javaに這いよる.NETJavaに這いよる.NET
Javaに這いよる.NET
Hiroshi Maekawa
 
C# 9 のおすすめ新機能
C# 9 のおすすめ新機能C# 9 のおすすめ新機能
C# 9 のおすすめ新機能
m ishizaki
 
Rubyボードハンズオンテキスト
RubyボードハンズオンテキストRubyボードハンズオンテキスト
Rubyボードハンズオンテキスト
三七男 山本
 
Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6
Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6
Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6
Haraguchi Go
 
RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気
Sea Mountain
 
TypeScript 1.0 Released!
TypeScript 1.0 Released!TypeScript 1.0 Released!
TypeScript 1.0 Released!
Horuchi Hiroki
 
Android勉強会第二回-非同期処理-
Android勉強会第二回-非同期処理-Android勉強会第二回-非同期処理-
Android勉強会第二回-非同期処理-
Hiroki Sakamoto
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
 
ざんねんなワークフロー図鑑
ざんねんなワークフロー図鑑ざんねんなワークフロー図鑑
ざんねんなワークフロー図鑑
Seiya Noguchi
 
Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース
悠滋 山本
 
俺とDockerとtDiaryとkubernetes
俺とDockerとtDiaryとkubernetes俺とDockerとtDiaryとkubernetes
俺とDockerとtDiaryとkubernetes
Masayuki KaToH
 
私が ASP.NET を選ぶ理由
私が ASP.NET を選ぶ理由私が ASP.NET を選ぶ理由
私が ASP.NET を選ぶ理由
m ishizaki
 
C# 9 のおすすめ新機能
C# 9 のおすすめ新機能C# 9 のおすすめ新機能
C# 9 のおすすめ新機能
m ishizaki
 
Rubyボードハンズオンテキスト
RubyボードハンズオンテキストRubyボードハンズオンテキスト
Rubyボードハンズオンテキスト
三七男 山本
 
Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6
Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6
Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6
Haraguchi Go
 
RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気
Sea Mountain
 
TypeScript 1.0 Released!
TypeScript 1.0 Released!TypeScript 1.0 Released!
TypeScript 1.0 Released!
Horuchi Hiroki
 
Android勉強会第二回-非同期処理-
Android勉強会第二回-非同期処理-Android勉強会第二回-非同期処理-
Android勉強会第二回-非同期処理-
Hiroki Sakamoto
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
 

Similar to Railsハイパー実践講座-第35回NaCl勉強会 (19)

20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
Masayuki Kanou
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
 
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみたOpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
AlissaSabre
 
レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話
nekogeruge_987
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
Yohei Sasaki
 
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
賢次 海老原
 
エンジニア勉強会_DECIDE
エンジニア勉強会_DECIDEエンジニア勉強会_DECIDE
エンジニア勉強会_DECIDE
エンジニア勉強会 エスキュービズム
 
The Internal of Serverless Plugins
The Internal of Serverless PluginsThe Internal of Serverless Plugins
The Internal of Serverless Plugins
Terui Masashi
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
 
Rails composerでrails newを楽にしよう
Rails composerでrails newを楽にしようRails composerでrails newを楽にしよう
Rails composerでrails newを楽にしよう
健太 田上
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話
Kazuya Wada
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
mitim
 
20190828 sd by kitazaki_t0
20190828 sd by kitazaki_t020190828 sd by kitazaki_t0
20190828 sd by kitazaki_t0
Ayachika Kitazaki
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
Ryunosuke SATO
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編
Kazuya Numata
 
stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見
Isao Ebisujima
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
Masayuki Kanou
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
 
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみたOpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
AlissaSabre
 
レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話
nekogeruge_987
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
Yohei Sasaki
 
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
賢次 海老原
 
The Internal of Serverless Plugins
The Internal of Serverless PluginsThe Internal of Serverless Plugins
The Internal of Serverless Plugins
Terui Masashi
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
 
Rails composerでrails newを楽にしよう
Rails composerでrails newを楽にしようRails composerでrails newを楽にしよう
Rails composerでrails newを楽にしよう
健太 田上
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話
Kazuya Wada
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
mitim
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
Ryunosuke SATO
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編
Kazuya Numata
 
stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見
Isao Ebisujima
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
Ad

More from Narihiro Nakamura (20)

Symbol GC
Symbol GCSymbol GC
Symbol GC
Narihiro Nakamura
 
RUBYLAND
RUBYLANDRUBYLAND
RUBYLAND
Narihiro Nakamura
 
Ruby's GC 20
Ruby's GC 20Ruby's GC 20
Ruby's GC 20
Narihiro Nakamura
 
桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、Rubyやめるってよ
Narihiro Nakamura
 
Rubyによる本気のGC
Rubyによる本気のGCRubyによる本気のGC
Rubyによる本気のGC
Narihiro Nakamura
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
Narihiro Nakamura
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
Narihiro Nakamura
 
GC FAQ
GC FAQGC FAQ
GC FAQ
Narihiro Nakamura
 
G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」
Narihiro Nakamura
 
円環の理(Garbage Collection)
円環の理(Garbage Collection)円環の理(Garbage Collection)
円環の理(Garbage Collection)
Narihiro Nakamura
 
地獄のGC本スピンオフ
地獄のGC本スピンオフ地獄のGC本スピンオフ
地獄のGC本スピンオフ
Narihiro Nakamura
 
シャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできることシャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできること
Narihiro Nakamura
 
われわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできるわれわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできる
Narihiro Nakamura
 
GCが止まらない
GCが止まらないGCが止まらない
GCが止まらない
Narihiro Nakamura
 
GC本をGCしないための100の方法
GC本をGCしないための100の方法GC本をGCしないための100の方法
GC本をGCしないための100の方法
Narihiro Nakamura
 
GC生誕50周年を祝って
GC生誕50周年を祝ってGC生誕50周年を祝って
GC生誕50周年を祝って
Narihiro Nakamura
 
シャイなRubyistにできること
シャイなRubyistにできることシャイなRubyistにできること
シャイなRubyistにできること
Narihiro Nakamura
 
Ad

Railsハイパー実践講座-第35回NaCl勉強会