サーバーとは?

最終更新日: 2019年 04月22日

前回でWebアプリについて説明をしてきましたが、今回はその一部であるサーバーについて説明していきます。

サーバーというと概念が抽象的で最初のうちはわかりづらいのですが、一度ハラオチするとサーバーの概念自体は そこまで難しいものでもないのでこの記事でサーバーとは何か?というところを説明できるようにしていきましょう。

プログラミングに限らない広い意味のサーバーというのは、ウォーターサーバーやビールサーバーなどがあるように「サービスの提供者」のことを サーバーと呼びます。ウォーターサーバーというのは水を出すボタンを押すと冷たい水やお湯が出てきたり、ビールサーバーの場合はビールが出てきますが、 この水やビールを提供すること => サービスを提供するということです。

プログラミングやWebアプリにおけるサーバーもこれと同様の意味を持っており、WebアプリのサーバーはWebサーバーなどと呼ばれます。

Webサーバーとは?

Webサーバーとは色々な定義がありますが、HTTPと呼ばれる通信プロトコルベースでの通信を行うことのできるサーバーはWebサーバーとなります。

普段みなさんがよくみているサイトもこのWebサーバーを介して、HTMLをみているのですが(ここの仕組みがわからない方はこちらの記事を参照ください)このクライアントからのリクエストとレスポンスに HTTPというプロトコル(Webサーバーが理解できる言語みたいな感じで理解すると良いと思います)を使用しています。

Webサーバーは普段目にするHTMLを返却するサーバーもありますが、最近ではUIのアニメーションなどがどんどんリッチになってきてJSONと呼ばれる形式のレスポンスを返すサーバーもあります。 Webサーバーの一般的なレスポンスはHTMLですが、レスポンスは別の形式であることもあり厳密なWebサーバーの定義はHTTPで通信を行なっていることということになります。

Webアプリにおけるサーバーは正確な表現をするとWebサーバーなのですが、Webアプリにおけるサーバーは多くの場合でWebサーバーなので省略してサーバーと呼ばれることが多いです。

その他のサーバー

サーバーという単語はプログラミングではよく使われるのですが、DBサーバー、ファイルサーバーなどサーバーの役割によって色々な名前が付いていたりします。

プログラミングの世界ではクライアントとサーバーという概念は非常に大切で、DBの場合はデータベースの情報が欲しいと依頼するものがクライアント、実際のデータを返却するのがサーバー。 ファイルサーバーの場合は、ファイルを取得する方がクライアント、実際にファイルを配信する方がサーバーというようにクライアントとサーバーという対の概念が常に存在します。

前回の記事で Webアプリの全体の構造を説明しましたが、現在のWebアプリもこのようなクライアントとサーバーという関係で構築されているので、このクライアントとサーバーという概念は理解しておきましょう。

サーバーとは大きくて処理性能の高いコンピュータのこと?

コンピュータをいじっていてサーバーという言葉を聞くとどこかのデータセンターにある物々しいコンピュータを思い浮かべる方も多いのかもしれませんが、 サーバーを無線LANルータなどの機器の名前かと思っている方も多いかもしれませんが、サーバーというのは機器の名前ではなく役割の名前です。

データセンターなどのでっかいコンピュータを見ると何か特別なマシーンのように勘違いしてしまう方もいるのかもしれませんが、実際の基本的な構造自体はみなさんが使っている ノートパソコンなどとなんら変わりはありません。CPUがあってメモリがあってHDDがあって、OSがあってという構造は同じです。 (ちゃんと商用利用されいてるサーバマシーンは家庭用のコンピュータより高性能であることは確かですが)

サーバーと聞いたときに大きなコンピュータを思い浮かべてもよくて、間違いではないのですがサーバーというのはあくまでも役割の名前で、サーバーという名前のマシーンではないことを覚えておきましょう。

サーバーで行う処理とサーバサイドのプログラミング言語

こちらの記事でも触れましたが、サーバーでは主にデータベースの更新や、 ユーザーに見せるための情報をデータベースから取ってくる、外部APIからデータを取得するなどなどの処理を担当します。

サーバーのプログラミングを担当するエンジニアをサーバサイドエンジニアと呼びますが、サーバサイドエンジニアはこれらの処理のコードを書くことが仕事で フロントエンドエンジニアに比べて、サーバサイド言語の知識やSQL、データベース、その他ミドルウェアの知識が必要とされます。

サーバ側で使われる言語で一般的な言語はJava, C#, Ruby, PHP, Goなどでこれらの言語を学ぶ => サーバサイドエンジニアということになります。 もちろんエンジニアの中にはフルスタックと呼ばれるサーバーもフロントのコードも書くエンジニアもいますが、人により経験年数や興味により得意分野がわかれるので、 自分がサーバサイドに興味がある場合はこれらの言語を集中的に勉強すると良いでしょう。

また、多くのWebサイトのサーバーのOSにはLinuxが使用されており、ほとんどのケースでGUIでの操作は行わずコマンドベースでの操作となるのでサーバーの作業を行う時は コマンドラインベースでの操作が必ず必要になってきます。

環境構築とローカルホスト

ここまででサーバーという概念が理解できたかと思うのですが、プログラミング初心者がよくつまずく環境構築についての補足的な知識を説明しておくと、 Web開発においうて多くの場合何かを作ろうとした場合にローカルにそのWebアプリの環境構築を行う必要があります。

ローカルというのは自分のPCということですが、現在のWeb開発の現場では開発者のPC内にそれぞれ開発するアプリのサーバーを立てて、自分たちが開発したりテストをする場合はそこで動作確認やコードの修正を行なっていきます。

ここらへんは、Webアプリのクライアントとサーバーの関係が理解できていないとつまずくのですがこういった場合の環境構築というのは、自分のPC上にサーバーを立てて、そのPC上のサーバーに自分のブラウザからアクセスして、アプリの挙動を確認していきます。 よくRailsやLaravelの環境構築を行うと「 http://localhost というURLにアクセスしてください」というサジェスチョンがあるかと思うのですが、このlocalhostは自分自身を示しており、http://localhost は自分のPC上のサーバーにアクセスするという意味になります。

環境構築を行なっている際にチュートリアルに言われたままなんとなくローカルホストに繋いでいるという方ももしかしたらいるかもしれませんが、ローカルホストというのがどういう概念でローカルの環境構築というのが どういうことかというのを始めたばかりのうちに理解するのは意外と難しいのでWebアプリの仕組みを覚えるのと一緒に、

「ローカルの環境構築 => ローカルに開発しているアプリのサーバーを構築すること」

というのを覚えておきましょう。

まとめ

  • 広い意味のサーバーとは、何らかのサービスを提供するもののこと
  • Webアプリにおけるサーバーは、HTTPを介してHTMLやJSONなどをリクエストに応じて返却する
  • サーバーとは機器の名前ではなく、役割の名前
  • ローカルホストとは自分のPC自身のこと

以上、実物を見たりできず実態がわかりづらいサーバーですが、サーバーについて色々な角度から説明を行なってみました。

概念を理解するのに実物を見られると早いのですが、プログラミングはそれができなかったりするので難しいです。 そのため代替手段として、繰り返しサーバーというのがどういうものかという説明を読んだり、色々な角度から書かれている説明を読んだりすると理解が深までしょう。

この記事がその理解のきっかけになると嬉しいですが、ネットでその概念を調べてみてそれに関する様々な記事を読んでみるのも良いと思います。