Rails勉強会@東京第60回に参加してきました
Rails勉強会@東京第60回に参加してきました。学んだことをメモします。
性能プロファイラ
笹田研の学生さんによるリアルタイムプロファイラの紹介がありました。「リアルタイム」なのが特徴です。rdocを実行してそのプロファイラをざーっと画面に出してデモしていました。普段リアルタイムで監視画面をじーっと見るということは、なかなか少ないとは思いますが、テストの時や裏でずっと実行していて「しきい値」を設けてアラート出すとか、スナップショットを定期的に取ってグラフ化するなどの方がWebアプリを作る側としては実用的かもと感じました。しかし、私は普段はアプリのプロファイリングというもの行っていないので、RubyProf等を使って一度やってみようと思いました。
kaminari
a_matsudaさんによるkaminariについての直々のプレゼンです。とても貴重なプレゼンでした。kaminariの基本的な使い方、ソースコードを読みながらの仕組みの説明でした。kaminariはカスタマイズ性がとても高いなと感じました。will_paginateかkaminariかRails3を使うときは悩みそうです。engineアプリというのを初めて知りました。kaminariはすでに海外のプロダクションで使われているということです。また、a_matsudaさんはkaminariはドキュメントを沢山書いたと言っていました。そして、ドキュメントを沢山書いたほうが使ってもらえる傾向があるので、使ってもらいたいならドキュメント書くと良いとも言っていました。
Model Test
- test/unit
- test/unit2
- rspec
- Shoulda
Model Testは相変わらず test/unitとrspecの2本柱ですね。今回はテストについての話が多かったと思いました。「Ruby遅い」「Rails遅い」は最近は「テストが遅いこと」と関連しているという話が印象的でした。
機能テスト
両方使うのではなく、どちらかを使うというのが印象的でした。test/unit と functional、rspec と cucumber という組み合わせに分かれていた感じです。
CI(継続的インテグレーション)
BigTunaという存在を初めて知りました。BigTunaはRails3で作られていて、機能も豊富そうです。
テストカバレッジ
皆さんテストカバレッジについて良いツールを探しているような印象でした。単純なコード通過を計測するのではなく、例えば以下のような例についてはツールではカバーしきれない部分があるようです。
def hoge if fuga ・・・ end if baz ・・・ end end
hogeメソッド内には2つのif文がある。単純なコードカバレッジであれば、fugaもbazもtrueのものを1つテストすれば100%のカバレッジになる。しかし、上記の例だと最大で下記の4パターンをテストする必要がある。
fuga | baz |
---|---|
true | true |
true | false |
false | true |
false | false |
上記の場合、皆さんツールを使うのではなく「経験則」「勘」で「大事そうなパターンのみ」を行っている感じでした。このテストカバレッジについては、私も課題です。
テストの高速化
- GitHub - grosser/parallel_tests: Rails: 2 CPUs = 2x Testing Speed for RSpec, Test::Unit and Cucumber
- https://github.com/sgrove/parallel_specs
- https://github.com/timcharper/spork
「テストが遅い」というのは皆さん共通の悩みのようでした。弊社でも並列テストしているのですが落ちるのですよね・・・。
fixture replacement
- GitHub - thoughtbot/factory_bot: A library for setting up Ruby objects as test data.
- GitHub - notahat/machinist: Fixtures aren't fun. Machinist is.
- GitHub - paulelliott/fabrication: Generating Ruby object instances since 2010
- GitHub - sevenwire/forgery: Easy and customizable generation of forged data.
モック
- GitHub - bblimke/webmock: Library for stubbing and setting expectations on HTTP requests in Ruby.
- GitHub - btakita/rr: RR (Double Ruby) is a test double framework that features a rich selection of double techniques and a terse syntax.
- GitHub - floehopper/mocha: Mocha is a mocking and stubbing library for Ruby (canonical repo is now at http://github.com/freerange/mocha)
その他登場したツールやWebサイト、単語
- The Ruby Toolbox - Know your options!
- Cloud Application Platform | Heroku
- GitHub - tmm1/rbtrace: like strace, but for ruby code
- 竹内関数
- はじめる! Rails3(1)
- WEB+DB PRESS Vol.61
- http://jp.newrelic.com/
- http://ruby-prof.rubyforge.org/
- プログラミング言語 Ruby リファレンスマニュアル
- GitHub - tmm1/rbtrace: like strace, but for ruby code
- Selenium - Web Browser Automation
懇親会
Rails勉強会の後、居酒屋で数人で懇親会を行いました。メンバーは@satococoa、@mreinsch、@kyanny、@hamaknと私でした。それぞれの開発現場について聞けたり、悩みについて聞けたりして、使っているツールや、Rails・Rubyのバージョン、pivotaltrakerでのタスク管理について聞けたり、バージョン管理について聞けたり、などなど1つのテーブルでしたし、皆でざっくばらんに楽しく会話できました。Rails勉強会で1つのテーマについて皆で話すのも良いですが、沢山のテーマを短く気軽に、そしてジョークを言いながら、笑いながら話し合えるのは懇親会の良い点だなと思いました。少人数でもよいので懇親会は行いたいなと思いました。懇親会が出来てよかったです。有難う御座いました。
その他、Rails勉強会@東京のFacebookページの存在やQuoraというサイトに招待してもらったり、Tokyo Rubyist Meetup | Doorkeeperという存在を知ったりできました。