ウェブページの仕組み(5) ~ CGIPHP

ラウザの機能だけでは表現しきれないファイル形式やサービス等を表現するために、プラグインを追加してブラウザの機能を拡張できることを前項で学習しました。

ただし、ブラウザの機能拡張といっても表示や表現の幅を広げるもので、主に文字や画像、音声、動画の再生に利用されます。

一方、多くのウェブサイトで見かけるメールフォームやショッピングカートなどのように、ユーザーとの間でデータのやり取りをするような複雑な仕組みになると、なかなか実現できません。

そもそも、ウェブページの仕組み(1) で学習のとおり、ウェブページを構成するHTMLファイルもただのテキストファイルであり、一般的にHTMLでは表現することができません。

なぜなら、個々のユーザーとデータをやり取りする仕組みは、ユーザーとWWWサーバ(ウェブサーバ)との間でデータのやり取りが行われているということだからです。

つまり、ウェブサイトを訪れた個々のユーザーがWWWサーバに何らかの働きかけを行い、WWWサーバにその結果を返してもらって、それが表示されるという仕組みが必要になるのです。

例えば、ひと昔前によく見かけたアクセスカウンターは、ページを訪れるたびにカウント数が増えて行きます。こうした仕組みは、WWWサーバとやり取りできなければ管理できず、HTMLだけで実現することはできません。

したがって、HTMLファイルに双方向の機能を付加するためには、HTMLファイル以外のプログラムを組み合わせた別の仕組みが必要になってきます。

その代表的なものが、

CGI(シージーアイ)

と呼ばれる仕組みです。

CGIは「Common Gateway Interface」の略で、インターネットでもっともよく利用されている仕組みのひとつです。

CGIは、先述のアクセスカウンターやオンラインショッピングの他にも、アクセス解析、メールフォーム、電子掲示板、投票、ランキング、ゲームなど様々なシーンで利用されています。

CGIの仕組みは、まず訪問者のカウントやショッピングの金額計算といったHTMLでは処理できないプログラムを作成してWWWサーバに保存しておきます。

このプログラムは、

CGIプログラム

と呼ばれ、HTML言語以外のプログラミング言語で記述されています。(Perlという言語が多い。詳しくは後述します)

このCGIプログラムをWWWサーバに保存しておくことで、WWWサーバでユーザー個別的に処理を行うことができます。

一方、HTMLファイル側(ウェブページ側)には、このCGIプログラムを呼び出すトリガー(記述)を埋め込んでおきます。例えば、そのページにアクセスしたり、ボタンをクリックしたりするとCGIプログラムが実行されることになります。

そして、WWWサーバで処理が行われて結果が返されてきます。その結果はHTMLファイルに読み込まれて(新しいHTMLファイルとなって)表示されるというわけです。

下図は、アクセスカウンタを例にCGIの仕組みを解説した図です。

CGIのイメージ

このように、CGIによってHTMLでは表現し得ないインタラクティブなウェブページを実現することができます。

前項で学習したFlashなどのプラグインによる機能拡張の場合は、ブラウザに適切なプラグインを追加しなければ正常に動作しないのに対し、CGIの場合は、

HTMLファイルがブラウザに返される

ため、基本的にどんなブラウザでも正常に動作するというメリットがあります。

しかし、CGIにもデメリットがあります。

CGIプログラムはWWWサーバ上で実行されるので、そのプログラムにエラー(誤動作やプログラムミス)があると、WWWサーバの動作に影響を与えてしまうということです。

つまり、個人でWWWサーバ(自宅サーバ)を立ち上げてウェブサイトを公開しているのであれば何ら問題はありませんが、多くの個人は契約しているプロバイダのサーバやレンタルサーバを利用しています。

そのため、

同じサーバを利用している多数のユーザーに迷惑をかける可能性がある

ということです。

万一、CGIプログラムの悪影響でサーバが停止してしまうようなことになれば、損害は計り知れません。

したがって、プロバイダのサーバやレンタルサーバでは、そのサーバが許可しているCGIプログラムしか設定することができないケースがほとんどです。

つまり、

CGIプログラムを自作しても自由に設定できるわけではない

という制約があるのです。

また、サーバのデータベースを検索したりするようなCGIの場合、処理量が多くなってサーバに負荷がかかり、パフォーマンス(処理速度)が低下することもあります。この場合も、多くのユーザーに迷惑がかかってしまいます。

CGIプログラムを自作する場合は、自分のコンピュータで何度も動作チェックすることはもちろんですが、契約しているサーバがそのCGIプログラムを許可しているのかを確認しておく必要があります。

ただ、そうは言ってもプログラミング言語を駆使してCGIを作り上げるのは容易ではありません。そのため多くのサーバでは、いろいろな種類のCGIを事前に用意してくれています。

こうした既存のプログラムを利用することで、初心者でもある程度簡単にCGIを設定して、インタラクティブなページを作成することができます。また、インターネット上で多くのCGIプログラムが公開されています。

