LINEで現役エンジニアに直接質問してみよう!登録無料

アプリケーション(AP)サーバーの仕組みとは?Webサーバーとの違い、役割、種類、構築方法を解説。Webエンジニア入門にオススメの学習書籍も紹介!

クイナ

独学でプログラミングを勉強しながらWeb制作会社で働き、プログラミングのエンジニア講師も勤めた経験がある、クイナです。

クイナ

  • アプリケーションサーバーとは?
  • どういう種類のサーバー?
  • Webアプリケーションとどのような関係があるの?
  • 普通のサーバーとどう違うの?

こんな疑問に答えていきます。

結論から言うと、アプリケーションサーバーは「Webの3層システム」と呼ばれる考え方で登場するサーバーの1台で、動的にコンテンツを生成し処理するプログラムが動いているサーバーのことを言います。

Webの3層システムは、Webサーバー、APサーバー、DBサーバの3種類のサーバーで構成される仕組みの事で、これを使うとセキュリティ面や管理コスト面においてメリットが多くあり、実際によく使われています。

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

冒頭でも言ったように、アプリケーションサーバーは「Webの3層システム」と呼ばれる考え方で登場するサーバーの1台で、動的にコンテンツを生成し処理するプログラムが動いているサーバーのことを言います。

ここで言うプログラムとは、WebアプリケーションフレームワークのRailsやLaravel等のことを言います。

Webの3層システムとは?

アプリケーションサーバーが登場する「Webの3層システム」について解説します。

Webの3層システムは下記の要素で構成されています。

  • Webサーバー
  • APサーバー
  • DBサーバ

この3層システムを銀行に例えると、このような感じになります。

  • Webサーバーは外部からのアクセスを1番に受け付ける => 窓口業務をしている受付員
  • APサーバーは、Webサーバーからの情報を処理する => 受付員からもらった情報を処理する事務員
  • DBサーバーは、APサーバーが処理した情報を格納する => 事務員の処理した情報を保管する 金庫管理員

このように、ユーザーからAPサーバーやDBサーバーに直接アクセスできなくすることで、セキュリティ面や管理コスト面において、多くのメリットがあることがわかると思います。

MEMO
個人の運営するサーバーでは、物理的にサーバーを分けず「Docker」や「Firewall」などを駆使して同じような状況を作り出し、運営することもままあります。 会社が運営しているサーバーでは、物理的に分かれていることが多いです。 昨今では、AWS等でデータベース専門に特化したサーバーを借りて、安価に安全に運用できるようになってきたので、1台のサーバーで済ませるような事は少なくなりつつあります。

アプリケーションサーバーの種類

ここでは、アプリケーションサーバーには、どのような種類があるのかを解説します。

アプリケーションサーバーには、たくさんの種類があり、Webアプリで書かれている言語によって使えるものが異なります。 専用のアプリケーションサーバー用のプログラムが動いている場合もあります。

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

アプリケーションサーバーとWebサーバーでは、機能面で殆ど違いがないため、区別が曖昧になってしまうことがあります。

この2つでは、違うところが大きく4種類あります。

  • 静的配信か、動的コンテンツ作成か?
  • キャッシュを担当するかしないか?
  • DBサーバーにアクセス出来るか、できないか?
  • 配信速度が速いか遅いか

静的コンテンツ配信か、動的コンテンツ作成か?

Webサーバーは静的コンテンツの配信に特化しています。Webサーバー自身がコンテンツの内容をチェックしたり、ユーザーにあわせて新しく情報を書き換えたりすることはありません。「ただ、やってきたリクエストに対して、高速にレスポンスを返す」これが、Webサーバーの役割です。

一方で、アプリケーションサーバーでは、自身でコンテンツ内容をチェックし、ユーザーにあわせて新しく情報を書き換えてコンテンツを提供します。 Webサーバーよりも複雑ですし、機能追加や削除が頻繁に行われるので、プログラム書きやすさ重視のプログラミング言語で書かれることが多いです。 そのため、動作が遅くこのサーバーから直接コンテンツを配信するのには向きません。

キャッシュを担当するかしないか?

Webサーバーでは、同じリクエストがあった場合、同じコンテンツを配信するようにキャッシュの設定することができます。このメリットとして、アプリケーションサーバーに問い合わずにコンテンツを返すので、高速配信が可能ですし、大量のリクエストがあったときにも対応することができます。

一方で、アプリケーションサーバーでは、アクセスごとに内容を変更する可能性があるので、毎回毎回コンテンツを生成します。そのため、コンテンツのキャッシュ機能はあまり使われません。

DBサーバーにアクセス出来るか、できないか?

Webサーバーはデータベースにアクセスできません。というか、絶対しません。なぜなら、ユーザーからのリクエストを正確に処理することに向かないからです。

アプリケーションサーバーでは、リクエストがユーザーからのものかどうか。正規なものかどうか?形式は正しいか?などを細かく精査して、ちゃんと正しいことが証明されたらDBにアクセスしに行きます。

