【しーじーあい】

CGI とは?

💡 Webサーバーが「外注スタッフ」を呼び出して作業させる仕組み
📌 このページのポイント
GET /form.cgi ブラウザ (クライアント) HTTPリクエスト Webサーバー リクエストごとに 新プロセス起動! #!/usr/bin/perl print "Hello!"; CGIスクリプト(新プロセス) HTML生成 HTTPレスポンス 動的HTML
CGIはリクエストのたびに新しいプロセスを起動してHTMLを生成する。アクセスが増えるほどサーバーへの負荷も増える
ひよこ ひよこ

CGIって何?昔よく聞いた気がするんだけど。

ペンギン先生 ペンギン先生

CGIはWebサーバーがリクエストを受け取ったとき、外部のプログラムを呼び出して動的なHTMLを作ってもらう仕組みのことだよ。昔の掲示板や問い合わせフォームはほとんどこれで動いていたんだ。

ひよこ ひよこ

静的なHTMLと何が違うの?

ペンギン先生 ペンギン先生

静的HTMLはファイルをそのまま返すだけで、内容は変わらない。CGIはリクエストのたびにプログラムが走って「今この瞬間の情報」を使ってHTMLを生成するんだ。だから「あなたのカート」とか「今日の投稿一覧」みたいな、人によって違う内容を表示できるんだよ。

ひよこ ひよこ

CGIが「負荷が高い」って聞いたことあるんだけど、なんで?

ペンギン先生 ペンギン先生

リクエストが来るたびに新しいプロセスプログラムの実行単位)を起動するからだよ。プロセスの起動って意外とコストがかかるんだ。100人が同時にアクセスしたら100個のプロセスを立ち上げることになるから、サーバーへの負荷がどんどん上がっていくんだよ。

ひよこ ひよこ

おもしろい!FastCGIとかPHP-FPMって聞くんだけど、CGIと何が違うの?

ペンギン先生 ペンギン先生

実はここが重要なポイントで、通常のCGIはリクエストごとにプロセスを起動して終了するけど、FastCGIはプロセスを起動したまま使い回す仕組みなんだ。PHP-FPM(FastCGI Process Manager)はPHP用のFastCGI実装で、プロセスをプールしておいてリクエストをさばいていく。「なぜNginxPHP-FPMを組み合わせるのか」という理由は、この「プロセスを使い回せるから」というところにあるんだけど、これをきちんと説明できるエンジニアは意外と少ないくらい、理解されていない仕組みなんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「CGI」って出てきたら「Webサーバーがプログラムを呼び出して動的なページを作る仕組みのことだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「CGI(Common Gateway Interface)」 = 共通ゲートウェイインターフェース
💬 Gateway(ゲートウェイ)は「出入り口」の意味。WebサーバーとプログラムをつなぐCGI用の「共通の出入り口規格」ということだよ
← 用語集にもどる