S-3.開発におけるサーバーの流れ


今回は開発におけるサーバーの流れについてです。
普段サイトを見るときやアプリで買い物をするとき、会員登録するときもゲームをするときも、
常にサーバとのやり取りが行われています。

しかし皆さんは、今後ユーザーではなく開発者としてサーバのことを知る必要がありますので、
カリキュラムのほかでも自己学習をして理解を深めておくようにしましょう。


インターネットをWebブラウザで見る際のシステム構成

皆さんがお使いの、
ブラウザGoogle Chrome(グーグルクローム)や、iPhoneのSafari (サファリ)などのインターネットを見るシステムは、
簡単に表すと下図のような形になっています。

情報が取得するときの流れについて説明します。
1:まず、欲しい情報をインターネットを通して、Webサーバーで呼び出します。
2:格納されているデータベースから欲しい情報を取得します。
3:取得した情報をWebサーバーがインターネットを経由してブラウザに情報を渡します。

ちなみに、画像ではWebサーバーは1台に見えますが、
実はWebサーバーやデータベースは1台だけでありません。
実際は数万人が利用するサーバーなので、数台~数百台が設置されていて、
1本のネットワークから来た情報を数台のサーバーのどれかに振り分けて、
情報をもらうようにしています。


②Webアプリケーションを見る際のシステム構成

普段「アプリ」と呼んでいるGmailやYouTubeはブラウザ上でアプリのように動いているサービスで、正式には「Webアプリケーション」というものになります。

まず、クライアントサーバーというサーバーがあり、 
これはAPIサーバーとの間で、HTTPリクエストという形で送受信しています。
APIサーバーが作成した情報を、クライアントサーバーに渡してブラウザに表示しています。

サーバーサイドの言語としては主にPHPやJavaを利用しますが、
情報をブラウザに渡してHTML、CSS、Javascriptで表現したりしています。

今後techUPで作成していく中で、
Webサーバーとデータベース作成をするところまで構築作成していただきます。


③スマホアプリのシステム構成

次にスマホ内のアプリのシステム構成です。
ゲームアプリも主流のシステム構成はこちらとなっています。

アプリは、インターネット経由で、外部のサーバーにつながっていて、
こちらの場合も同じような構成で、APIサーバーというのがあります。

これは、外部から手軽に利用できるように提供する仕組になっており、
APIサーバーに情報の受け渡しをする役割をスマホのアプリが担っています。

ただしその際にAPIサーバーとアプリの間には、個人のアプリ情報があることと、
セキュリティの面が保証される必要があり、そのユーザー情報のやり取りを行うようになっています。
尚、こちらも、数百万人が利用するアプリはサーバーは数百台が準備されています。


④ルーターやサーバーの種類について

router(ルーター)…スマホやパソコンをインターネットで繋ぐものです。
異なるネットワークを接続するための装置ではありますがですが、いろんなサーバーにつながっています。

dev(開発)サーバー…例えばdev(開発)サーバーには、devサーバー1、devサーバー2と複数あり、
バグ用サーバーや、新規改修用サーバーがあり、個人開発用devサーバーたてたりすることもあるので、
それと合わせてstg(ステージング)サーバーも1、2、3とテストしてから最終的に本番に上げるということもあります。

例えば、データベースでも、データがはいっているサーバー環境で、テストを行ったり、数百万件の仮データで付加を調べたり、本番と同等の負荷や環境のもとでテストしたりします。

ゲームアプリに例えると、毎週・毎月のゲーム内イベントがあります。
イベントですと1つのサーバーではあまり動かせないので、
イベントサーバー(=devサーバー)1,2という形でいくつかに分けて動かしています。

ちなみにdevサーバーの種類は、アプリの状況やテスト環境で種類があります。
開発する際の流れとしては、
ローカルで開発→デブサーバーで集約→最終的に本場に近い環境のステージングでテスト→本番にリリース
という流れが、大抵の開発過程になります。

stg(ステージング)サーバー(テストサーバーの一種)
…本番環境へとアプリケーションが展開される直前に、本番と同様のテストを行うためのサーバー。
ここでは実際に本番に近い環境でテストします。

