酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

パフォーマンス・チューニングやオススメGem in 「Rails勉強会@東京 第88回」

10/19(土)に開催されたRails勉強会@東京 第88回のレポート記事です。

前回の「Angular.js / Backbone.js + marionette.js 編」に続いて、今回はパフォーマンス・チューニング系の話についての議論を参考にさせていただきつつ、資料をまとめていきます


実運用中のパフォーマンス監視

NewRelicが一番オススメ。特徴はこちら。

* アプリケーションの監視に最適なツール
* アクション => メソッド、sqlが遅いまでチェックできる
* アクションをひとつひとつチェック => 定義・構造がおかしいか探す => レンダリングの改善
* サイト全体平均より、重要なページを計測して改善をすべき
* js側のチェックも出来る
* サーバの監視もできるけどサーバごとに料金がとられるのがツライ

New Relic Nightのまとめ記事

http://www.engineyard.co.jp/blog/2013/new-relic-night/

モデル側(クエリ) の改善について

モデル側(クエリ) の改善についての幾つかのアイデアがこちら。

* どのモデルをいくつ読み込んだかをチェックして、最適化
* カラム数は30に絞る => ActiveRecord カラム数が多ければ多いほど遅い
* ActiveRecordのオブジェクトをできるだけ作らないようにする
* 遅そうなsqlのExplainをとって、最適化

ビュー側(レンダリング)の改善について

* render_pertialが遅い => modelに移すほうがキャッシュできて最適 => Fat Modelとのトレードオフ

パフォーマンス・チューニングに活躍してくれそうなツール

Gem: Bullet

N+1クエリ問題、不要なeager loading、counter cacheを使うべきポイントを検出してくれるGem
https://github.com/flyerhzm/bullet

Gem: rack-mini-profiler

SQLの実行時間やレンダーの時間を測定してくれるGem アクションごとにクエリの発行回数を集計も集計してくれるそうです。
https://github.com/MiniProfiler/rack-mini-profiler

Gem: rpm_contrib

New Relicのコミュニティが参加して作ったExtraなGemっぽいです
https://github.com/newrelic/rpm_contrib

NewRelic Custom metric

よりNew Relicを使いこなしたい人むけのドキュメント
https://docs.newrelic.com/docs/features/custom-metric-collection

継続デプロイ、静的解析などのツール

Gem: Altria

Rails製のCIサーバー
https://github.com/r7kamura/altria

Gem: rubocop

静的解析をしてくれるgem
https://github.com/bbatsov/rubocop

Gem: rails_best_practices

Railsのコードの品質をチェックしてくれるGem
https://github.com/railsbp/rails_best_practices

Gem: whitesnake

Jenkinsの設定をサポートしてくれるツール
https://github.com/mrkn/whitesnake

CIサービス: Travis CI、Circle CI

https://travis-ci.org/
https://circleci.com/

サービス: Coveralls

Coverageやコードの静的解析系
https://coveralls.io/

サービス: Code Climate

メソッドの複雑度を定義(A〜Fの6段階)
https://codeclimate.com/

その他

Thread.currentについて

request単位でキャッシュしたいモノ => Thread.currentに入れ込む
http://d.hatena.ne.jp/gogo_sakura/20120124/1327373997

Gem: migrant

モデルにカラム情報を書くとmigrationファイルに展開
https://github.com/pascalh1011/migrant

Gem: annotate_models

モデル内にカラム名をコメントで追加
https://github.com/ctran/annotate_models

まとめ

完全に俺得的な記事で見づらいのが申し訳ない限り。。。
もしまとめ的によりこうして欲しいとか有ればぜひコメント下さい!

Special Thanks

Railsアプリのパフォーマンスチューニング用ツール紹介

モデルにテーブルのカラム情報をコメントで追加してくれるannotator

おすすめの書籍