1. DX支援サービス

    進化したデジタル技術を浸透させることで人々の生活をより良いものへと変革する

  2. ソフトウェア開発サービス

    VAREALだからできる、RubyとRuby on Railsに特化した、素早く柔軟なソフトウェア開発

  3. AI関連サービス

    データ活用と機械学習を用いたビジネスの着実な深化を。

  4. クリエイティブサービス事業

    美しいだけではない
    機能的UI/UXと正しいコーディング。

  1. SUNWEALC株式会社様 資産形成アプリ「enrich」のMVP開発支援

  2. 株式会社みらいワークス様 求人サイト「MOREWORKS」のメンテナンス支援

  3. 株式会社エムステージ様 Ruby/Railsのバージョンアップ支援

  4. 株式会社アイキューブドシステムズ様 CLOMO MDMのリプレイス開発支援

  5. ライオン株式会社様 「by me」のAI診断サービスの開発支援

  6. 株式会社TOEZ様 幼児向けのレッスン通信講座サイトおよび基幹システムの開発支援

  7. 株式会社カカクコム様 食べログノート の開発支援

  8. 有限会社秀栄社様 パーソナライズ絵本「JibunEHON」の開発支援

  9. 株式会社TRN様 不動産会社・建築会社向け_営業支援システム「renovo」の開発支援

  10. 株式会社Touch&Links様 新規CMSのシステム構築

  11. オフショア開発・長期ラボ型 Webアプリケーション開発事例/顧客ロイヤリティを高めるサービスの開発(株式会社ギフティ様)

  12. イベントサイト 「オンラインで集まろう 学研クリスマス&おとしだまウィーク」

  1. 株式会社ワイドウィンドウズ様 予約管理システムの既存機能の精査・変更と新規機能の追加およびUI/UXデザイン支援

  2. ライオン株式会社様 「by me」のAI診断サービスの開発支援

  3. 製造業のDX支援〜営業日報管理システム開発〜

  4. ウォータージェット加工.com サイトリニューアル

  5. 佳秀バイオケムサイトリニューアル

  6. 佳秀工業株式会社コーポレートサイトリニューアル

  7. 開発コンサルティング

  8. 団体管理システム

  9. ITコンサルティング

  1. 株式会社アイキューブドシステムズ様 CLOMO MDMのリプレイス開発支援

  2. 株式会社マネーフォワード様 マネーフォワード クラウドの開発支援

  3. 株式会社フレンバシー様 ベジタリアン、ヴィーガン向けのレストラン検索サイトの開発

  4. ライオン株式会社様 「by me」のAI診断サービスの開発支援

  5. 株式会社カカクコム様 食べログノート の開発支援

  6. 大手建設コンサルティング会社I社様 「自然災害を検知するAI」の開発 

  7. Webサイト訪問者分析のためのデータ分析基盤構築

  8. 製造業のDX支援〜営業日報管理システム開発〜

  9. 生産管理システム

  10. 仮想化サーバー導入

  11. タブレット端末導入

  1. VAREAL AI HUBの開発

  2. ライオン株式会社様 「by me」のAI診断サービスの開発支援

  3. 北海道大学様 オープンソースの大規模言語モデル(LLM)を使用したプロダクト共同研究開発

  4. 埼玉医科大学様 画像分類AIを用いた膠原病診断補助ツールの研究開発

  5. 大手建設コンサルティング会社I社様 「自然災害を検知するAI」の開発 

  1. ライオン株式会社様 「by me」のAI診断サービスの開発支援

  2. イベントサイト 「オンラインで集まろう 学研クリスマス&おとしだまウィーク」

  3. ウォータージェット加工.com サイトリニューアル

  4. 佳秀バイオケムサイトリニューアル

  5. スカイライト コンサルティング様コーポレイトサイトリニューアル

  6. ハイブリィド株式会社 様 [ IT-Manager SD ]

  7. 国際的機関の組織内システム開発

  8. 既存会計サービスのUI/UXデザイン改善

  9. 株式会社 クリニカル・トライアル 様 希少疾患SNS「RareS.(レアズ)」

  10. 人材マネジメントシステムUI/UXデザイン

  11. 保育園関連情報メディア開発

  12. Vareal株式会社中途採用情報サイト

Development

Railsアプリケーションのパフォーマンスを確認する方法

ブログ作成者紹介

氏名:川島 充博
所属:開発部
趣味:マラソン、トレイルランニング、亀の飼育

はじめに

Webアプリケーションにおいて、パフォーマンスは非常に重要な要素です。パフォーマンスが悪いと、ユーザーの待ち時間が長くなり、ストレスを感じてしまいます。また、サーバーリソースの無駄な消費につながり、コストアップの原因にもなります。

