Common Gateway Interface

Common Gateway Interface (コモン・ゲートウェイ・インタフェース、CGI)は、ウェブサーバ上でユーザプログラムを動作させるための仕組み。現存する多くのウェブサーバプログラムはCGIの機能を利用することができる。

ウェブサーバプログラムの機能の主体は、あらかじめ用意された情報を利用者(クライアント)の要求に応じて送り返すことである。そのためサーバプログラム単体では情報をその場で動的に生成してクライアントに送信するような仕組みを作ることはできなかった。 そこでサーバプログラムから他のプログラムを呼び出し、その処理結果をクライアントに送信する方法が考案された。それを実現するためのサーバプログラムと外部プログラムとの連携法の取り決めがCGIである。

CGIは環境変数や標準入出力の扱えるプログラミング言語からなら言語の別を問わず幅広く利用できるが、実行速度やテキスト処理の容易さなどの兼ね合いによりPerlが使われることが多かった。近年では、Perlに加えてPython、Rubyなども広く使われている。

代表的なアプリケーションには、電子掲示板、アクセスカウンタ、WikiやBlogシステムなどがある。

近年では、Webサーバのプロセスとしてインタプリタを常駐させておくことにより、CGIからプログラムを呼び出すオーバヘッドを減らし、パフォーマンスを向上させたJava Servletやmod perl、mod php、FastCGIなどの実装も出現している。

CGIに関するよくある誤解

名前からも分かるとおり、CGIはあくまでもインターフェイスであり、特定のプラットフォームに依存せずに、ウェブサーバなどから外部プログラムを呼び出す仕組みのことを指す。

そのため、この仕組みを用いて起動されるプログラム本体のことをCGIと呼称するのは誤りである。また、1990年代後半のCGIを使ったプログラムはPerlが大部分であったため、「CGIとはPerlまたはそれに類する特定の言語のことである」という認識も広く存在する[要出典]が、こちらも誤りである。

仕様

CGIの仕様はNCSAにより最初に定義・実装(NCSA HTTPdにおいて)され、現在の最新版はCGI1.1である。2004年にRFC 3875となった。

CGIは、典型的には以下のような動作を期待される。CGIを経由して実行されるプログラムのことを、CGIプログラムと呼ぶ。