Webアプリ開発事始 第8回

CGIの仕組みを覗く(1)~基本原理とSSIによるアクセスカウンタ 長谷川裕行
有限会社 手國堂

CGIの基本原理

CGIはWebアプリケーションの原点とも言える、非常にシンプルな機能です。しかし、シンプルだから複雑な処理は実現できないのかというと、決してそうではありません。CGIの動作原理を簡単な例で説明します。


- サーバーとプログラムの仲介役 -

CGIは“Common Gateway Interface”の略で、「一般的な情報の通路のためのインターフェイス」ということになります。

ここで言うインターフェイスとは、WebサーバーとWebサーバー上で動作する別のプログラムとの仲介役を指します。CGIという単独のプログラムがあるのではなく、Webサーバーの側に

  Webサーバーと別のプログラムとを結ぶ機能

があり、それをCGIと呼ぶのだということに注意してください。<別のプログラム>は、CGIを使ってWebサーバーと情報をやり取りするため「CGIプログラム」と呼ばれます。

Webの標準的な機能は、クライアントからの要求に基づき、HTMLファイルの内容――つまりHTMLデータをクライアントに送信することです。CGIは、Webサーバーだけでは対処できない複雑な処理を、Webサーバーに代わってさばく手段を提供します。

CGIを介して「Webサーバーだけでは対処できない複雑な処理」を実際に行うのが、CGIプログラムです。


- ユーザーのデータをプログラムに渡す -

Web本来の機能だけでは、HTMLデータとしてあらかじめ記述された固定的な情報を、ブラウザに表示することしかできません。現在では、HTMLファイル中にJavaScriptやVBScriptなどのコードを記述し、それを実行させることができます。しかし、これはHTML本来の機能ではありません。

HTMLは様々な拡張を経て現在の姿になりましたが、その基本は「ブラウザが読み込むテキストデータ」です。ただ、HTMLには唯一、ブラウザからWebサーバーに対してデータを送信する機能があります(ハイパーリンクによるアクセス先の切り替えや画像の表示などは、この機能で実現されます)。

この機能を利用すれば、クライアントのブラウザでユーザーが入力したデータを、Webサーバーに送信することができます。しかしWebサーバーには、こうして送られてきたデータを処理する機構がありません。そこでCGIが、Webサーバーに代わってユーザーから送られてきたデータを受け取り、それを実際にデータを処理するプログラム――CGIプログラムに渡すのです。

さらにCGIは、CGIプログラムが処理した結果を受け取り、それをWebサーバー経由でクライアントに返します。


- ユーザーごとに異なる処理を行う -

Webサーバーには、不特定多数のユーザーが接続します。入力される内容も一定ではありません。先述した「Webサーバーだけでは対処できない複雑な処理」とは、

  ユーザーの入力したデータの内容に基づいた処理

ということで、その結果

  ユーザーごとに異なる結果を得られる

ことになります。

非常に単純な例で考えてみましょう。消費税の計算処理です。HTMLでは、フォーム機能を使ってブラウザの画面上にテキストボックスなどのアイテムを表示できます。

  ユーザーがテキストボックスに
  “ある商品の金額(任意の整数値)”を入力し
  [送信]ボタンをクリックしたら
  入力された金額に対する消費税を表示する

という仕様です。


- CGI処理の様子 -

この場合、クライアントとサーバーの間で、以下のようなやり取りが行われます。

(1) サーバーからクライアントへデータ入力用画面のHTMLデータが送信される
(2) クライアントがHTMLデータを受信し、ブラウザに入力用画面が表示される
入力用のテキストボックスや[送信]ボタンなどが表示されます。
(3) ユーザーがテキストボックスに数値を入力する
ここでは、「1000」と入力したとします。
(4) ユーザーが[送信]ボタンをクリックする
テキストボックスに入力したデータが、Webサーバーに送信されます。
(5) Webサーバーがデータを受け取る
(6) Webサーバーは消費税を計算するプログラムを起動し、データを渡す  Webサーバーの基本機能だけでは、ユーザーが入力したデータ(例では「1000」)を処理することはできません。WebサーバーはCGIを経由してCGIプログラムを起動し、このデータをプログラムに渡します。
後述しますが、データの渡し方にはいく通りかあります。
(7) 与えられたデータを元にCGIプログラムが計算を行い、結果をWebサーバーに返す

ここでは、受け取った「1000」という数値を元に、それを0.05倍して消費税額を計算します。さらにCGIプログラムは、計算結果を含んだHTMLデータを生成してWebサーバーに返します。例えば

  <FONT size="3"> 代金<B> 1,000 円 </B>に対する消費税額は<BR>
   <B> 50 円 </B>です。<BR></FONT>

といった内容です。このようなHTMLデータを生成するために、プログラム内部で計算と共に文字列処理を行う――ということは、容易に理解できるでしょう。
(8) WebサーバーがHTMLデータをクライアントに送信します
 これで、クライアントブラウザには、例えば

  代金 1,000 円に対する消費税額は
  50 円です。


といったテキストが表示されます。

上記の(6)と(7)が、CGIを利用している部分です。Webサーバーには、CGI経由でプログラムを実行する機能と、そのプログラムの処理結果をクライアントに送信する機能しかありません。


図1:CGIによる処理の基本的なデータの流れ



- プログラム次第でどのような処理も作れる -

このようにCGIを利用すると、ユーザーの入力に応じて動的な振る舞いをする、いわゆるインタラクティブなWebページが作れます。

例では単純な計算処理を取り上げましたが、プログラム次第でどのような複雑な処理でも作れます。例えば、ユーザーが入力したキーワードを受け取り、それを元にデータベースを検索して、合致した情報を返すような処理を作ることも可能です。

実際、インターネット上の検索処理や掲示板など、CGIで実現されている機能はたくさんあります。


- 目次 -
CGIの基本原理
サーバーとプログラムの仲介役
ユーザーのデータをプログラムに渡す
ユーザーごとに異なる処理を行う
CGI処理の様子
プログラム次第でどのような処理も作れる
標準入力と標準出力
入出力の切り替え
CGIとSSI
アクセスカウンタの仕組み
あとがき

Copyright © MESCIUS inc. All rights reserved.