CGIの基礎の基礎

CGIとは何か

CGIとは「Common Gateway Interface」の略です。なんて、教科書みたいなこと書いてもわかりませんよね。 実際のところ、「CGIとは何か?」と聞かれても、正確な答は私にはわかりません。
しかし、私が知る範囲での使われ方から考えると、次のように言えるでしょう。
「CGIとは、Webページからのアクセスによってサーバで実行されるプログラムで、結果のページをブラウザに返す」
ざっと読めば普通のことですが、ここで3つのポイントがあります。

  1. Webページからのアクセスが必要である
  2. Webサーバ側で実行される
  3. 結果のページを返す必要がある

1 については、例えば、一定時間ごとに自動的に実行されるプログラム、というのは出来ません(たぶん)。
2 については、Webサーバーにアクセスして、実行されて、結果が返ってくるということで、 ページを見る側(クライアント)としては時間がかかります。 また、サーバー側では処理が増えると負担になります。
3 については、もしかしたら重要ではないかもしれませんが、 私の経験では、フォームからメールを送信すれば良いだけのCGIでも、 一応「アンケートありがとうございました」みたいなページを表示するようにしないとエラーになります。
これらのことを頭においておけば、CGIで何ができるのか、何が得意なのかという判断の目安になります。

CGIでないもの

CGI以外にも「動的な表示をするページ」を作る方法はいくつかあります。 その代表的なものは、Java と JavaScript でしょう。 どちらも「Java」という名前がついてますが、実際は関係ありません。
どちらにも共通することは、クライアント(ブラウザ)側で実行されるということです。 それで、実行速度は速いですが、サーバー上のデータとやりとりしたりするようなことは難しいです。

また、よく知りませんが、最近ではアプリケーションサーバープログラムとか サーバーサイドスクリプトというのもあります。 これは、Webサーバーと結びついたアプリケーションで、 例えば、データベース検索等の場合、アプリケーションと それに合わせたタグ・コマンドが書いてあるHTMLファイルみたいなものを組み合わせて、 簡単にWebデータベースサイトを作ることができます(と思われます)。
CGIの場合は、データファイルの準備、読み込み、検索、結果の表示など、 すべてを作る必要があります。

CGIに何が出来るのか

何が出来るんでしょうかねえ・・・。といってもしょうがないのですが、 「プログラミングの動作」という視点で考えれば、ある程度限定されてきます。 例えば、掲示板とチャットは似たようなものです(。 抽象的に言えば
「ブラウザから入力されたデータを判断し、サーバー内のデータを読み書きし、 それらを処理した結果をページとしてブラウザに返す」
となるのではないでしょうか。 これは、アクセスカウンターでも検索エンジンでも同じように言えます。

では、逆にCGIに出来ないことは何でしょうか。 こちらは「目玉焼きは作れない」とか、言い出せばきりがないのですが、 まぁ、そこまで行かなくても 「ページを見てる人のコンピュータのプリンタに何か印刷させる」 なんてことは、出来ないんじゃないかと思います(たぶん)。
つまり、CGIにできることは、ブラウザにデータを送りつけるところまでです。 それから後は、ページを見ているクライアントの環境によって変わってきます。 うまくいけば、特定の表計算のデータを送って、自動的にそのソフトを立ち上げて、 なにかの作業ができるかもしれません。 あるいは「このデータをダウンロードしますか?」というダイアログが出るだけで、 「いいえ」ボタンを押されて、それで終わりかもしれません。

日本語コードについての注意

CGIプログラムで日本語を使う場合は、EUC形式が無難です。 こちらの実際の例でも、CGIで表示されるのはEUC形式です (この普通のHTMLはShift-JISですけど)。
MacintoshやWindowsで標準的なShift-JISでは、2バイトのうち片方が特殊文字になる場合があります。 よくある例では、「十」「表」という漢字の2バイト目が「\」と同じコードになっていてトラブルになります。
また、CGIプログラムをEUCにして、そのプログラムが別ファイルを読み込む場合、 別ファイルの方もEUCにする必要があります。 そうしないと、CGIで表示されたページで部分的に文字コードが違って、文字化けを起こす可能性があります。


Foundation of CGI

春風はるか haruka@harukaze.net

Let iCab smile