パフォーマンス・チューニングやオススメ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

🗻 まとめ

完全に俺得的な記事で見づらいのが申し訳ない限り…

もしまとめ的によりこうしてほしいとか有ればぜひコメントください!

🎂 参考リンク

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

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

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)