【初心者目線】Webアプリケーションの開発 第2回

公開日: 2023/12/14

Webアプリケーションの開発 第2回について書いていきます。

1. CGIに関連する問題点


第1回の終わりでCGIの仕組みを紹介しましたが、Webアプリケーションの普及に伴いいくつかの問題が発生しました。

ここでは大きく2つの問題に絞り紹介します。

1-1. 開発言語の問題

当時Perlという言語がプログラミングで主に使用されていましたが、テキストを処理することに特化した言語であったため、大規模で複雑化したWebアプリケーションの開発にはあまり向いていませんでした。

1-2. 処理速度の問題

当時のCGIはWebブラウザからリクエストが発生したタイミングでプロセスを起動していましたが、当然リクエストの発生ごとにプロセス起動の時間が発生してしまいます。

1日に100件程度のアクセスでは問題ないのですが、数万件のアクセスが発生した場合プロセスの起動回数が多くなり、処理が追いつかない事態が発生しました。

この結果Webサイトにアクセスしても画面の表示が遅く、ユーザーが目的の情報を得られない事が多く発生するようになりました。

2. Java Servlet(サーブレット)~JSPの登場

Webアプリケーションの開発で様々な問題が発生していた頃、Javaというプログラミング言語が生まれました。

Javaは大規模で複雑なシステムを開発する際に必須であるオブジェクト指向の機能をサポートしており、当時普及していたC言語によく似た文法であったため開発者に受け入れられやすいという利点もありました。


JavaはWebアプリケーション用に開発された言語ではありません。しかし、当時Webアプリケーションがシステム開発の主流となり始めていたため、「サーブレット」というWebアプリケーション開発をサポートする機能が実装されました。


サーブレットはHTML等のWebコンテンツを生成するためのプログラムのことで、CGI経由で起動されるPerlのJavaバージョンということになります。


CGIと基本的な考え方は同一ですが以下のような利点があり、CGIの欠点を補う事が可能でした。

・オブジェクト指向のサポートにより大規模なアプリケーションの開発に適している。

・リクエストごとに毎回プロセスを起動させる必要が無く、高速な処理が可能。(下図参照)


CGI:リクエストごとに新しいプロセスを生成


サーブレット:1つのインスタンスを共有する

2-1. Javaで開発する利点

CGIと比較したJavaサーブレットの利点を説明しましたが、その他にもJavaはソースコードを直接コンピュータの機械語にコンパイルせず、仮想的なコンピュータの機械語(JavaVM)にコンパイルするため特定のOSやベンダーに縛られずにプログラムが動作するという利点があります。


例えばデスクトップアプリケーションの場合、Windows用、Mac用といった形に分かれて販売・配布されており、それぞれ異なるプラットフォーム上では動作しませんが、Javaはそのような制限が無く、
異なる環境で同一のプログラムを実行することが出来ます。


また、開発者にとっても利点があり、従来はアプリケーションを動作させるプラットフォームと同じ環境で開発することが原則でしたが、Javaは開発は使い慣れたWindowsの開発PCで行い、動作環境は本番稼働環境と同一のLinuxマシンで行うという方法も出来るようになりました。

2-2. サーブレットの問題点

大規模開発に適しているかつ動的コンテンツの提供も出来るJavaサーブレットですが、問題点もあります。

ここではWebブラウザに税込価格を表示させるプログラムの一部を使用して説明します。


★マークの部分では「5000*1.08」の計算結果をHTMLに出力するよう指定しています。

このプログラムが出力したHTMLは以下のようになります。


そして、上記のHTMLをWebブラウザで表示すると以下のようになります。


税込価格の表示については上記の通りですが、例えばユーザーの要望により上記Webブラウザ表示の「5400円」の部分を太字にして強調表示する場合、プログラムの★マークの箇所を以下のように書き換えます。



上記のような簡単な要望の場合、実装方法も簡単かつあまり時間も要さない作業となります。

しかし現在のインターネットショッピングサイトのような見栄えの良いWebサイトを作成するためには、高度なHTMLの実装スキルが必要となり、プログラミングとは異なるデザインスキルが必要とされます。


