16.5 動的なウェブページを作る技術

今まで説明したHTMLとCSSでは静的な文書を作ることしかできません.せいぜいCSSの :hover 擬似クラスを使ってマウスカーソルが乗った時にスタイルを変更することが限界でしょう.ここでは,動的なウェブページを作成するのに現在用いられている技術のうち代表的なものについて,簡単に紹介します.

ウェブページはウェブブラウザがウェブサーバーから取得するものですから,動的な技術としてはウェブブラウザ側で実現するものとウェブサーバー側で実現するものの二つに大別されます.前者をクライアントサイドの技術,後者をサーバーサイドの技術と呼びます.

クライアントサイドの技術

クライアントサイドの技術は,基本的にウェブブラウザを動かすコンピュータの中で何らかのプログラムを走らせることで実現されます.この手の技術で最も良く用いられているものにJavaScriptがあります.JavaScriptはウェブブラウザ内で動くプログラミング言語で,HTMLソース中に直接プログラムを記述することができます.たとえばbody要素の中に

<script type="text/javascript">
   document.write("Hello!World.");
</script>

と書くと,画面には Hello!World. と表示されます.JavaScriptには通常のプログラミング言語が備える機能の他に,HTML文書をコントロールする手段が用意されています.またHTMLにはマウスクリックなどのイベントを捕らえる方法が用意されており,これと組み合わせることでウェブブラウザを見ている人の動作に対するレスポンスとして何かの動きをすることができるようになります.例えば

<span onclick="alert('窓が開きます')">クリックしてみてください</span>

と書くと

クリックしてみてください

のように,クリックすると小さい窓を表示させるプログラムができます.こうした機能を組み合わせると,複雑な動作も実現することができます.

またJavaScript以外に,ブラウザ内でJavaのプログラムを動かすJavaApplet(related_s26.1.9 アプレット)というものもあります.これはJavaScriptとは違い,ブラウザとは別に動くJavaのプログラムをHTML文書中に埋め込んだものです.

サーバーサイドの技術

クライアントサイドの技術ではページ内で動きが起こるのに対し,サーバーサイドの技術はクライアントサイドと違い,もっぱらウェブページを動的に作成するものです.例えばインターネット上の掲示板に書き込みをすると,プログラムの側では

  1. 掲示板への書き込みの要求をウェブブラウザがウェブサーバーに送る
  2. ウェブサーバーは要求に応じて,掲示板に記事を書き込む
  3. 新しい記事を出力した後の掲示板のデータを,ウェブブラウザに送り返す

という手順が踏まれます.このようにサーバーサイドの技術はウェブブラウザからのリクエストを受けたとき,すなわち皆さんがリンクの文字列をクリックした時に実行されます.その結果として帰ってくるものはただのHTMLのソースなどですから,ウェブブラウザを使う人には動的な技術が使われていると分かりにくいこともあります.

サーバーサイドの技術は,もっぱらCGI(Common Gateway Interface)という技術によって実現されています.CGIは,ウェブサーバー上のプログラムがウェブブラウザからデータを受け取る/ウェブブラウザにデータを送る方法を定めた規格です.CGIによってウェブブラウザと通信を行うプログラム自体は,色々なプログラミング言語で書くことができます.良く使われる言語には例えばPerl,PHP,Python,Rubyなどがありますが,C言語やJavaによって書かれることもあります.

両方を併用した技術

上に挙げた二種類の技術はもちろん併用することもできます.それもクライアントサイド・サーバーサイドの技術を独立して動かすだけでなく,両者を連携させて様々なプログラムを作ることもできます.この手のもので最近脚光を浴びているのがAjaxと呼ばれる技術です.AjaxではJavaScriptを使って動的にCGIに対するリクエストを出し,データの受信及びHTML文書の書き換えにもJavaScriptを使うことで,リンクを押すことなくサーバーとの通信を行うことができます.この技術は,external_sGoogle マップに使われたことで有名になりました.

このような技術を用いると,ウェブページの可能性はまた一段と広がります.Google マップの例からも分かるように,今まではコンピュータにインストールしていたソフトウェアをウェブブラウザの上で実現させることも,最早不可能ではありません.またAjaxを使わずとも,JavaScriptだけでも頑張れば様々な機能を実現することができます.動的な技術に興味を持った人は,ぜひ市販の書籍などで勉強してください.

しかし動的な技術も良いことばかりではありません.動的な技術を用いて表現の範囲が広がることは,裏を返せばそれだけ危険が増すということでもあります.変にプログラムを書くとウェブブラウザを動かしているコンピュータや,CGIプログラムを走らせているサーバーにダメージを負わせる可能性も十分にあります.特にCGIのプログラムを書く場合は,リクエストを送ってくるのは世界中の人ですから,何が起こるか分かりません.高度な技術には危険が伴うということを,必ず心に刻んでおいてください.