【ITニュース解説】Webアプリのベンチマークについて
2025年09月03日に「Zenn」が公開したITニュース「Webアプリのベンチマークについて」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
Webアプリの速度を測る「ベンチマーク」手法を解説。主にJavaScriptバックエンドが対象だが、他言語にも応用可能。サーバーを立てて計測する方法や、プログラムの小さな単位で測るマイクロベンチマークなど、状況に応じた具体的なやり方を紹介する。
ITニュース解説
Webアプリケーションを開発する上で、その「速度」はユーザー体験を左右する極めて重要な要素である。自身の開発したアプリケーションがどの程度の性能を持っているのか、また、どうすればより高速化できるのかを把握するために、「ベンチマーク」という手法が用いられる。ベンチマークとは、特定の条件下でプログラムの性能を測定し、客観的な数値で評価することである。ここでは、主にJavaScriptで動作するWebアプリケーションを対象に、その速度を計測するための代表的な三つのベンチマーク手法について解説する。
一つ目は「マイクロベンチマーク」と呼ばれる手法だ。これは、アプリケーション全体ではなく、特定の関数やコードの一部分といった、非常に小さな単位の性能を測定する方法である。アプリケーションの動作が遅い場合、その原因となっている箇所、いわゆる「ボトルネック」を特定するために有効だ。例えば、二つの異なるアルゴリズムで実装された関数があるとき、どちらがより高速に処理を完了できるかを比較する際に用いられる。この測定には、専用のライブラリを使用することが一般的である。マイクロベンチマークを実施する上で注意すべき点として、多くのプログラミング言語が持つ「JITコンパイラ」の存在が挙げられる。JITコンパイラとは、プログラムを実行しながら、頻繁に呼び出されるコードをより効率的な形式に最適化し、実行速度を向上させる仕組みである。そのため、一度実行しただけの結果では、まだ最適化が不十分な状態の性能しか測れない可能性がある。正確な性能を測るためには、測定対象のコードを何度も繰り返し実行する「ウォームアップ」を行い、JITコンパイラによる最適化が十分に行われた後の安定した状態の速度を計測する必要がある。ただし、マイクロベンチマークはあくまでコードの断片的な性能を測るものであるため、その結果がアプリケーション全体の性能に直結するとは限らない点には留意が必要だ。
二つ目は、実際にサーバーを起動して性能を測る「サーバーを立てるベンチマーク」である。これは、開発したWebアプリケーションをHTTPサーバーとして動作させ、クライアントツールから大量のリクエストを送信し、その応答性能を測定する手法だ。現実の運用環境に最も近い状況を再現できるため、アプリケーションが実環境でどの程度の負荷に耐えうるかを評価するのに適している。このベンチマークでは、専用の負荷テストツールが用いられる。これらのツールは、指定した数の同時接続やリクエスト数をサーバーに送りつけ、サーバーが1秒間にどれだけのリクエストを処理できたかを示す「RPS(Requests Per Second)」や、リクエストを送信してから応答が返ってくるまでの時間(レイテンシ)といった指標を計測する。RPSの数値が高いほど、サーバーの処理能力が高いことを意味する。この方法で正確な測定を行うためには、ベンチマークを実行するクライアントと、測定対象のサーバーを別々のマシンで動作させることが推奨される。もし同じマシン上で両方を実行すると、クライアントとサーバーがCPUやメモリといったリソースを奪い合い、サーバーが本来の性能を発揮できず、正確な測定結果が得られない可能性があるためだ。
三つ目は、前述の方法とは対照的に、サーバーを起動せずに行う「サーバーを立てないベンチマーク」である。この手法の目的は、HTTPサーバーの起動やネットワーク通信といった、アプリケーションの純粋なロジック以外の要素(オーバーヘッド)を排除し、コード自体の処理性能を精密に測定することにある。具体的には、プログラム内で擬似的なリクエスト情報をデータとして生成し、それをアプリケーションの処理関数に直接渡して、レスポンスが生成されるまでの時間を計測する。この方法は、サーバーのセットアップが不要で手軽に実行できる上、ネットワークの遅延などの外部要因に影響されないため、Webフレームワークやライブラリそのものの性能を比較検討する際に特に有効である。ただし、実際のネットワーク環境における挙動は含まれないため、この測定結果がそのままユーザーの体感速度と一致するわけではない。あくまで、特定の条件下におけるコードの理論的な最大性能を測るための手法と理解する必要がある。
これら三つのベンチマーク手法は、それぞれに異なる目的と特徴を持っている。アプリケーションの特定部分のボトルネックを発見し、コードレベルの最適化を行うためには「マイクロベンチマーク」が、実際の運用に近い環境での総合的な性能を評価するためには「サーバーを立てるベンチマーク」が、そして、フレームワークなどの基盤技術の純粋な処理速度を比較するためには「サーバーを立てないベンチマーク」が適している。システムエンジニアとして高性能なアプリケーションを開発するためには、これらの手法を正しく理解し、目的に応じて適切に使い分ける能力が求められる。