WEBアプリケーションとは、WEBの仕組みを利用したアプリケーションのことです。一般的なコーポレートサイトやブログサイトなどとは異なり、高度な機能を持ったWEBサイトです。WEBアプリケーションを開発するにはHTMLだけではなくWEBプログラムを利用するためフレームワークを利用します。他のWEBアプリケーション機能が共有されているものを利用するために「WEB API」を利用することもあります。
「WEBページ」とは、WEB上にある文書のことです。特定のドメイン配下にあるWEBページの集合体が「WEBサイト」です。WEBサイトの表紙にあたるページはトップページと言います。「ホームページ」とはWEBブラウザを起動したときに最初に表示されるWEBページのことですが、現在ではWEBサイトのことを指して使われることが多いです。WEBを介して利用するサービスを提供するのが「WEBアプリケーション」です。WEBアプリケーション開発のプログラムで利用されるAPIなどが「WEBサービス」と言います。WEBサイトやWEBアプリケーション、WEBサービスを提供される仕組みが「WEBシステム」となります。
クラウドサービスでも同じ仕組みで提供されており「WEBシステム」は「IaaS」、「WEBサービス」は「PaaS」、
「WEBサイト」「WEBアプリケーション」は「SaaS」のように分類できます。
WEBアプリケーションはWEBサイトとは異なり多機能で、コメントやデータ加工や動画視聴、ECサイトのような商品購入、銀行のようなお金の振込みなどができるインタラクティブ(双方向)なサービスを受けることが出来るWEBサイトのことです。具体例としてはYoutube、twitter、各種ネットバンキング、各種ECサイト、各種飲食店の予約サイトなどがあげられます。例えばユーザはWEBアプリケーションを通じて次のような体験をすることが出来ます。
インタラクティブはWEBアプリケーションを通じて、ユーザ間でデータを対話するような形式でやり取りや操作をすることで、情報を提供し合うような役割をします。また各種アカウントフォローすることやECサイトでお気に入り登録や購買をすることで、投稿主や事業者がユーザ自身の興味がある内容を提供する傾向があります。これは継続的にユーザ自身に属性・行動データ履歴といったデータを基に顧客ニーズを把握し、適切な商品・サービスなどを提供する手法(パーソナライズ)を重視していることで、近年のインターネットサービスで採用し流行していことも特徴です。
WEBアプリケーション開発には、PHPやRuby,Python、Javaなどのプログラミング言語が多く利用されています。WEBアプリケーションを動作せる方法としては、昔から使われている手法にCGI(Common Gateway Interface)があります。CGIはWEBサーバからプログラムを実行するためのインターフェイスで、静的なWEBサイトから動的なWEBアプリケーションを呼び出すことができます。ただし毎回プロセスを起動するため、少し時間がかかってしまいます。そこで、最近ではWEBサーバ内のプロセスでWEBアプリケーションを実行する方法が用いられていることが増えてきており、比較的高速な実行が可能で、サーバにかかる負荷も低くなります。
旧来のCGI経由でアプリ起動よりサーバプロセス内で実行する方が、高速な処理とともにサーバに掛かる負荷の軽減が期待できます。
フレームワークはプログラミング言語(開発言語)が基本となっています。プログラミング言語は200種類以上存在し年々増加をしていますので、流行も毎年変化があります。2021年12月時点で利用されているランキングを、言語と関連するフレームワークや特徴でまとめてみましたので以下をご覧ください。
順位 | 言語 | 利用率 | フレームワークや主な利用用途や特徴 |
---|---|---|---|
1 | Python | 12.90% | 「Django」フレームワークで有名。機械学習など様々なシーンで利用されるようになった |
2 | C | 11.80% | ライブラリに依存することをしないで開発ができるので、あまりフレームワークを利用しないことが特徴 |
3 | Java | 10.12% | 主に「Apache Struts」フレームワークで有名。昔から人気が高く、どのパソコンでも利用でき、 オブジェクト指向であることが特徴。 |
4 | C++ | 7.73% | 「Unity」ゲームエンジンで有名。オブジェクト指向、手続き型プログラミング、データ抽出、 ジェネリックプログラミングなどの複数の要素を兼ね備える。 |
5 | C# | 6.40% | 「.NET Framework」で稼働し、タイプセーフでオブジェクト指向言語、文法はJavaと似ている。 |
6 | Visual Basic | 5.40% | Microsoft社によって開発され歴史があり、特徴は複雑なことは得意とせず、使いやすさを重視した言語。 |
7 | JavaScript | 2.30% | 「React」「Angular」「Vue」「jQuery」などのフレーワムワークが多方面で利用されている。 主にWEB開発のフロントエンドコーディングで振る舞いをコントロールするために利用される。 |
8 | Assembly language | 2.25% | コンピュータのCPUが直接解釈・実行できる機械語と正確に対応する言語。 アセンブラと呼ばれるソフトウェアで機械語をプログラムに変換してから実行される。 |
9 | SQL | 1.79% | リレーショナルデータベース管理システム(RDBMS)のソフトウェアを操作・制御する 国際標準のデータベース言語。 |
10 | Swift | 1.76% |
AppleのiOSおよびmacOS、Linux、Windowsで利用出来る言語。 iOSアプリ開発で利用される事が多い。 |
「MVCモデル」はデータと業務処理に関する部分「Model」、結果をユーザに出力する部分「View」、ユーザの命令を受けて各部に指示を出す部分「Controller」に分けてアプリケーションを設計します。MVCモデルのメリットは、仕様変更が別の要素へ影響を及ぼさないため、要素ごとに個別に開発をすることが出来る点です。近年のWEBアプリケーションは規模が大きく、少しづつ機能追加が行われるものが多くなってきているため、改修や機能追加が容易で分業開発を行いやすいMVCモデルが採用されています。
モデル(Model)はアプリケーションの扱うデータ処理と業務処理を行います。主にデータベースに該当し、ユーザからデータの処理命令のリクエストが来ると、表示データとしてビューにリクエストします。
ビュー(View)は出力(表示)を担当する部分です。表示命令のリクエストが来るとユーザのブラウザ画面表示の処理をします。
コントローラ(Controller)はユーザからの命令を受けて、データの処理はモデルに、データの表示はビューに指示を出します。モデル、ビューの各処理が完了したら「完了応答」を受けます。
MVVM(Model,View,View Model)は双方向のやり取りが必要なアプリケーション(インタラクティブアプリケーション)で用いられる手法です。「画面上の項目を書き換えたときに俗字反映したい」「データベースに保存されている内容が変更された時に、画面にもデータを反映したい」などの場合、具体的な例ではtwitterやYoutubeなどにコメントを入れると即時に表示するなどの仕組みがあり、リアルタイム性を重視したアプリケーションで用いられる手法です。
MVP(Model,Veiw,Presenter)は「ソースコードの変更耐性」を高めるために用いられる手法です。WEBアプリケーションではプログラムソースコードを頻繁に修正を繰り返すことを要求されるケースが増加していることからModelの簡素化とViewを独立させ、ビジネスロジック(業務で利用する為のデータベース上のデータに対する処理手順)をPresenterに集約することで、各モジュールの変更が他のモジュールに及ぼす影響を最小限に出来るため実現した手法です。
WEBアプリケーションの構成は一般的には3層構造と呼ばれる階層構造によって構成されています。またWEBアプリケーションはインターネットの入り口に位置し、極めて負荷と脅威にさらされやすいことから負荷分散とセキュリティ対策が必要とされます。3層構造の解説をもとに負荷分散の方法やセキュリティ対策を考察します。
WEBアプリケーションは基本的に3層構造(3層アーキテクチャ)と呼ばれる階層構造になっています。この3層構造はユーザインターフェイスとなる「プレゼンテーション層」、業務処理を行う「アプリケーション層」、データ処理や保管を行う「データ層」に分類されます。
プレゼンテーション層のクライアントサイドは、WEBブラウザに表示させる役割をします。またクライアントサイドスクリプト(フロントエンド)ではHTMLやCSSや画像でUI(ユーザインターフェイス)を表示させるだけではなく、javascriptなどを用いて「振る舞い」を表現しユーザにUX(ユーザエクスペリエンス)を提供します。サーバサイドは「WEBサーバ」が「ユーザへの表示、ユーザへの表示受付」の役割をし、クライアントからのリクエストをレスポンスで返します。またWEBアプリケーションの改修の際、表示レイアウトのみ改修を実施するときはプレゼンテーション層のユーザに見える部分のフロントエンドやWEBサーバと通信をするサーバプログラムの修正で、他の層に影響を与えること無く作業を切り分けできる点でもメリットがあります。
アプリケーション層は「APサーバ」(小規模であれば「AP兼WEBサーバ」)で「ユーザからの命令実行、表示画面の作成」を担います。また「WEB API」では開発で利用する為のプログラムサーバとの通信で「プログラムのインターフェイス(窓口)」としての働きもします。「サーバサイドスクリプト(バックエンド)」のプログラムで、ユーザには直接見えない部分(バックエンド)の機能をを制御します。WEBアプリケーションのAPI実装・連携や公開するためのWEB API開発ではAPサーバを中心としたアプリケーション層でプログラム開発するためAPI機能によっては両サイドの層(プレゼンテーション層、データ層)にも影響は及びますが、作業の切り分けが明確にできるため開発コストを抑えることができることもメリットです。
データ層は「DBサーバ(小規模であればDB兼WEBサーバ)」で「データの抽出、データの更新、データの保管」を担います。データベースを制御するプログラム(SQL文など)を利用して、アプリケーション層であるバックエンドと連動します。データ層はアプリケーション3層構造の中で、ユーザ(クライアント)から見て一番奥に存在します。WEBアプリケーションのデータベース改修では、プレゼンテーション層やアプリケーション層に影響を与えること無く実施できるため、改修コストを抑えることが出来ることもメリットです。
WEBアプリケーションのシステム構成は「WEBサーバ」「アプリケーションサーバ」「データベース」のサーバが主役として稼働しています。ネットワーク機器であれば「ゲートウェイ」「ルータ」「スイッチ」「ブリッジ」「ロードバランサ」などネットワークを制御するためにサーバと接続をして通信をしています。以下は各サーバについて具体的に説明します。
WEBサーバの役割は、WEBクライアント(ユーザ)に対する窓口です。WEBアプリケーション層(3層構造)の一番手前に位置しアプリケーション層のサーバと連携しています。WEBアプリケーション、WEBサイトを稼働するには必ず必要なサーバでどのWEBサイトにも存在するサーバです。
アプリケーションサーバ(APサーバ)はWEBアプリケーションの中核となる業務処理を行うプログラムを処理するサーバです。サーバサイドのプログラムを実行することで、データを加工したり、データベースのデータを検索・加工後WEBサーバに応答を返します。
WEBアプリケーションで稼働するデータベースは管理するために「データベース管理システム(DBMS)」が役割を担います。主にアプリケーションサーバからデータの検索や更新命令を受け、それに従ってデータの管理を実行します。DBMSを搭載したサーバ機器を一般的には「データベースサーバ(DBサーバ)」と呼びます。
層別に分割されていないアプリケーションであれば、必然的に単一のサーバ機器でリクエストを受け業務処理、データ処理を実施することになります。一方で3層アーキテクチャでは層別に動作させるサーバ機器を分けることが可能になり、サーバ機器にすべての役割を分けることが可能になりますので、すべての役割を実装することは可能になり、小規模なシステムであれば3層構造に分けなくても可能になります。しかし、複雑な処理を実装するとアプリケーション層やデータ層の負荷が高くなり、アクセス数が多くなるとプレゼンテーション層の負荷が高くなるため、システムの規模が大きくなると一般的に各層ごとにサーバ機器を分けた構成を取ります。
WEBアプリケーションのセキュリティ対策は「脆弱性診断サービス」を利用します。WEBアプリケーション層には各サーバや機器に対して脆弱性が潜んでいる可能性があり、攻撃者が脆弱性を悪用してWEBアプリケーションに保管されているデータを窃取してしまう危険性があります。定期的な脆弱性診断でWEBアプリケーションの安全性を高めるとともに「WEBアプリケーション脆弱性管理サービス」では定期診断、レポーティング、対策支援、運用代行、コンサルティングを含んだサービスで継続的なWEBアプリケーションの安全性を高める運用を実施します。
「OSS/内部ホスト脆弱性管理サービス」では、ライブラリ、フレームワーク、ミドルウェア、OS等、ITシステムを構成する要素の脆弱性やライセンスを容易に一元管理できる仕組みと、セキュリティ対策に必要な運用代行を提供します。SSH接続による内部スキャンでのホスト診断にも対応しておりますので、従来の外部スキャンと組み合わせる事により、さらに強固なセキュリティレベルの維持が可能です。