【しーじーあい】

CGI とは?

最終更新:
💡 Webサーバーとプログラムをつなぐ受け渡し口

Webサーバーと外部プログラムが、リクエストの情報と処理結果をやり取りするためのインターフェース。プログラムが作ったHTMLなどの応答を、サーバー経由でブラウザへ返せる。

📌 このページのポイント
CGI:サーバーとプログラムの接点ブラウザWebサーバー① リクエスト④ 応答を返す⚙ 外部プログラム処理して結果を作る② 情報を渡す③ 結果を戻すCGIが受け渡しの決まりを定めるプログラミング言語の名前ではない
応答を作るプログラムとWebサーバーをつなぎます。HTML以外の内容も扱えます。
ひよこ ひよこ
CGIって、プログラムを書く言語なの?
ペンギン先生 ペンギン先生
言語ではなく、Webサーバーと外部プログラムをつなぐ仕組みだよ。PerlやPythonなどで書いたプログラムへ、リクエストの情報を渡し、その処理結果をサーバーへ戻すための決まりなんだ。
ひよこ ひよこ
静的なHTMLを返すのと何が違うの?
ペンギン先生 ペンギン先生
静的ファイルは、用意してある内容を返すよ。CGIのプログラムは入力や保存されたデータを使って応答を作れるから、フォームの処理や人ごとに違う表示にも使える。結果はプログラムからサーバーへ戻り、サーバーがブラウザへ送るんだ。
ひよこ ひよこ
必ずHTMLを作るの?
ペンギン先生 ペンギン先生
HTMLだけとは限らないよ。CGIの応答にはContent-Typeなどのヘッダーと本文があり、本文の種類に合った情報を返す必要があるんだ。画面に見せるHTMLも、他の種類のデータも扱えるよ。
ひよこ ひよこ
CGIは、アクセスのたびにプロセスを作るの?
ペンギン先生 ペンギン先生
従来型の実装では、リクエストごとにプログラムを起動するため、その起動が負担になり得るよ。ただしCGIの仕様では起動方法はシステム側が決める。100人が来たら必ず100プロセス同時起動、という固定のルールではないんだ。
ひよこ ひよこ
FastCGIやPHP-FPMとはどう違う?
ペンギン先生 ペンギン先生
FastCGIでは、動いているプログラムを複数のリクエストに使う構成ができるよ。PHP-FPMはPHPのFastCGI実装で、処理を担当するプロセスのプールなどを管理するんだ。CGI、FastCGI、言語の処理系、Webフレームワークは、それぞれ役割を分けて考えよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「CGI」って出てきたら「Webサーバーがプログラムと情報を受け渡す仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Common Gateway Interface」 = 共通ゲートウェイインターフェース
💬 Gatewayは出入り口、Interfaceは接点。Webサーバーと外部プログラムをつなぐ受け渡しの決まりを表しているよ。

参考資料

← 用語集にもどる