SlideShare a Scribd company logo

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

1 of 28
Download to read offline
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
実例
おわり

Recommended

SignalRブートキャンプ
SignalRブートキャンプSignalRブートキャンプ
SignalRブートキャンプKouji Matsui
 
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」Tsutomu Chikuba
 
前衛地獄を生き残る
前衛地獄を生き残る前衛地獄を生き残る
前衛地獄を生き残るgn_spawn
 
delayed_jobの自動再起動
delayed_jobの自動再起動delayed_jobの自動再起動
delayed_jobの自動再起動firewood
 
PasteHub at kansai emacs 9th
PasteHub at kansai emacs 9thPasteHub at kansai emacs 9th
PasteHub at kansai emacs 9thKiyoka Nishiyama
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN LinkingKouji Matsui
 
JavaScript MVC入門
JavaScript MVC入門JavaScript MVC入門
JavaScript MVC入門大樹 小倉
 

More Related Content

What's hot

ざんねんなワークフロー図鑑
ざんねんなワークフロー図鑑ざんねんなワークフロー図鑑
ざんねんなワークフロー図鑑Seiya Noguchi
 
Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース悠滋 山本
 
俺とDockerとtDiaryとkubernetes
俺とDockerとtDiaryとkubernetes俺とDockerとtDiaryとkubernetes
俺とDockerとtDiaryとkubernetesMasayuki 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 ES6Haraguchi 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
 

What's hot (13)

ざんねんなワークフロー図鑑
ざんねんなワークフロー図鑑ざんねんなワークフロー図鑑
ざんねんなワークフロー図鑑
 
Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース
 
dwangocpp1-lt
dwangocpp1-ltdwangocpp1-lt
dwangocpp1-lt
 
俺とDockerとtDiaryとkubernetes
俺とDockerとtDiaryとkubernetes俺とDockerとtDiaryとkubernetes
俺とDockerとtDiaryとkubernetes
 
私が ASP.NET を選ぶ理由
私が ASP.NET を選ぶ理由私が ASP.NET を選ぶ理由
私が ASP.NET を選ぶ理由
 
Javaに這いよる.NET
Javaに這いよる.NETJavaに這いよる.NET
Javaに這いよる.NET
 
C# 9 のおすすめ新機能
C# 9 のおすすめ新機能C# 9 のおすすめ新機能
C# 9 のおすすめ新機能
 
Rubyボードハンズオンテキスト
RubyボードハンズオンテキストRubyボードハンズオンテキスト
Rubyボードハンズオンテキスト
 
Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6
Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6
Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6
 
RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気
 
TypeScript 1.0 Released!
TypeScript 1.0 Released!TypeScript 1.0 Released!
TypeScript 1.0 Released!
 
Android勉強会第二回-非同期処理-
Android勉強会第二回-非同期処理-Android勉強会第二回-非同期処理-
Android勉強会第二回-非同期処理-
 
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抽象化レイヤーについて-」
 

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

20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)Masayuki Kanou
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionSatomi 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 yssk22Yohei 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 PluginsTerui 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!! Rubymitim
 
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
 

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

20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
 
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみたOpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
 
レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
 
Rubyな日々
Rubyな日々Rubyな日々
Rubyな日々
 
20120831 mongoid
20120831 mongoid20120831 mongoid
20120831 mongoid
 
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
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
Rails composerでrails newを楽にしよう
Rails composerでrails newを楽にしようRails composerでrails newを楽にしよう
Rails composerでrails newを楽にしよう
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
20190828 sd by kitazaki_t0
20190828 sd by kitazaki_t020190828 sd by kitazaki_t0
20190828 sd by kitazaki_t0
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編
 
stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 

More from Narihiro Nakamura

More from Narihiro Nakamura (20)

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

Recently uploaded

Kubernetes環境のアプリケーションバックアップソフトウェアKasten K10ご紹介
Kubernetes環境のアプリケーションバックアップソフトウェアKasten K10ご紹介Kubernetes環境のアプリケーションバックアップソフトウェアKasten K10ご紹介
Kubernetes環境のアプリケーションバックアップソフトウェアKasten K10ご紹介FumieNakayama
 
20240227 完全に理解した LT 「mise いいよ mise」 / morishin
20240227 完全に理解した LT 「mise いいよ mise」 / morishin20240227 完全に理解した LT 「mise いいよ mise」 / morishin
20240227 完全に理解した LT 「mise いいよ mise」 / morishinMakoto Mori
 
00001_test_automation_portfolio_20240227
00001_test_automation_portfolio_2024022700001_test_automation_portfolio_20240227
00001_test_automation_portfolio_20240227ssuserf8ea02
 
BusTimeTable by Edge Runtime - 公共交通オープンデータ最前線2024 -
BusTimeTable by Edge Runtime - 公共交通オープンデータ最前線2024 -BusTimeTable by Edge Runtime - 公共交通オープンデータ最前線2024 -
BusTimeTable by Edge Runtime - 公共交通オープンデータ最前線2024 -yuutahatano
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
20240227_IoTLT_vol108____kitazaki_v1.pdf
20240227_IoTLT_vol108____kitazaki_v1.pdf20240227_IoTLT_vol108____kitazaki_v1.pdf
20240227_IoTLT_vol108____kitazaki_v1.pdfAyachika Kitazaki
 

Recently uploaded (6)

Kubernetes環境のアプリケーションバックアップソフトウェアKasten K10ご紹介
Kubernetes環境のアプリケーションバックアップソフトウェアKasten K10ご紹介Kubernetes環境のアプリケーションバックアップソフトウェアKasten K10ご紹介
Kubernetes環境のアプリケーションバックアップソフトウェアKasten K10ご紹介
 
20240227 完全に理解した LT 「mise いいよ mise」 / morishin
20240227 完全に理解した LT 「mise いいよ mise」 / morishin20240227 完全に理解した LT 「mise いいよ mise」 / morishin
20240227 完全に理解した LT 「mise いいよ mise」 / morishin
 
00001_test_automation_portfolio_20240227
00001_test_automation_portfolio_2024022700001_test_automation_portfolio_20240227
00001_test_automation_portfolio_20240227
 
BusTimeTable by Edge Runtime - 公共交通オープンデータ最前線2024 -
BusTimeTable by Edge Runtime - 公共交通オープンデータ最前線2024 -BusTimeTable by Edge Runtime - 公共交通オープンデータ最前線2024 -
BusTimeTable by Edge Runtime - 公共交通オープンデータ最前線2024 -
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
20240227_IoTLT_vol108____kitazaki_v1.pdf
20240227_IoTLT_vol108____kitazaki_v1.pdf20240227_IoTLT_vol108____kitazaki_v1.pdf
20240227_IoTLT_vol108____kitazaki_v1.pdf
 

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