配信速度が速いか遅いか

以上の理由により、Webサーバーはキャッシュ機能や配信に特化しているため配信速度が高速ですが、アプリケーションサーバーでは様々な機能がを積み動いているので、動作が遅く、大量の配信には向きません。

アプリケーションサーバーの環境構築方法ざっくり紹介

アプリケーションサーバーは、自分で書いているプログラムに則ってコンテンツを配信するシステムです。今一般的なものが、「Ruby on Rails」というフレームワークを使ったアプリケーションでしょう。

Linuxを使い、Ruby on Railsが動く環境を作ることができれば、それは立派なアプリケーションサーバーになります。

Linuxは、<ConoHa やAWSをつかってもいいですし、Virtual Boxで仮想的環境を使って作ってもOKです。

今回は、Railsを使ったアプリケーションサーバーの作り方をざっくりとご紹介します。

  1. サーバーを用意する
  2. Rubyをインストールする
  3. Railsをインストールする
  4. Railsアプリケーションを作成する
  5. Railsの起動に必要なライブラリをGemfileからインストールする
  6. Railsの実行モードをProduction(本番環境モード)で起動させる

サーバーを用意する

まずはサーバーを用意しましょう。 自宅のパソコンを使ってもよいのですが、管理や電気代の面でサーバーを借りたほうが安く高性能なサーバーを使うことが出来ます。 私のが初心者におすすめするのは、ConoHaレンタルサーバーです。

下記の画面が出るまで進めます。どのようにするのかは別の記事で紹介します。

$ ssh [email protected]
[email protected]'s password: 
[email protected]:~#

Rubyをインストールする

Rubyをインストールするのと同時にRailsをインストールするのに必要なライブラリやツールも同時にインストールします。

#
# ライブラリをインストール
#
set -x \
&& apt-get update \
&& apt-get install -y language-pack-ja-base language-pack-ja \
&& locale-gen ja_JP.UTF-8 \
&& update-locale LANG=ja_JP.UTF-8 \
# ツール関連
&& apt-get install -y build-essential cmake file git curl wget ruby gem nodejs vim zsh python mysql-client bash-completion \
# python3関連ライブラリ
&& apt-get install -y libffi-dev libbz2-dev \
# rails関連ライブラリ
&& apt-get install -y ruby-dev libssl-dev libreadline-dev zlib1g-dev \
# database関連ライブラリ
&& apt-get install -y libsqlite3-dev default-libmysqlclient-dev \
# ライブラリアップデート
&& apt-get upgrade -y
Setting up cloud-init (19.1-1-gbaa47854-0ubuntu1~18.04.1) ...

Configuration file '/etc/cloud/cloud.cfg'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** cloud.cfg (Y/I/N/O/D/Z) [default=N] ? <Enter>

Railsをインストールする

Railsをインストールします。

$ gem install rails bundler

Railsアプリケーションを作成する

$ rails new starterkit --skip-bundle

Railsの起動に必要なライブラリをGemfileからインストールする

$ cd starterkit
$ bundle install --path vendor/bundle -j4

Railsの実行モードをProduction(本番環境モード)で起動する

$ RAILS_ENV=production bundle exec rails server -b 0.0.0.0 -p 3000 -d
=> Booting Puma
=> Rails 5.2.3 application starting in production 
=> Run `rails server -h` for more startup options

起動後、下記のように「IP+ポート番号」を入力するとアプリケーションサーバーに直接アクセスすることが出来ます。

まとめ

この記事をまとめると、下記のようになります。

  • アプリケーションサーバーは、「Webの3層システム」Webサーバー、APサーバー、DBサーバの3種類のサーバーで構成される仕組みの1つです。
  • Webの3層システムを意識して作られたシステムは、セキュリティ面でも管理コスト面でもメリットが多いですよ
  • アプリケーションサーバーには、たくさんの種類があり、使うプログラミング言語にあわせて使いましょう
  • Webサーバーは配信に特化し、アプリケーションサーバーはコンテンツ作成に特化していますよ

以上です。

また、この記事でもわからなかったら、下記の本を見れば網羅的に知識を得ることができます。 「Webの3層システム」のことだけではなく、この記事ではサラッと進めた「静的」「動的」についてや、Webがどのようなしくみで成り立っているのか。 など、初学者にも非常にわかりやすい説明文・図で丁寧に解説されている非常に良い本です。

体系的に広くまんべんなく学べるので、初心者殺しのIT用語や、部分的に解説されてわからなかった部分もきっと理解が進むようになるはずです。

この記事を書いた人

自身がプログラミングを独学で勉強し始めて躓いた経験を元に、これから勉強をする人に向けに「イラスト多めでわかりやすい記事」にこだわって情報を発信しています。

現在はフルスタックエンジニアとしてサービス開発などのお仕事をしています。