Webアプリ開発事始 第8回

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

標準入力と標準出力

CGIは、OSの持つ入出力の切り替え機能を利用して、Webサーバーとプログラムとの間でデータをやり取りすることが基本です。この仕組みを理解しておきましょう。

CGIはUNIXの機能と関連している部分が多いため、ここでは動作環境にUNIXを前提として説明します。


- CGIと標準入出力 -

CGIプログラムの実体は、Webサーバー上で動作する単独のプログラムです。但し、一般的なWindowsアプリケーションのように、ウィンドウを持っているわけではありません。ウィンドウはユーザーインターフェイスであり、ユーザーと直接やり取りを行うために存在します。

CGIがやり取りするのは、ユーザーではなくWebサーバーです。そのため、データの入出力は内部的に行われます。内部的な入出力とは「標準入力」と「標準出力」です。

一般に、コンピュータの標準入力はキーボード、標準出力はディスプレイとなっています。UNIXやWindowsには、標準入力と標準出力を自在に切り替える機能が備わっています。この機能を利用すれば、プログラムはWebサーバーから受け取ったデータを入力として処理し、処理結果を出力としてWebサーバーに返すことができます。

これが、CGIの基本的な動作です。CGIプログラムがデータを受け取る方法は、標準入力以外にもありますが、まずは標準入出力の切り替えによる方法を理解しておきましょう。


- Windowsの標準入出力 -

UNIXの基本的なユーザーインターフェイスは、キーボードからのコマンド入力とテキストだけで構成された画面表示です。WindowsなどのGUI(Graphical User Interface)に対して、一般に“CUI(Character-based User Interface)”と呼ばれます※1

 UNIXではX Window SystemというGUI環境も利用できますが、WindowsのようにOSの一部ではなく、コマンドの入力で起動されるプログラムです。最近では、コンピュータの電源を入れるとX Window Systemが自動的に起動するように設定されたLinuxなども多くなってきましたが、UNIXの基本はCUI環境です。これを、コンソールモードとも呼びます。

WindowsにもCUI環境が存在することはご存じでしょう。いわゆる「DOS窓」などと呼ばれる「MS-DOSプロンプト」です。Windows 2000やXPなどNTの血を引くOSでは、スタートメニューに登録された「MS-DOSプロンプト」からしかCUI環境を利用できませんが、Windows 9x系OS(Meを含む)では、そもそもマシンの起動自体にDOSを使い、DOSを単独で起動することもできました。

Windowsの土台となっているDOSは、元々UNIXのコンソールモードをお手本にしているため、内部の構造こそまったく異なりますが、標準入力/標準出力の概念や、それらの切り替え機能などを受け継いでいます。

つまり、DOSもUNIXと同じように、CGIに必要な基本の動作環境を持っているということです。

※1 元々CUIという語があった訳ではなく、後にGUIが登場したとき、従来のインターフェイスをGUIと区別するために作られた語です


- プログラムと入出力 -

UNIXのコンソールモードでは、プログラムに与えるデータをキーボードから入力し、その処理結果はディスプレイへ送られて画面表示されます。キーボードが標準入力、ディスプレイが標準出力です。

 例えば、

  /usr/data/hello.txt

というテキストファイルの内容を読みたい場合、キーボードから以下のように入力します。

  less /usr/data/hello.txt

lessは、テキストファイルの内容を画面表示するプログラムです。

この場合、lessはテキストファイル“/usr/data/hello.txt”の内容を入力として読み込み、その内容を処理結果としてディスプレイに出力することになります。

上記のようなコマンドをキーボードから受け取り、指示に従ってプログラム(例ではless)を起動するのは、シェルと呼ばれるプログラムの仕事です。シェルの場合は、キーボードからのコマンドを入力として受け取り、その結果としてコマンドで示されたプログラムを起動します。

UNIXがプログラムを実行する仕組みは、このように非常にシンプルです。


図2:UNIXのプログラムと入出力



- 目次 -
CGIの基本原理
標準入力と標準出力
CGIと標準入出力
Windowsの標準入出力
プログラムと入出力
入出力の切り替え
CGIとSSI
アクセスカウンタの仕組み
あとがき

Copyright © MESCIUS inc. All rights reserved.