Webアプリ開発事始 第9回

CGIの仕組みを覗く(2)~ゲストブックの仕組みとプログラミング言語 長谷川裕行
有限会社 手國堂

CGIプログラムの基本構造

前回は、SSIを使ったアクセスカウンタの仕組みを紹介しました。今回は、クライアントから入力を受け取って処理するCGIを紹介します。


- SSIとCGIの違い -

前回紹介したアクセスカウンタは、Webページに対するユーザーのアクセス――Webサーバーへの読み出し要求――という行為をきっかけに起動され、Webサーバー側に保存していたアクセス数を記録したファイルをオープンして、そのファイルに対する読み出しと書き込みを行います。

アクセスカウンタでは、ユーザーの明示的な入力を受け取る必要がありません。そのためSSIを使い、比較的簡単な仕組みで実現できます。ユーザーの入力を受け取って処理をするCGIでは、アクセスカウンタのように簡単な処理とはなりません。

まず、単純な例で、ユーザーの入力を受け取ってそれを処理するCGIの仕組みを理解しておきましょう。


- データを受け取るWebアプリケーション -

以下のような仕様のWebアプリケーションを想定します。

(1) ブラウザにテキストボックスを2つとコマンドボタンを表示する
1つにユーザーの名前、もう1つに生年(生まれた年)を西暦で入力することとします。名前を入力する方をtxtName、生年を入力する方をtxtBornYとしておきましょう。
(2) ユーザーが、それぞれのテキストボックスに値を入力
txtNameにユーザーの名前、txtBornYに生年が入力されます。入力された値(文字列)はブラウザに表示されますが、まだWebサーバーには届いていません。
(3) ユーザーがコマンドボタンをクリック
コマンドボタンのクリックにより、Webサーバーに対してCGIプログラムを起動する要求が送られます。同時に、テキストボックスに入力された値がCGIプログラムに渡されます。
――ここでCGIプログラムが起動し、処理を実行します――
(4) クライアントのブラウザに、以下のような内容を表示
xxxx さん(入力されたユーザーの名前)は xx 歳(ユーザーの年齢)です。


- CGIプログラムの処理 -

上記(3)の段階でCGIが起動し、処理が行われます。この部分を、もう少し詳しく見ていきましょう。ここからは、CGIプログラムの動作手順となります。
以下の説明に登場する変数などの識別名や処理手順は、実際にはプログラミング言語に依存します。ここでは特定の言語に依存する説明は避け、あくまで一般的な考え方だけを説明します。

(1) クライアントのブラウザに入力されたデータを受け取る
(2) 受け取ったデータを変数に格納する
txtNameに入力された「氏名」を文字列型のstrName、txtBornYに入力された「生年」は、整数型のintBornYに格納するとします。
(3) 「生年」と「現在の西暦年」から「年齢」を計算
仮に現在の西暦年がGetYearという関数から得られるとしたら、年齢は以下のような式で求められます。
  GetYear - intBornY
この値を、整数型のintYearsOldに保存するとしましょう。
正確を期すためには生年月日を取得し、現在の年月日から年齢を求めるべきでしょう。ここでは説明のために、処理を簡略化しています。
(4) 上の式で求められた年齢と氏名から、表示用の文字列を生成
氏名をstrName、年齢をintYearsOldという変数に格納しているとしたら、最終的に以下のような形の文字列を生成します。

<B> -- strName -- </B> " さんは " <B> -- intYearsOld -- </B> "歳です。"<BR>

例えば、今が2002年で、ユーザーがブラウザの画面から
  氏名:山村 均
  生年:1980
と入力したとします。すると上記の処理によって、最終的に
 <B>山村 均</B> " さんは " <B>22</B> "歳です。"<BR>
というHTML形式の文字列が生成されます。
 この文字列をWebサーバーからクライアントへ送信すると、ブラウザには
  山村均 さんは 22 歳です。


- 処理結果をHTML形式で出力する -

ここで例に取り上げたCGIプログラムの処理自体は、整数値の減算と文字列の連結という、非常に単純な機能だけを使っています。もちろん、もっと複雑な処理を記述することも可能です。重要なことは、個々のCGIプログラムの処理内容ではなく、ユーザーが入力した値を元に処理をし、最終的にHTML形式のデータを生成して標準出力に送る――ということです。

プログラム内部の処理は、当然言語に依存するため、具体的なソースコードを紹介することはできません。単純な数値の四則計算を行ったり、関数を使って複雑な計算を行ったりすることになるでしょう。ただ、どのような言語を使ってどのような処理を行っても、最終的には文字列変換や文字列連結などの処理を行い、HTML形式のデータを生成して、それを標準出力へ送ることになります。


- 目次 -
CGIプログラムの基本構造
SSIとCGIの違い
データを受け取るWebアプリケーション
CGIプログラムの処理
処理結果をHTML形式で出力する
CGIのデータ受け渡し
ゲストブックの仕組み
CGIの長所と短所
CGIとプログラミング言語
慣れた言語が一番
あとがき

Copyright © MESCIUS inc. All rights reserved.