本章では「プログラミング言語の発展」に続いて、WebブラウザとWebサーバ間で処理するためのプログラミング言語を扱います。Webページを記述するにはHTMLやXMLなどのハイパーテキストマークアップ言語がありますが、ここでは、それらの中での処理を記述するスクリプト言語(Javascriptなど)およびその関連事項を対象にします。
スクリプト言語、Javascript、CGI、軽量言語、Java実行環境、javaアプレット、Javaサーブレット、セッションID、クッキー、Ajax、HTML5
スクリプト言語とは、HTMLと同様にWebページに組み込んで記述できる言語です。Webページのある部分を表示/非表示にしたり、入力データから簡単な計算をして結果を表示したりするのは、ほとんどスクリプト言語で行っています。
代表的なスクリプト言語にJavascriptがあります。Webブラウザで解釈され実行されます(Webサーバは関与しません)。ほとんどのブラウザはこの機能をもっており、どのブラウザでもほぼ互換性があります(ブラウザ間により若干の違いがあり、一部の命令が異なっていたり結果の表示が微妙に異なっていたりすることがあります)。
Javascriptでの処理には、表示/非表示、画像の拡大/縮小など決まったパターンが多くあります。そのなかには、かなり複雑で初心者にはわからないとか、熟練者でも大量の記述が面倒だというものもあります。さらにブラウザ間での非互換を吸収できると便利です。
そのような要請に応えるのが「JavaScriptライブラリ」です。代表的なものに、jQueryやPrototypeなどがあります。どちらもOSSになっており無料で利用できます。
Javascriptは豊富な機能をもっていますが、JavaやCなどの通常の言語と比べると不十分です。複雑な処理をするための仕組みがCGI(Common Gateway Interface)です。
JavaScriptを含んだHTML(Webページ)は、閲覧者がソースリストを見ることができます。それに対して、CGIの場合は結果だけが戻されます。CGIの中身を探せたとしてもロードモジュールなので解析が面倒です。そのため、簡単な処理でも秘密にしたいときはCGIが使われます。
処理がサーバで行われるので、ブラウザの負荷は軽いのですが、サーバの負荷が重くなります。CGIと似た機能ですが、もっと単純なものにSSI(Server Side Includes)があります。例えば、HTML中に、
<p>今日は<!-- #echo var="DATE_LOCAL" -->です。</p>
と記述すると、DATE_LOCALの値がサーバで処理され、その結果が
今日は Sunday, 9-August-2015 09:12:43 です。
のように、記述した部分に挿入されます。
SSIは時刻・日付機能やアクセスカウンタなどのように簡単な機能に限定されています。SSIコマンドを含んだHTMLファイルをSHTMLファイルといい、それを扱える環境が増えてきました。
軽量言語(軽量プログラミング言語)の厳密な定義はありませんが、JavascriptのようなWebページに組み込める言語です。Javascriptも軽量言語ですが、Javascript以外のものの総称として使うことが多いようです。
有名な簡易言語に、Perl、PHP、Rubyなどがあります。OSSになっています。
これらの言語は、Javascriptと同様にブラウザだけで処理することもありますが、サーバ側に保存されているデータベースを処理するような、CGIでのサーバ側のプログラムに使われることが多いようです。
Javaは、CやC++などと同様な通常のコンパイラ型のプログラミング言語ですが、特にWeb環境で広く使われています。Javaプログラムには、大きく分けて「アプリケーション」と「アプレット、Applet」があります。アプリケーションは、他の言語で作成したアプリケーションと同じですので、ここではアプレットを対象にします。
Javaのソースコードは、いったんバイトコード(目的プログラムに相当)に翻訳され、UNIXやWindowsで機械語にされ実行されます。そのバイトコードを扱える環境をJRE(Java Runtime Environment、Java実行環境)といいます。
ほとんどのブラウザ(またはOS)は、JRE対応になっています。そのため、Javaで作成したプログラムは、どのブラウザでも表示できるといえる状況になっています。
Javaアプレットには、ブラウザで実行されるJavaアプレットとサーバで実行されるJavaサーブレットがあります。
「プログラミング言語」からやや外れますが、Webページでの処理にはいくつかの特徴があります。
パソコン内でのプログラムでは、パソコンにあるデータファイルを読んだり書き込んだりすることは自由にできます。ところがWeb環境では、Webサーバにある他人が作成したWebページを閲覧するのが通常です。
Webページから閲覧者のパソコン(ブラウザ側)のファイル(ローカルファイルといいます)をアクセスできると、悪意のあるWeb作成者に、パソコンにあるファイル内容を知られたり、改ざんや破壊をされたりします。
このような危険を防ぐために、ブラウザやWeb関連言語では、原則として閲覧者が操作せずにローカルファイルへのアクセスができないようになっています。
Webサイトで買物をするとき、ログイン→注文→決済→ログオフという流れになり、それぞれのWeb画面が表示されます。このとき、ログオンからログオフまでの一連の流れをセッションといいます。
ところが、WebブラウザとWebサーバの間の通信プロトコルであるHTTPは、1往復のメッセージのやりとりで処理が完結するステートレスなプロトコルなので、セッションという概念がなく(一つのWebページが一つのセッション)、Webページが切り替わると接続も切れてしまうのです。それでは、注文ページで入力したデータを決済ページで使うというようなデータの受け渡しができません。
これを解決するために、いくつかの方法があります。
Ajax(Asynchronous JavaScript + XML)とは、JavaScriptを活用した方法論です。上述のjQueryのようなライブラリでもなくPHPのような新言語でもありません。XMLやJavascriptなどに関連する技術(非同期通信やDOMなど)を組み合わせて、新しい機能を実現させたものです。ほとんどのブラウザが対応しているので、何ら手を加えなくても、Ajaxを用いたWebページを作ることができます。
Ajaxの代表的な実用例として、GoogleMapの地図サービスがあります。GoogleMapでは、カーソルを操作するだけで、地図が連続的に変化します。これは、ブラウザがサーバからの情報をすべて受け取ってから解析して表示する従来の処理と異なり、パソコンからサーバにリクエストを送ったら、サーバからの結果を待つのではなく、その間にパソコンできる処理をやってしまうという、非同期通信(Asynchronous)をしているからです。
Webページは、タグで構成され、そのタグはDOM(Document Object Model)という階層構造の体系になっています。それを解析すれば、Webページの任意の個所をデータとして取り扱うことができます。それにより、現在のWebページの特定個所を表示/非表示にしたり、他のWebページのある部分を抜き取って現在のWebページに組み込んだりできます。その中核となるコマンドがXMLHttpRequestです。
HTMLの最新版はHTML5です。旧版では、Webページにグラフなどの図表を表示するには、gifのような画像ファイルを作る必要がありました。それがCANVAS機能を用いれば、Javascriptでデータからグラフを作り画像として表示できるようになりました。
従来は、動画再生には、Flashなどのアドオンソフトを使う必要がありましたが、HTML5では、「video」や「audio」タグにより、Javascriptだけで実現できるようになりました