このように、CGIはウェブの可能性を大きく広げてくれる仕組みですが、わずか一人のプログラムミスで何万人規模のユーザーに影響を与えてしまう可能性がある仕組みでもあります。契約しているサーバをよく確認して、許可されていないCGIを使用することのないように十分注意してください。

では、簡単にCGIプログラムの記述について紹介しておきます。

CGIプログラムは、HTML言語以外のプログラミング言語で作成されると先述しましたが、もっとも多く使用されている言語は、

Perl(パール)

と呼ばれるプログラミング言語です。

PerlはCGIのための言語というわけではありませんが、もともと文字列の検索や抽出といった文書処理等を行う言語だったので、HTMLと相性が良く、HTMLと組み合わせて使われることが多い言語です。

簡単に説明すると、プログラミング言語には「コンパイラ方式」と「インタプリタ方式」があります。

コンパイラ方式は、コンパイラと呼ばれる翻訳ソフトが、記述した言語を一括して機械語(コンピュータが直接処理できる0と1の2進数)に翻訳(変換)してCPUに処理させます。

一方インタプリタ方式は、インタプリタと呼ばれる翻訳ソフトが、記述した言語を一行一行、機械語に翻訳して、その都度CPUに渡して処理させます。

このような翻訳処理の違いによってプログラミング言語は大別されますが、基本的に「コンパイラ方式」は大規模なソフトウェアやツールの開発に用いられ、「インタプリタ方式」は小規模な処理を行うプログラムの作成に用いられています。

コンパイラ方式は、高機能で処理は高速なものの習得に時間がかかる、インタプリタ方式は、簡易的でコンパイラ方式より速度は劣るものの習得しやすいといった特徴があります。

したがって、Prelはインタプリタ方式のプログラミング言語になります。Perlは習得しやすく、インタプリタ(翻訳ソフト)をサーバに置くことができるので、CGIには最適と言われています。

※正確には、インタプリタ方式の言語はプログラミング言語ではなく「スクリプト言語」と呼ばれています。つまり、プログラミング言語とはコンパイラ方式の言語を指します。

こうして、CGIは多くのウェブサイトで利用される身近なものとなっていましたが、やはり一度サーバ上でCGIプログラムを起動してHTMLファイルをブラウザに返すという仕組みは、どうしても処理時間がかかることになります。

そのため、近年CGIの利用率は減少しています。なぜなら、CGIに代わる技術が普及してきたからです。

それは、

PHP(ピーエイチピー)

と呼ばれる技術です。

PHP「Hypertext Preprocessor」の略で、ウェブサイトなどのウェブ関連技術の開発に特化したプログラミング言語になります。

技術という書き方をしましたが、PHPはプログラミング言語です。

CGIはプログラムを実行する仕組みや技術のことですが、PHPはPerlと同じプログラミング言語です。CGIとよく比較されるので同じように表しますが、混同しないようにしてください。

なぜプログラミング言語がCGIと比較されるのかというと、

PHPHTMLファイルにコードを埋め込むことができる

からです。

つまり、PHPHTMLに組み込んで記述することができるプログラミング言語なのです。

こう言ってしまうとまたややこしいですが、PHPの処理がブラウザ上で行われるというわけではありません。PHPの場合もCGIと同様に、WWWサーバ側で処理が行われてHTMLファイルが返される仕組みは同じです。

何が違うのかというと、Perlで作成したCGIの場合は、サーバから個々のCGIプログラムを呼び出して、そのプログラムに処理をさせるという流れになります。

一方、PHPの場合は、

HTMLに記述した処理をサーバ上で直接実行する

という違いです。

つまり、サーバ→CGIプログラム→サーバの行程が省略されることになり、処理が速くなります。CGIの仕組みそのものがカットされ、PHPHTMLファイルに直接書き込んだ処理がダイレクトに実行されるわけです。

そのため、PHPが広く利用されるようになりました。

また、PHPはPerlより習得が容易で、多くのウェブサイトがPHPに切り替えたこと、HTMLとは で学習した「WordPress」で採用されていることなどから、2023年現在、世界中で公開されるウェブサイトの約8割がPHPを使用しているという状況になっています。

PHPもPrelと同じスクリプト言語です。CGIPHPとPerlの違いをよく理解しておきましょう。

更新履歴

2009年6月21日
ページを公開。
2009年6月26日
ページをXHTML1.0とCSS2.1で、Web標準化。レイアウト変更。
2018年2月1日
ページをSSL化によりHTTPSに対応。
2023年9月22日
内容修正。

参考文献・ウェブサイト

当ページの作成にあたり、以下の文献およびウェブサイトを参考にさせていただきました。

文献
図解入門 インターネットのしくみ
HTMLとCGIの仕組み
https://www.gadgety.net/shin/tips/web/html.html
初心者でもすぐわかる!PHPとPerlの違いとは?
https://eng-entrance.com/php_perl