インターラクティブなページを作成するためには、CGIやSSIが必要だと述べだが、実はこのCGIやSSIを理解するためには、UNIXの知識が必要になってくる。そこで実際にCGIやSSIを利用する前に、これらがどんなものなのか概略だけでも知っておいたほうがいいだろう。
CGIは、Common Gateway Interfaceの略。SSIは、Server-Side Includesの略。この双方に共通するのは、WWWサーバ(httpd)が動いているマシン上で動作するという点だ。つまり、CGIもSSIも、どちらもUNIX上のプログラムだということになる。
現在、多くのWWWサーバがUNIXマシン上で動作している。CGIやSSIを利用するためにはUNIXの知識が必要になると記したのは、こんなところに起因するのである。
もうちょっと詳しく説明しよう。CGIやSSIというのは、実はBASICやC言語のような、いわゆるプログラミング言語ではない。“CGI言語”などというものは存在していないのだ。
NCSAやCERNが、最初のWWWサーバをつくりあげたころ、WWWのブラウザとしてはMosaicや初期のNetscape Navigatorしかなかった。これらのブラウザの機能も貧弱だったが、その脆弱性を補うために考えられた方法が、WWWサーバから外部プログラムを呼び出し、それをWWWサーバに返してもらうという仕組みだ。この仕組みこそが、すなわちCGIやSSIなのである。
まず、CGIである。Common Gateway Interfaceの頭文字をとったもので、すなわちCGI。ブラウザの要求に対し、サーバーが別のプログラムを起動して実行し、その結果をブラウザに返す、この一連の動作を行なわせるインタフェースがCGIだ。また、このインタフェースを使って実行されるスクリプトを、CGIスクリプトともよんでいる。
では、CGIは言語ではないといったが、CGIスクリプトはどのように記述すればいいのか? 通常、CGIで使われる言語には、次のようなものがある。
・UNIX …… Perl、シェル、Tcl/Tk、C、C++など。
・WindowsNT …… Perl、C、C++など。
・Macintosh …… AppleScriptなど。
マシン(OS)によっても異なっているが、だいたいPerlが使えるものが多い。つまりCGIスクリプトは、Perlで書けばいいということになる。本書でもサンプルは、シェルスクリプトとPerlを主体に解説することにしよう。
もっもと、最近ではWWWサーバをUNIX以外のWindowsNTやMacで構築するサイトも増えてきているが、Perlで書かれたCGIプログラムなら参考になるはずだ。
一方、SSIというのは、Server-Side Includesの頭文字をとったもの。CGIと同じように、WWWサーバ上で外部プログラムを動かすための仕組みで、もともとはNCSA WWWサーバが最初に開発した機能である。
ただしSSIについては、この機能をサポートしていないWWWサーバーもある。CGIもまた、この機能をサポートしていないWWWサーバーもあるから、SSIやCGIを利用する前に、自分のホームページを置くWWWサーバー、つまりプロバイダが、これらの機能をサポートしているかどうか、事前に確認しておく必要があるだろう。
CGIもSSIも、結局のところWWWサーバー上で外部のプログラムを動かすための仕組みである、といえる。では、どこがどう違うのか?
まずCGI。これはブラウザなどのフォーム形式から送られてきたデータを処理して、その結果を送ったり、外部プログラムとして呼び出して利用する、といった具合に利用されることが多い。
たとえば、ホームページに掲示板機能を持たせる場合を考えてみよう。ユーザーの名前や入力する部分といったものは、HTMLのフォームタグなどを利用して作成できる。が、実際に入力されたものは、そのままでは電子の藻くずとなって消えてしまう。
そこで入力されたものを、データとしてホームページに送るよう設定する。これももちろんHTMLのフォームタグで設定できる。
送られてきたデータは、そのままでは利用できない。そこでCGIを利用して処理し、これがホームページ上に表示されるよう設定するわけだ。
これに対してSSIは、HTML形式のファイルの中に記述することで、これがWWWサーバーのプログラムを起動し、その結果を送り返させるといった具合に利用する。
たとえば、ホームページに現在時刻を表示する機能を考えてみるといい。ユーザーがホームページにアクセスすると、そのホームページ(HTMLファイル)のなかに記述されている特殊な変数(UNIXでは“環境変数”とよぶ)、あるいはスクリプト、ファイルなどの内容がWWWサーバーのプログラムに渡され、その実行結果が送り返されてきて、はじめてホームページ上に現在時刻が表示されるわけだ。
この現在時刻の表示や、あるいはテキストベースのアクセスカウンタ、さらにあらかじめ用意したファイルをそこに埋め込む、といった場合にSSIが利用されることが多いのである。
CGI、SSIを使う時の注意点
前述したように、CGIやSSIはWWWサーバ上で動かすプログラムが必要である。このため、ある程度のUNIXの知識が必要になる。
もちろん、WWWサーバがUNIXでなくWindowsNTやMacintoshであれば、それらの知識が必要となり、UNIXの知識は必要ない。まずこの点を確かめておこう。
さらにCGIやSSIをセキュリティの面から考えると、次のような問題点があげられる。
SSIは、簡単にファイルの内容を送り込むことができる。またCGIも、WWWサーバ上でプログラムを実行させることが前提となる。このため、WWWサーバの管理が甘いと、簡単にセキュリティを突かれてしまうこともある。また、CGIやSSIがWWWサーバ上で動かすプログラムが、無限ループに陥ってしまった場合、WWWサーバ自体がダウンしてしまう可能性もある。
これらの理由のため、プロバイダが提供しているホームページサービスでは、前述したようにCGIやSSIの利用を完全禁止、またはSSIのみ禁止、用意してあるCGIのみ使用可、といった制限を設けていることも多い。そこで、自分のホームページ上でCGI、SSIを使いたいときには、以下の点をチェックしておくといいだろう。
- 契約しているプロバイダは、CGIを使えるか?
- 契約しているプロバイダは、SSIを使えるか?
- WWWサーバの機種は?
- UNIX
- WindowsNT
- Macintosh
この機種に関して、自分が詳しいかどうかも判断。
- WWWサーバの種類は?
- NCSAhttpd
- CERNhttpd
- Apache
- Netscape Communication Server
- Netscape Commerce Server
- WindowsNT IIS
SSIが使えるかどうかは、WWWサーバの機能による。また、CGIもWWWサーバによって、書式に違いがある場合があるため、これを知るのは重要である。
- サーバで使用できる言語は何か?
- CGI、SSIで使える言語を知っておく(Perl,C、C++など)。
- 上記(5)の言語作成の環境はあるか?
- Perlのようなインタプリタ言語は別だが、CやC++といったコンパイルが必要な言語の場合、WWWサーバ上でコンパイルする環境が必要になる。自分で、WWWサーバと同じマシンとOSを持っていれば別だが、そうでない場合は、コンパイラ型の言語は諦めるしかない。
また、シェルアカウントがあるかどうかも、プログラム開発環境には大切だろう。シェルアカウントがあり、ホームディレクトリのディスク容量に余裕があれば、自力で環境を構築することもできる。
シェルスクリプトや、Perlのような、インタプリタ型の言語では、コンパイラ言語ほどの制限はない。
UNIXなど触ったこともないといったユーザーでは、かなり大変なハードルだろう。では、CGIやSSIの利用をあきらめるしかないのか。インターラクティブなページなど、高値の花なのか? 実は、上記の6点がすべて満たされていなければ、CGIやSSIは使えない――というわけでもないのだ。
CGIやSSIは、自分で作成しなくても、すでに存在するものを利用する、といった形で利用することもできるのである。
たとえば、自分の作ったCGIプログラムを誰でも使えるように公開しているユーザーも少なくない。実際、あるグラフィックカウンタの作者は、無料ではないが素晴らしいプログラムを公開している。これは絵葉書に使っているよと書いて知らせてくれれば、継続して利用してもいいという条件の、いわば絵葉書ウェアとでもいうもの。そういうプログラムを利用すれば、自力でプログラムを作成しなくてもすむ。
自分で作成できなくても、自分の使いたいプログラムを探すことはできるだろう。これなら、開発環境など必要ない。
また後述するが、CGIプログラムは、自分が利用しているプロバイダのWWWサーバーにない場合、他のサイトに置いてあるCGIプログラムをそのまま使用する方法もあるのだ。むろん、相手が許可してくれた場合に限定されるし、プログラム自体をネットワーク上で使用するため、ネットワーク上に余計なトラフィックを生むといったデメリットもあり、使用に当たっては注意が必要になるが。
もうひとつCGIには、プロバイダが提供しているCGIを利用するという手段もある。セキュリティ対策のためにCGIを制限しているプロバイダでは、会員がどうしても使いたいというツールだけを選んで提供していたりする。提供されているCGIに関しては、すでに動作確認もすみ、同じWWWサーバで動作するのだから、安心して使えるというものだ。
Java、Shockwave とは何が違うのか
HTMLで記述したホームページをパワーアップするためのツールとして、CGIやSSIについて簡単に説明してきたが、ではJavaやShockwave、さらには最近話題のVRMLなどとは、どこが違うのだろうか。
すでに書いたように、CGIやSSIはWWWサーバ上で動作する。これに対して、Java、Shockwave、VRML、Acrobatといったツールは、WWWサーバ上の資源を使わない。この点が最も異なっている。これらのツールは、ホームページで作成したデータが、直接ホームページを閲覧しているユーザーのWWWブラウザに送られ、そのWWWブラウザで直接実行されるのである。
Netscape Navigtorでは、プラグインやヘルパーアプリケーションとよばれる機能で、これらのツールが実行できるよう拡張が行なわれている。Microsoft Internet Explorerも、利用できるツールに違いはあるものの、同様の機能をもっている。
プラグインとヘルパーアプリケーションの違いは、ヘルパーアプリケーションがWWWブラウザがなくても単体で動作するツール(プログラム)であるのに対し、プラグインはWWWブラウザそのものの機能としてアドインされ、単体では動かないツールである点だ。
CGIやSSIはWWWサーバ上で動作するため、ホームページを読み込むWWWブラウザにはあまり依存しない。もちろん、テキスト型のブラウザでグラフィックを表示するのは無理だが、そうでもないかぎり、あまりブラウザに左右されないのだ。
ところがJavaやVRMLなどは、いわばWWWブラウザ依存型ツール。ホームページを読み込むWWWブラウザにその機能がなければ、表示すらできないのである。もちろん、いったん読み込んでしまえばWWWブラウザ側でそれらの処理が行なわれるため、サーバに余計な負荷をかけなくてすむというメリットもある。
最近ではJavaやVRMLが大きな話題になっているが、CGIやSSIとこれらのツールとでは、どちらにも一長一短がある。そのためJavaやVRMLが発展していっても、当分はCGIやSSIがそれらのツールにすべて置き代わってしまうといった心配はないだろう。ただし、ゆくゆくはこれまでCGIやSSIで行なわれていた処理が、次第にJavaやVRMLのようなツール類に置き換えられていくのは確実なようである。