RubyのWebサーバ「puma」を使ってみた感想

19/01/20 15:34:37     19/05/05 17:12:56

pumaってどう?

Rubyの開発環境は他のプログラミング言語に比べてデフォルト化されており、フレームワークがRuby on Railsで、Webサーバがpumaというパターンが増えています。他のWebサーバにはthin、unicorn、などがありますが、後から出てきたpumaの人気が上昇しているイメージです。

そこでこのページでは、pumaの特徴や使ってみた感想を紹介します。

サーバの概念や用語の理解

pumaの特徴の前に、各種サーバの概念や用語の説明をざっくりとしておきます。すでに理解されている方は読み飛ばしていただければ良いかと思います。なぜ先に基本概念の説明をするかというと、これを把握しておかないとpumaの特徴やメリットがいまいちよくわからなず、導入する価値がなくなってしまうからです。

理解していなくてもpumaの恩恵を受けることはある程度可能なのですが、意味がわからず使っているとWebサーバの機能を無視したコーディングになる可能性があります。そこで、先に基本概念をざっくり把握しておきましょう。

まず重要なのが、Webサーバ、アプリケーションサーバ、Rackといった仕様や概念と、WEBrick、Unicorn、pumaといった個々のツールについて知ることです。なかでも特に知っておかないと環境構築に不都合が生じるのはWebサーバとアプリケーションサーバの違いです。

Webサーバとは

Webサーバとは、ユーザーからリクエストを受け取り、受け取ったリクエストに対して何かの処理を行って返すものです。今回紹介しているpumaはWebサーバなので、このWebサーバの基本概念と役割を把握しておく必要があります。

アプリケーションサーバとは

アプリケーションサーバは、アプリケーションを動かすためのサーバです。Ruby on Railsで実装している場合、それを動かす場所がアプリケーションサーバになります。なので、ユーザーが何かしらの操作をした際の動きとしては以下のようになります。

ユーザー → Webサーバ → アプリケーションサーバ → アプリケーション → Webサーバ → ユーザー

以上の流れで、ユーザーが送ったリクエストに対する処理が返ってきます。アプリケーションサーバとアプリケーションを分けましたが、アプリケーションサーバ上にアプリケーションがあるので分けずに考えてもどちらでも良いかと思います。

Webサーバとアプリケーションサーバの違い

結局Webサーバとアプリケーションの違いと関係性がどうなっているのかは上記の通りですが、まとめるとWebサーバはアプリケーションサーバの手前でユーザーとのやり取りをするイメージです。

システムによってはアプリケーションサーバのみでカバーするケースも多いのですが、Webサーバがあることでユーザーからのリクエストの処理やアプリケーションの処理が速くなります。

なので、pumaについてもこの観点で導入を検討したり使用する必要があるのです。ユーザーとアプリケーションサーバの仲介をいかに高速化、効率化するかということなので、そこに意義を感じないのであれば導入の必要もないということです。

Rackとは

RackはWebサーバとアプリケーションサーバのやり取りをスムーズにするためのツールです。なので、Webサーバともアプリケーションサーバとも異なります。その他WEBrick、Unicorn、pumaなどはWebサーバの一種です。

pumaの特徴

pumaと他のWebサーバを比較してどのような違いがあるかですが、抽象的に言うとpumaはスピードと並列性を追求しており、ユーザーからのリクエスト受け取りとアプリケーションサーバへ処理を投げるのが速いです。具体的な仕組みについては後述します。

スポーツブランドにpumaというブランドがあるかと思いますが、そんな感じのイメージでWebサーバのpumaも速そうなイメージで、実際に速いです。スポーツブランドのpumaをイメージして名づけられたかどうかはわかりません。

pumaの大きな特徴としては、処理をスレッド単位で溜めて、それをマルチに実行することです。スレッドはプロセスなどよりもさらに小さい処理の単位で、たとえば掲示板サービスなどでよく耳にするかと思います。

スレットは掲示板のページのような意味合いで使われることが多いですが、実際は処理の単位です。掲示板サービスでも同時にスレッドを作ることができるため、マルチスレッドといった意味合いでスレッドと呼ばれていたのかもしれません。

それがそのうち派生し、掲示板のページをスレッドと呼び始めた、といった流れが想像できます。Webサーバによってはスレッドを同時ではなく順番に処理するものもありますが、マルチスレッドで処理した方が速度は速いです。

またスレッドではなくより大きな単位であるプロセス単位で処理しているWebサーバもあり、その場合も同じプロセス内のスレッドは同時に実行されません。要するに、pumaは処理を小さな単位で分けて同時実行しているから速いということです。

pumaの使い方

Webサーバの概要やpumaの特徴がわかったところで、次にpumaの使い方を説明します。

起動のコマンド

pumaの起動コマンドは以下です。単純なコマンドですが、ケースによって微妙にコマンドが異なります。

「bundle exec puma」もしくは「bundle exec rails s Puma」(Ruby on Railsの場合こちらでも可)を実行する。サーバをデーモンとして実行する場合は「bundle exec puma -d」、設定ファイルを指定する場合は「bundle exec puma -C config/puma.rb」となる。

停止のコマンド

pumaはサーバのソケットを開いたままリスタートできます。要するに、ユーザーに対してサーバを開放したままサーバのリスタートができるということです。ユーザーを待たせることがないため、pumaを速くすることに貢献しています。

サーバをオープンにしたままリスタートすることをhot restartと呼びますが、それを実行するコマンドは以下のようになります。

「kill -SIGUSR2 `(cat tmp/pids/server.pid)`」、設定ファイルを指定する場合は「bundle exec pumactl restart」です。

設定ファイルについて

設定ファイルはpumaのgithubレポジトリからサンプルを入手することが可能です。どのような項目を設定するのかというと、「environment」「daemonize」「pidfile」「state_path」「Cluster mode」「Thread Pool」「bind」などです。

それぞれの詳細は今ではなく実際に設定ファイルを作る際に確認すれば良いかと思いますが、今用語だけなんとなく頭の片隅に置いておくと良いかと思います。今見たものをなんとなく覚えておくだけでも、次に用語を見た際に理解がかなり早くなります。

所見の用語が多いとそれだけで混乱しがちですが、意味を押さえていなくても用語を聞きかじっているだけでもいざ必要になって情報収集する際にかなり役立ちます。

Rubyのフリーランス案件をチェック

→Rubyの案件情報一覧はこちら

Ruby関連記事
1, Rubyフリーランスの仕事や単価、ruby on railsの在宅案件まで
2, Rubyとは?学習方法や将来性、perlやphp、Pythonの比較はどう?
3, Ruby on RailsでMySQLを使用する際の接続手順
4, あるiOSアプリのエンジニアがRuby on Railsのプロジェクトに加わった話
5, 小学生でも数時間でアプリを作れたRuby on railsの入門書3選
6, 【決定版!】Rubyでできることとは?
7, Ruby開発の新卒採用している会社まとめ
8, Rubyで文字列から数値へ変換する方法まとめ
9, (この記事)RubyのWebサーバ「puma」を使ってみた感想
10, Rubyでのmecabの使い方を徹底解説します
11, Rubyでハッシュに対する繰り返し処理を行うeachの3つのメソッドの使い方
12, Rubyのyardを使ってソースからドキュメントを生成する方法

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する