プログラミングの知識とデザインセンスを併せ持つエンジニアは少なく、Webサイトの規模によっては画面デザインと詳細なロジックのプログラミングを担当する人が別々となっている事も多いです。

その場合画面デザインが変更されるたびにプログラムの修正が発生し、作業効率が悪くなるばかりではなくプログラミングの知識が不十分なWebデザイナがプログラミングを壊す恐れもあります。


また、サーブレットはJavaの出力メソッドを使用しHTMLの文字列を出力している事もあり、プログラムやHTMLが長く複雑化してしまうと、修正時に変更すべき箇所を探し出すにも一苦労します。

2-3. JSPの登場

JavaサーブレットはCGIに変わる技術として広く普及しましたが、開発者の間で前述のような問題点が認知されるようになり、それらを解決するため「JSP」という技術が開発されました。

以下は税込価格を表示させるプログラムをサーブレットとJSPで比較したソースコードです。


JSPでは「<%」「%>」で囲われた箇所に動的に出力したいJavaプログラムを記述することが出来ます。

JSP内部に記述されたJavaプログラムは「スクリプトレット」と呼ばれます。(上図の太字部分)

ページを構成するHTMLをベースとし、変更の可能性がある箇所を上記のようにJavaで記述することにより、プログラマとWebデザイナが効率的に分業出来るようになりました。


サーブレットの記述言語はJavaで、JSPのメイン言語はHTMLという点が大きく異なる部分ですが、両者の弱点を補うように使用されるプログラムと言えるでしょう。

そのため「サーブレット/JSP」と一括りにして語られることが多いです。


また、サーブレットはコントローラー的役割を、JSPはビュー的役割を担うので、指示出しが得意なサーブレット、画面表示が得意なJSPとなりそれぞれ得意分野が異なります。

3. ライブラリとは


3-1. 大規模システム開発時の問題

サーブレット/JSPの登場によりWebアプリケーション開発はとても楽になりました。

しかしネットショッピングサイトや証券取引システムなどを筆頭に、Webアプリケーションが複雑で大規模になるにつれ開発は非常に大変な作業を伴うようになります。


また、システムの大規模化に伴い開発プロジェクトに携わる人員が非常に多くなったことにより、開発者間の意思疎通がおろそかになり、各々で独自の処理を実装することも増えてきます。

その結果それぞれのプログラムを結合しようとした際に上手く結合できなかったり、同じような処理がいくつも作成されていたりと、様々な不整合が発生し始めます。

3-2. 効率よく開発するには

大規模システムの開発には大人数の開発者が必要ですが、前述のコミュニケーション不足も含め、開発者それぞれの知識量やアルゴリズムの考え方がバラバラな事もあり、前述の通り効率の良い開発が難しくなってきます。

このような状態を解消するためには、頻繁に使用される処理を部品化し再利用する考え方が有効で、この部品化された処理を「ライブラリ」と呼びます。


例えば消費税を計算する処理を必要とする画面が複数存在し、それぞれの画面の開発者が各々で計算処理を実装したとします。

そして同じ金額で消費税計算した結果、全員の計算結果が異なってしまいました。

この時点でどの開発者が作成した処理が正しいのか検証する必要があり、正しい処理が判明した後は誤った処理を実装した開発者は修正作業に追われ、本来の業務に支障をきたすことになります。


仕様変更により計算処理の内容を修正する場合も、該当する全ての画面に手を加える必要があり、対象画面の調査と修正作業に多くの時間を費やすかもしれません。

また、複雑なアプリケーションの場合は調査不足により修正漏れが発生することもあります。


ここで消費税の計算処理を部品化(ライブラリ)し、計算処理を行う画面からこの部品を呼び出すようにコーディングすることで、実装に伴うテストや不具合の修正、仕様変更に費やす時間を大幅に短縮する事ができるだけでなく、アプリケーションの品質向上にもつながります。

4. 第2回 まとめ

今回は第1回で説明したCGIに関連した問題点とその解消に向けた技術の発展、Webアプリケーションの
大規模化に伴う開発手法の変化を説明しました。

問題発生から解決のなかでCGI→サーブレット→JSPと技術が発展していく過程が大まかに理解できたのではないでしょうか。


次回はHTTP通信に関連する内容を掲載予定です。