test(テスト)サーバー…開発の際にリリース前(=本番サーバーにあげる前)テストするサーバー。
テストサーバーの中にも種類があり、
例えば、QCサーバーというテスト担当専用テストサーバーがあったりします。
他にも、iPhoneやandroidのアプリを公開するために申請する専用のサーバーがあり、
これはAppleやGoogleが実機審査したりします。
ちなみに、審査に落ちると公開できません。

product(本番)サーバー…実際に一般のユーザーがアクセスしているサーバーです。
その本番サーバー、また、プロダクションともいいますが、これで運用しています。


⑤local(ローカル)の環境とサーバーについて

ローカル環境…自分のパソコンの中で開発するためのローカルサーバー。
自分のパソコンの中で開発するための自分のためだけのサーバー。

ローカルサーバー…ローカルまたはマウントされたフォルダで実行されており、
ローカルサーバーは最初にコーディングする場であり、ローカルのサーバーから、アプリ開発を行っていきます。(これがXAMPPやMAMMPのこと


⑥開発におけるサーバーの流れ

まず、自身のパソコンで実際にデータベースを立てて仮想サーバーを作ります。
仮想サーバーというのは、自分のパソコンの中にサーバーを擬似的につくることです。
(=これをローカル環境を構築すると言います)

※仮想サーバー…MAMPやXAMPPも仮想サーバーの一種。対義で物理サーバーがあるが、
場所代やサーバーそのものの購入代がかかるため、大規模の開発でなければ仮想サーバーを使うことも多い)

また、パソコンという閉じた中で開発することになるので、
他の人の影響を受けず・他人に影響を与えずコーディングが自由にできます。

ある程度完成した段階で、ローカルで作ったソースを移動させます。
これをコピーするようにテストサーバーにあげて、そこでテストします。
ここのテストサーバーは自分が作ったアプリのソース以外に、
他の人のソースも集約されているので、全体として動かすことができます。

※ちなみにですが、全体のソース管理をしてくれるツールがあり、GitツールSVNがこれに該当します。

テストサーバーでテストしている際に、
バグを含んでしまった場合は再度ローカルで修正して、またテストサーバーにソースを上げ直します。

テストサーバーでテストして問題なく完成したら、
次にステージングサーバーで、さらにテストします。
ステージングサーバーは本番サーバーにあげる直前のサーバーになるので、
ユーザー情報もダミーを用意して高負荷アクセスに耐えられるか等、
本番と同じ環境下でのテストを行います。


⑦ローカル環境における開発準備(ツール)ここから下別の話
次にローカルサーバーの準備についてです。
techUPの学習の中でも自分のパソコン内に、VScodeやXAMPPをインストールしますが、
実際の開発現場でもいきなりコードを書き始めるのではなく、
現場から貸与されたパソコン、または自身のパソコンを用いる際は自身のパソコン内に、
こういったソフトやツールをインストールすることから始まります。

その中の1つに、サーバー接続ツール(ターミナルソフト)というものがあります。
サーバーに接続しコマンドラインで操作ができるソフトウェアです。
・windows は コマンドプロンプト
・mac は ターミナル
のことを指します。

またソースコードを作成するエディターも必要です。
エディターも開発現場によって変わりますが、
techUPの学習内ではVScodeを使用していきます。


⑧ローカル環境における開発準備(必要性)
他にもローカル環境を作るためには様々な準備が必要です。

先程仮想サーバーとしてあげた、XAMPPやMAMPも必要ですが、
その他にもVMware(ヴイエムウェア)、vagrant(ベイグランド)やdocker(ドッカー)というのがあります。

なぜこのように様々なソフトやツールを入れるのかというと、
開発環境を整える、というのはもちろんですが、
開発チーム全体の開発環境を同じにするのも目的の一つです。
それぞれの担当工程を開発した先で、
最終的にはそれらを統合して一つのシステムやアプリにしますが、
同じ環境設定がされていないと、
統合のする時に差異が起きるためチーム全体での環境統一は必須になります。

※これはサーバーシステムのことなのですが、ベースにこれらのソフトウェアがないと、
データベースも、クライアント側も接続できないので、
基本はここから開発サーバーとしてコーディングを行います。
当然ローカルの環境になるため、壊れても自分にしか影響がないです。
そこでテストしつつ、本番と同じようなデータを作ってデバッグしていく流れになります。