CGIとSSIの違いとは

レンタルサーバーの機能比較表を見ていると、CGIやSSIといった項目が目につきます。これはどちらも動的にウェブページを表示するための機能ですが、使い方に違いがあります。

簡単に知りたい方のために、最初にポイントだけまとめておきます。

  • 状況に応じて表示が変化するページのことを「動的なウェブページ」と呼ぶ
  • CGIとSSIはどちらも動的な処理を実現するが、そのための方法が異なっている
  • CGI:Webサーバー外部のプログラムを呼び出す
  • SSI:Webサーバー自身が、HTML内に直接記述された命令を実行する

以下は、より詳しい解説が欲しい方向けの内容となります。

動的なウェブページとは

そもそも「動的な」ウェブページとはなにか、からまず説明します。

通常のHTMLで作成したウェブページは、誰がいつ見に来て、何回更新ボタンを押しても、いつも同じ内容が表示されます。これはHTMLファイルの中身をそのまま表示させているからです。このように(HTMLファイル自体を更新しないかぎり)常に変化のないページのことを「静的な」ページと呼びます。

一方、たとえば現在の日付や時刻を自動で表示させたりなど、タイミングや動作によってその都度HTMLのデータを作り出しているものを「動的な」ページと呼びます。
一般的なウェブサイトであっても、アクセスカウンターや掲示板など、状況に応じて表示が変化するコンテンツはいずれも動的な処理によって実現されています。

そして、動的な処理を実現させる「方法」として、CGIやSSIなどが存在しています。

CGIとは

外部プログラムを呼び出す

CGIとは、一言で表せば「Webサーバー外部のプログラムを呼び出す手法」です。

たとえば掲示板のような動的コンテンツは、不特定多数の書き込み・編集・削除など複雑な仕組みを必要とします。しかしWebサーバーの本来の機能は「HTMLの中身をそのまま表示する」というシンプルなものですから、こうした複雑な処理には向いていません。

そこでこのような場合、通常のHTMLページとは別に掲示板プログラムを用意して、掲示板のアドレスにアクセスがあったらそれを呼び出す、という方法が取られます。

このときの呼び出し方のことをCGIと言います。正式名称はCommon Gateway Interface、あえて日本語にすると「(外部プログラムを使うときの)共通のやりとり方式」のような感じになります。

CGI≠Perl

このCGI方式で呼び出すプログラムは、以前は「Perl(パール)」という言語を用いて作成することが非常に多くありました。そのため、Perlで作ったプログラムのことをCGIだと誤解させるような情報も散見されますが、これは誤りです。

CGIとはあくまでも呼び出し方式であり、また呼び出すファイルもPerl以外にPHP/Python/Ruby、さらにはC言語やJavaなどで作成することも可能です。
※ただし呼び出す対象を、(どの言語で作っているかに関わらず)「CGIプログラム」や「CGIスクリプト」と呼称することはあります。

SSIとは

Webサーバー自身が動的処理を実行

一方でSSIとは、「Webサーバー自身に動的な処理まで行わせる手法」になります。

本来のWebサーバーはHTMLの中身をそのまま表示させるのが役割ですが、そこに特殊なコマンド(命令)を解釈する機能を加えたものがSSIです。正式名称もServer Side Includes、日本語で「(動的処理をWeb)サーバー側に含める」というものになっています。

SSIには幾つかのコマンドがあり、それを特定の文法に則ってHTML内部に直接記述します。たとえば「flastmod」というコマンドを記述することで、そのページの最終更新日時を表示できます。
※SSIコマンドを記述した場合、通常はHTMLファイルの拡張子を「.shtm/.shtml」にする必要があります。ただし設定によっては「.htm/.html」の拡張子でSSIコマンドを実行することも可能です。

execは使用を禁止されている場合も

また特殊なSSIコマンドとして「exec」があります。これは外部プログラムを指定することでCGIと同様の動作ができるほか、Linux/Unixのコマンドをそのまま実行してしまうこともできます。

とくに後者のOSへの命令がそのまま実行できるのが問題で、利用方法によってはサーバーに重大な障害を及ぼす場合もあります。そのためレンタルサーバー(共用サーバー)の多くでは、この「exec」コマンドの利用を禁止していたり、またなんらかの制限を設けています。

実際の使い分け

幅広く利用されつづけるCGI

まずCGIについては、今もウェブサイト上の多くの場面で利用されています。自分でプログラムが作成できなくても、フリー配布のものがネット上には多くあります。

レンタルサーバーにおいてもCGI利用を禁止しているところはまずありません。ただし、CGIの一部(とくにゲームなど)にはサーバーに著しい負荷をかけるものがあり、そうしたプログラムの利用は制限されている場合があるのでご注意ください。

SSIの利用は減少傾向か

SSIについては、(管理人の主観も入っていますが)以前に比べるとだいぶ利用されている場面が減ったように感じます。大きな理由としてはPHPの普及がありそうです。

かつて利用頻度の高かったSSIコマンドに「include」という他のファイルの内容を取り込むものがありました。たとえばウェブサイトのヘッダー・サイドバー・フッターなどの共通部分のHTMLをこのコマンドで取り込むことで、サイト管理を楽にしたりしていました。

しかしSSIと同じくHTML内に直接記述できるPHPが登場し、ほぼ同様の方法で他ファイルが取り込めるようになりました。しかも現在では月額100円程度のレンタルサーバー、さらには無料サーバーでも使えるほどにPHPが普及し、SSIでなければならないというケースが減ったように思われます。

もちろんroot権限が使えるVPSなどであればexecコマンドなども駆使して便利なことも行えると思うのですが、全体としては利用頻度は減っているのかなという印象を受けます。