Rubyでアプリケーションサーバーが必要な理由とは?Pumaの役割をわかりやすく解説
rails server を実行したときに、自動的に起動してくる「Puma」という存在を見たことはありませんか?
実はあれは「アプリケーションサーバー」です。この記事では、アプリケーションサーバーとは何か、なぜ必要なのかを具体例とともにわかりやすく解説します。
アプリケーションサーバーとは何か
まず、Rubyで新しいWebアプリケーションの開発を始めた場面を想像してみてください。
コードを一行も書く前に、ブラウザでページが表示されることを確認したいですよね。デフォルトの「Welcome」ページでもいいので、とりあえず表示させたいはずです。
そこでブラウザを開き、localhost:3000(Sinatraを使っている場合はlocalhost:4567)にアクセスします。
このとき何が起こっているのでしょうか?
ブラウザはlocalhostのポート3000に接続し、そこではPumaのようなRubyアプリケーションサーバーがリクエストを待ち受けています。
localhostは特別なIPアドレスである127.0.0.1を指しており、これは常に自分自身のコンピュータを意味します。
PumaをはじめとするRackベースのサーバー(ThinやUnicornなど)の役割は、ブラウザからのリクエストを受け取り、共通インターフェースを通じてアプリケーションに引き渡すことです。
そのインターフェースとは何か?
答えはRackです。Rackについては別の記事で詳しく説明しています。
なぜRailsが直接リクエストを処理しないのか
ここで重要な疑問が生まれます。
なぜRailsに直接リクエストを処理させず、わざわざアプリケーションサーバーを挟むのでしょうか?
答えは、ソフトウェア設計における基本原則——関心の分離(Separation of Concerns)を実現するためです。
関心の分離を理解する
Railsとあなたのアプリケーションの仕事は、ユーザーのリクエストに応えることです。
たとえば:
- 新しいアカウントを作成する
- ログイン情報が正しいか検証する
- カカオ100%のチョコレートを購入できる商品ページを表示する
アプリが何をするにせよ、役割分担は次のように考えることができます。
- Rails:ユーザーができることのメニューを提供すると同時に、実際に料理を作る「シェフ」
- Puma:注文を受けてキッチンへ伝える「ウェイター」
このように役割を分けることで、それぞれが最高のパフォーマンスを発揮できます。
さらに嬉しい点もあります。
シェフをSinatraに変更したり、ウェイターをThinに差し替えたりすることも自由自在です。
「関心が適切に分離されていれば、モジュールの再利用や独立した開発・アップグレードの自由度が高まる。」
Wikipedia
状況や好みに応じて、柔軟に構成を選べるのです。
アプリケーションサーバーとWebサーバー(Nginx・Apache)の違い
ここでこんな疑問が浮かぶかもしれません。
ApacheやNginxのようなWebサーバーと、Rubyのアプリケーションサーバーはどう違うのか? なぜこの2つだけではダメなのか?
両者には大きな違いがあります。
Nginxは汎用的なWebサーバーで、リクエストを受け取り、対応するファイルがあればそれを返します。しかし、NginxはRackについてもRubyについても何も知りません。
だからこそ、PumaのようなRack互換のアプリケーションサーバーが必要になるのです。
ただし、本番環境でNginxが不要というわけではありません。
Nginxは接続をより効率的に処理でき、CSSやJavaScriptなどの静的ファイルをアプリケーションにリクエストを渡すことなく直接配信できるため、Pumaと組み合わせて使うのが一般的です。
Pumaを選ぶべき理由
アプリケーションサーバーの役割が理解できたところで、次はPumaそのものについて見ていきましょう。
数あるサーバーの中で、なぜPumaが選ばれるのでしょうか?
第一の理由:
PumaはHerokuが公式に推奨しているサーバーだからです。Herokuによれば、代替サーバーであるUnicornを使うと、スロークライアント攻撃(Slowloris攻撃など)に対して脆弱になるという指摘があります。
第二の理由:
Pumaはマルチスレッド対応であり、一般的にメモリ使用量を抑えられる点です。
「マルチスレッドプログラムの場合、OSが担う処理はマルチプロセスプログラムよりも少なくて済む。これはマルチスレッドプログラムのパフォーマンス向上につながる。」
PThreads Programming
どのサーバーが最速なのか?
シンプルなRackアプリを以下のコマンドで起動し、実際にベンチマークを取ってみました。
rackup -s thin rack-simple.ru 2>1 &>/dev/null
計測にはこちらを使用:
wrk -d 20 https://localhost:9292
結果は以下の通りです:
- Webrick:229.97 リクエスト/秒
- Thin:773.20 リクエスト/秒
- Puma:2035.34 リクエスト/秒
この3つの中では、Pumaが圧倒的に高いパフォーマンスを示しています。
ただし注意が必要です。遅いSQLクエリがあったり、毎回のリクエストで数百万要素の配列をループ処理していたりすれば、サーバーの速度差はほとんど意味を持ちません。アプリケーション全体のボトルネックを意識することが大切です。
まとめ
この記事では、PumaやThinといったRubyのアプリケーションサーバーについて学びました。なぜRailsの前にアプリケーションサーバーが必要なのか、その理由が明確になったのではないでしょうか。

さて、あなたは次のプロジェクトでどのサーバーを使いますか?
最後までお読みいただきありがとうございました!🙂
-
Ruby on Railsとは?初心者にもわかる仕組み・魅力・学び方を徹底解説
Ruby on Railsとは? Ruby on Rails(略称:RoR)は、世界で最も人気のあるオープンソースのWebアプリケーションフレームワークです。プログラミング言語「Ruby」をベースに構築されており、シンプルなサイトから大規模で複雑なサービスまで、幅広いWebアプリケーションの開発を支援します。 そもそもフレームワークとは? フレームワークとは、ソフトウェア開発の際に土台となる構造を提供してくれるコードやツール、ユーティリティの集合体です。あらかじめ用意された構造に沿ってコードを書くことで、プログラムが整理され、保守性も高まります。正しく使いこなせるようになれば、開発作業は格段に
-
VPNの「難読化サーバー」とは?その仕組みと必要性をわかりやすく解説
現代において、サイバーセキュリティは誰にとっても無視できない重要なテーマとなっています。ハッカーや不正侵入者は、何らかの形で私たちのデジタルライフに侵入しようと、日々巧妙な手口を磨いています。気づいた瞬間には悪意ある罠にかかり、大切な機密データが一瞬にして奪われてしまう——そんなリスクは、決して他人事ではありません。 サイバー犯罪やマルウェアの脅威が年々増加する中、オンライン活動を守るためにVPNサービスを活用することは、もはや必須といえます。実際、ここ数年でVPNの人気は急速に高まっており、安全な通信経路を確立する手段として広く普及しました。VPNを使えば、実際のIPアドレス情報を第三者や