Webアプリケーションの基本概念

1.Webアプリケーションの基本概念

Webアプリケーションを作成するにあたり、事前に調査してみると様々な方法があることが分かりました。

開発言語としてPython(パイソン)を用いるという前提を考えていたため、下記のような構成で開発を行うことにしました。

オンプレミス型のアプリケーションとは異なり、クラウド型でのアプリケーションとなるため、使用者が使用するブラウザからサービスを提供するためのサーバーまで、メリット・デメリットを考慮した選定とセッティングが必要となってきます。

その中で、今回はDjango(ジャンゴ)を用いた開発を行うことにしました。

2.なぜ"Python"を採用したのか?

Java

2010年以降、世界的にPythonでアプリケーション開発を行うことが流行ってきていますが、不思議なことに日本ではまだまだ採用例が少ない言語となっているようです。

その理由を考えてみると、日本ではまだまだJavaを用いる案件が非常に多い印象で、多種多様なお客様からJava案件のお話を聞きます。

これはJavaの成り立ちが大きく関係しているのではと感じています。

JavaはC言語から派生したプログラム言語ですが、コンピューターやOSに依存せずに動作することが出来ることからサーバーだけでなくスマホアプリの開発など多種多様な用途で使用することができます。

またオブジェクト指向言語であるため、C#などの開発に従事していた開発者がスムーズに移行できたことが大きいのかなと想像できます。

COBOLで開発されていた銀行などの業務システムも、処理速度が非常に速いJavaでリプレースされる案件も多いのが現状です。

また最大の特徴としてインターネットとの相性が良いため、【Twitter】【Android】がJavaで開発されていることは有名ですね。

インターネットと相性が良いということで、セキュリティ面でも強みを持っているとも言えます。

特に、Webアプリケーションやスマホアプリ、IoTを組み込んだ家電製品などでは、セキュリティが非常に重要となってきます。

Python

一方、PythonはJavaよりも少し前に誕生した言語ですが、シンプルな構成のため可読性が高い(プログラム初心者でも学びやすい)言語であることが特徴です。

近年ではWebアプリケーション以外にも人工知能(AI)などでも使用されており、有名な採用例としては【Youtube】【Instagram】があります。

Pythonの最大の特徴として、人工知能(AI)を作りやすいことにあります。

人工知能(AI)の研究で使用されていた経緯があるため、機械学習やディープラーニング専用のライブラリが用意されているなど開発しやすいことが挙げられます。

またPythonではコンパイル(コンピューター言語に翻訳)する必要がないことも大きな特徴となっています。

そのためPythonはスプリクト言語に分類され、変更したファイルのみを入れ替えると直ぐに反映されるという特徴を持っています。

同じようなスプリクト言語としては、JavaScript・Perl・PHP・Rubyなどがあります。

将来的に人工知能(AI)の開発を行うための基礎知識を身に付けるという前提の下で、Pythonを採用することになりました。

3.Django(ジャンゴ)とは?

Pythonを用いてWebアプリケーション開発を行う手段はいくつかありますが、今回はDjangを用いることにしました。

Djangoとは、開発をスムーズに行うことができるような便利機能がたくさん付属した「Webフレームワーク」の一種です。

Django公式サイト:https://www.djangoproject.com/

 

主な特徴としては、次のものが挙げられます。

セキュリティ面で安心

Webアプリケーションの開発で使用される「管理画面」や「ユーザー認証」などが予め用意されており、セキュリティ面でも安心して使用することができます。

フレキシブルな運用

Webアプリケーション名で使用される各ファイルの役割に応じて、構成する場所(方法)が規定されているので構成が把握し易いのが特徴です。
またそれぞれのパーツ(部品)の独立性が高いため、容易に拡張することができます。

オープンソースで日々進化

オープンソースであるため、世界中の開発者によって日々改良されており、使いやすさと信頼性がどんどんと向上しています。

動的ファイルを扱える

同じHTMLファイルでも、Pyhonを組み合わせることで動的な表示内容を行うことができます。
この動的ファイルを扱えるのが最大の長所です。
静的ファイルの表示速度はあまり早くありません。

Webアプリケーションを開発するうえで欠かせないのがデータベースですが、Djangoではサポートされているデータベースの種類も多く、設定ファイルを変更するだけで容易に使用することができます。

※実際にデータベースを使用する際には、サーバーにおいてconfigファイルなどで詳細な設定は必要となります。

 

サーバー(VPSサーバーやクラウドサーバー)が容易出来れば、Djangoを用いたWebサプリケーションが比較的容易に環境構築することができることが最大の利点です。

DjangoだけでもWebアプリケーションを一般公開し使用することが出来ますが、運用するにあたっては不都合なことも出てきます。

そこで活躍するのが、Nginx(エンジンエックス)とGunicorn(グリーンユニコーン)です。

