インターネットが開発されてからWebサイトができるまで
インターネットの始まりは1969年。
米国防総省のARPA(高等研究計画局)という機関が4台のコンピュータを繋いだのがはじまりです。3つの大学と、スタンフォード研究所(SRI)などの研究機関で繋がれており、ARPANETと呼ばれています。
当時は冷戦下でもあり、インターネットは研究機関と軍が使用するものでした。
そこからすご~く色々な歴史があるんですが、そこは割愛するとして。
インターネットが始まってから 20年後の1989年 にCERN(セルン、LHCの大型ハドロン衝突型加速器で有名!)の研究者である、ティム・バーナーズ・リーが WWW(World Wide Web) を提案しました。
そしてなんと、 HTMLが発明されたのもこの時です! ここではじめてWebブラウザというものができたのです。
HTMLは基礎として考案されたのが1989年
HTML1.0として仕様が公開されたのは1993年です
それまで、インターネットで情報を得るにはキーボードでコマンドを入力する必要があったのですが、ここで初めてマウスのクリック1つで操作が可能になりました。
そして1993年にモザイクと呼ばれるWWWを見るためのソフトウェアが開発されます。
これによりWWWのトラフィックは1年間で3000倍に増加したそうです。
国防総省でインターネットが開発されてから24年、ようやく民衆が使えるものとして認知されるようになったのです。
インターネットが誰でも使えるようになってからまだ30年程度しか経っていないと考えるとすごく短いような気がしますよね。
ちなみにInternet Explorer君が発売されたのは1995年らしいです。
Qiitaを読んでいる方には当時PCを触っていた方もいるんじゃないでしょうか。
CGI到来!動的コンテンツの時代
1993年、Common Gateway Interfaceという、ウェブサーバーが外部プログラムを実行するための仕組みが導入されました。
それまでは静的な表示しかできなかったWebは動的な動作をすることが可能になりました。
これによりPerlやC言語をWeb上で実行できるようになり、様々なサービスがリリースされます。
代表的な例では
- 電子掲示板
- ブログシステム
- アクセスカウンタ
この3つでしょうか。
まさに1990年後半から2000年代を彩ってきたサービスですね。
CGIはどのような言語でも記述することが可能で、非常に柔軟性が高いです。
しかしその反面、リクエストごとにプロセスを起動するため重く、大量のリクエストがあるとパフォーマンスが低下してしまう という弱点も持ち合わせていました。
Webの規模が大きくなるにつれて、もっと速く、もっと安全に、もっと整理された開発が必要になっていきます。
サーブレットとJSP:JavaによるWeb開発の進化
サーブレットとJSPは、JavaでWebアプリを作る世界で長く使われてきた重要な仕組みです。
サーブレットとは何か
サーブレットは、Webサーバーの中で動くJavaプログラムです。ブラウザからリクエストが来たときに動き、レスポンスを返します。
CGIと違う大きなポイントは、常駐して使い回せることです。
サーブレットはメモリ上で常駐し、スレッドで処理するため高速、軽量、効率的です
プラットフォームにも依存しないので使いやすいというメリットもありました。
サーブレットの仕事はざっくりこうです。
- リクエストを受け取る
- パラメータを読む
- 必要ならDBに問い合わせる
- 結果をレスポンスとして返す
これだけ聞くと便利ですが、初期のサーブレット開発はHTMLをJavaコードの中で文字列として組み立てることが多く、表示部分が非常に分かりづらく、扱いづらいのが難点でした。
特に複数人で開発をするような現場で、見た目を変更したいデザイナーと動作を制御したいプログラマが別々にいるような場合は大変だったそうです。
例としてコードを載せます
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String name = req.getParameter("name");
if (name == null || name.isBlank()) {
name = "Guest";
}
resp.setContentType("text/html; charset=UTF-8");
try (PrintWriter out = resp.getWriter()) {
//この部分がHTMLになる
out.println("<!doctype html>");
out.println("<html lang=\"ja\">");
out.println("<head><meta charset=\"UTF-8\"><title>Hello</title></head>");
out.println("<body>");
out.println("<h1>Hello, " + escapeHtml(name) + "</h1>");
out.println("</body></html>");
}
}
}
上記のコードを見ていただければわかると思うのですが、Javaの中にHTMLが格納されているという感じです。HTMLをいじりたくてもどのように変更すればいいのか、Javaの知識が無ければ難しそうですね。
この問題を解決したのがJSPです。
JSPとは何か
JSPはJavaServer Pagesの略で、HTMLをベースにしつつ、必要なところだけJavaの処理を埋め込める仕組みです。
例のコードはこんな感じ
<%@ page contentType="text/html; charset=UTF-8" %>
<%
String name = request.getParameter("name");
if (name == null || name.isBlank()) {
name = "Guest";
}
%>
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<!-- 囲んだ部分がJavaとして実行される -->
<h1>Hello, <%= org.apache.commons.text.StringEscapeUtils.escapeHtml4(name) %></h1>
</body>
</html>
サーブレットは 「Javaコードの中にHTMLを埋める」
JSPは 「HTMLの中にJavaコードを埋め込む」
といえば分かりやすいでしょうか。
これにより、表示に近い場所で表示を作れるようになります。特に、デザイナーやフロント寄りの人が触りやすい形になるのが大きいです。
ライブラリとフレームワークの登場:より効率的な開発へ
サーブレットやJSPにより、様々な開発が可能になり非常に便利になりました。
しかし、すべてのプログラムを1から書くというのはとても大変です。莫大な時間がかかり、とてつもないコード量になってしまいます。
付随して起こる問題として以下のようなものもあります。
- 画面遷移やルーティングが散らばる問題
- 共通処理があちこちにコピペされる問題
- 表示と処理が混ざってカオスになる問題
- 例外処理、認証、入力チェックの作法が統一できない問題
これらの問題を解決するために必要な概念が再利用です。
よく利用される処理は 「ライブラリ」 と呼ばれるプログラミング部品として整備され、何度も同じプログラムを作成しなくても良いようになっています。この考え方は古くから使われていました。
そのような考え方を更に突き詰め、再利用できる部品を増やしてアプリケーションを開発しやすくするための土台として整えられたのが 「フレームワーク」 です。
フレームワークを使えば、それを土台にして必要な部分を作り足していくと望むアプリケーションを短期間で開発することができるのです。
おわりに
ARPANETからWWWの誕生、そしてCGIによる動的コンテンツの登場を経て、サーブレットとJSPへつながる流れをざっくり追いました。
Webは「情報を表示するだけの仕組み」から始まり、やがて「ユーザー入力を受け取り、処理し、結果を返す仕組み」へと進化していきます。その過程で、性能や保守性、役割分担といった現実的な課題が増え、サーブレットで処理を高速化し、JSPで表示側の作りやすさを補う、という改善が積み重なってきました。
そして規模がさらに大きくなると、画面遷移や共通処理、認証や例外対応などを毎回ゼロから書くのは限界が来ます。そこで再利用の考え方が強まり、ライブラリやフレームワークが土台として整備され、チーム開発でも破綻しにくい作り方へ移っていきました。
そして今あなたが開いているこの一ページにも、遠い昔から続く試行錯誤の余韻が、確かに息づいているのです。