Railsアプリケーションのパフォーマンスを確認する方法は複数あります。本記事では、その中でも基本的な以下の4つの方法について解説します。これらの手法を活用することで、ボトルネックを特定し、パフォーマンスを改善することができます。

1. ログの確認
2. パフォーマンスツールの利用
3. クエリ実行計画の確認
4. ベンチマークの取得

1. ログの確認

Railsのログには、各リクエストの処理時間が記録されています。ログを確認することで、遅いリクエストを特定できます。

上記の例では、UsersController#indexアクションの処理に60msかかっています。内訳を見ると、Viewのレンダリングに53.8ms、ActiveRecordの処理に1.0msを要しています。

次に、あえてN+1問題を発生させた場合のログを見てみます。

処理時間が449msと遅くなっていることが確認できます。内訳を見ると、Viewのレンダリングに371.6ms、ActiveRecordの処理に65.8msを要しています。

ログを確認し、処理時間が長いリクエストを見つけたら、次のステップとしてその原因を追及することができます。

2. パフォーマンスツールの利用

Railsには、パフォーマンスを確認するためのツールがいくつか用意されています。代表的なものとして、rack-mini-profilerとbulletがあります。

rack-mini-profiler

rack-mini-profilerは、各リクエストのパフォーマンス情報を詳細に確認できるGemです。導入すると、ページの左上に、リクエストを送ってからページが表示されるまでの時間が表示されます。そこをクリックすることで、リクエスト処理の内訳をブラウザ上で確認することができます。これにより、ボトルネックの特定が容易になります。

N+1問題なしの場合

N+1問題ありの場合

N+1問題が発生している場合は、無駄なクエリが発行されていることが確認できます。青字のsqlのリンクをクリックすると発行されたクエリの詳細を確認することができます。

bullet

bulletは、N+1問題や冗長なクエリを検出するためのGemです。

bulletを導入すると、問題があるクエリ箇所で以下のような警告がログやブラウザ上のアラートで出力されます。

ログ

アラート

このように、無駄なクエリが検出されるので、その部分の最適化に取り組めます。
上記例の場合は、User.allをUser.includes(:posts)と修正することでN+1問題を解決することができました。

3. クエリ実行計画の確認

explainを使用することでクエリの実行計画を確認することができます。

例えば、実行計画を確認することで、インデックスが適切に利用されているかどうかを判断できます。インデックスが効率的に使われていないと、パフォーマンスが大幅に低下する可能性があります。

実行計画の確認は、Railsのコンソールから以下のようにして行えます。

Post.where(user_id: 12).explain

インデックスなしの場合

インデックスありの場合

インデックスありの場合は、keyに実際に使用するインデックスが記載されていることが確認できます。

その他、出力結果の詳細な解釈については以下の情報を参考にしてください。

・SQLite3: EXPLAIN QUERY PLAN
・MySQL: EXPLAIN 出力フォーマット (v8.0日本語)
・MariaDB: EXPLAIN
・PostgreSQL: EXPLAINの利用

4. ベンチマークの取得

Rubyのbenchmarkライブラリを使用してベンチマークを取得することができます。

例えば、コントローラーのindexアクションに以下の記載をします。

ログを検索すると、結果が出力されています。

N+1問題が発生していると処理に時間がかかることが確認できます。

まとめ

本記事では、Railsアプリケーションのパフォーマンスを確認する4つの方法について解説しました。

1. ログの確認
2. パフォーマンスツールの利用
3. クエリ実行計画の確認
4. ベンチマークの取得

これらの手法を適切に組み合わせることで、アプリケーションのボトルネックを発見し、パフォーマンス改善につなげることができます。

パフォーマンスの最適化は、アプリケーションの応答速度を向上させるだけでなく、サーバーリソースの無駄な消費を抑えるメリットもあります。開発の初期段階からパフォーマンスを意識し、定期的にチェックを行うことが重要です。

本記事で紹介した方法を活用しながら、継続的にパフォーマンスの改善に取り組んでいきましょう。

Vareal株式会社では、システムコンサルティング・UI/UXデザイン・ソフトウェア開発・AI開発/データ基盤構築、開発後の運用保守までワンストップでご支援可能ですので、なにかお役立ちできることがございましたら下記リンクよりお問い合わせくださいませ。

わたしたちと一緒に働いていただける方を大募集しています!
興味のある方はぜひ下記リンクをチェックしてみてください!

X(旧Twitter)では社内の雰囲気を発信しています、ぜひフォローしてみてください!

関連記事

%d人のブロガーが「いいね」をつけました。