4.Nginx(エンジンエックス)とは?

Nginx

Nginx(エンジンエックス)とは「Webサーバー」のことを指します。

Webアプリケーションでは様々なサーバーが動作していますが、その中心的役割を果たしているのがWebサーバーです。

Webサーバーにも何種類かあり、それぞれ得意分野が異なっているので、用途に応じて選択する必要があります。

Nginx公式サイト:https://www.nginx.co.jp/

Webサーバーとして有名なものとしてApache(アパッチ)があります。

現時点で最も使用されているWebサーバーとなりますが、近年ではNginxの比率も上昇してきています。

NginxとApacheの違いについて、簡単に見てみましょう。

【 Webサーバー 】
Nginx

エンジンエックス

複数のアクセスが急激に発生した場合に、内部的に1つの対応として処理することができるため、処理速度が遅くなりにくくサーバーダウンしにくい特徴があります。

そのため、デメリットとして大量の動的コンテンツ向けのWebアプリケーションには向きません。
動画などが複数存在しているとApacheを使用した方が無難でしょう。

Apache

アパッチ

複数のアクセスが急激に発生した場合に、1アクセスに対して1つの対応を行うためサーバー負荷が大きくなり、結果的に処理速度が遅くなったり、最悪の場合にはダウンしてしまうこともあります。

つまり、Apacheの方が丁寧(円滑)に動作するため、動画を中心としたWebアプリケーションには向いています。

Nginxは検索してみてもあまり情報が出てこないことが多かったのですが、最近になって使用される割合が増えてきたことで様々な情報(設定方法や使用方法など)が検索結果としてピックアップされるようになってきている印象です。

WebサーバーはWebアプリケーションがどのような内容になるのかによって選択すべきだということが分かりますね。

尚、Webサーバーとはクライアント(利用者)がインターネットを通じて最初にアクセスを行うサーバーとなるため、とても大切な部分となりますので慎重に選びましょう。

Nginx・Apacheのいずれにしても、静的ファイル(HTML)などの表示は、DjangoなどのWebフレームワークから直接参照するよりも断然スピーディーに行うことが出来るので、Webアプリケーションの環境には必須のものと言えます。

Djangoが動的ファイルを担当(Pythonで動的処理を構築)、Nginx・Apacheで静的ファイルを担当と覚えておきましょう。

5.Gunicorn(グリーンユニコーン)とは?

Pythonでは、アプリケーション(DjangoなどのWebフレームワークで作成)とWebサーバー(Nginx・Apacheなど)のインターフェースとして、WSGI(Web Server Gateway Interface)(ウィズギー)という仕様が広く利用されています。

※特にNginxを使用する場合は、Gunicornの使用を強く推奨されています。

Djangoにも標準でWSGIに準拠したwsgirefというサーバーが実装されていますが、上記理由からGunicornを利用します。

DjangoなどのWebフレームワークはWSGIの仕様に準拠しているため、Gunicornなどの導入も容易に設定することができます。

Gunicorn公式サイト:https://gunicorn.org/

 

ところで、アプリケーションとWebサーバーの『インターフェース』とは、何のことを指しているのでしょうか。

 

Javaでは「サーブレット」APIを使用するとWebアプリケーションフレームワーク内で記述されたアプリケーションを任意のWebサーバーで実行できます。

しかしPythonではフレームワークの選択をWebサーバーの選択から分離し、ユーザーが自分に合ったペアリングを選択できるようになっているためシンプルでユニバーサルなインターフェースが必要となります。

そのインターフェースをWSGI仕様と呼び、Webサーバーとアプリケーション間で実装する必要があります。

WSGIにも様々なインターフェースの種類があり、Gunicorn以外にも「uWSGI」や「mod_python」、「PyISAPIe」などがあります。

広く用いられているuWSGIとGunicornの違いについて簡単に見てみましょう。

【 WSGI 】
uWSGI

ユーウイスキー(ウエスギ)

多機能が最大のポイントです。
RubyやPHPなどにも使用することができるほど汎用性が高い。
その分だけ、設定パラメータが多い。

多機能な割に処理速度が速いのが特徴。

Gunicorn

グリーンユニコーン

シンプルだが十分な機能を有する。
WebフレームワークとWebサーバーの関連付けがシンプルで扱いやすい。

様々なWebフレームワークと互換性があり、シンプルなためリソース消費も少ないのが特徴。

uWSGIを選択しても全く問題はないのですが、設定パラメータが非常に多く、理解してから運用するまでには時間がかかりそうなので、今回はGunicornで開発を進めます。

Gunicornの問題点は、こちらもあまり検索してもヒットしないことですが、設定項目が少ないのでそれほど大きな問題にはならないかなという印象です。

何よりも、NginxがGunicornとの組み合わせを推奨しているということも重要な要素ですね。