WebサーバーでHTMLを動的に生成する技術として、CGIとSSIはどちらも長い歴史を持っています。名前は似ていますが、仕組みも得意な用途も大きく異なります。
「どちらを使えばいいのか」「何が違うのか」と迷う方も多いのではないでしょうか。
本記事では、CGIとSSIそれぞれの意味・仕組みの違い・動的コンテンツの生成方法・実行方式の差異・具体的な用途と使い分けまで、わかりやすく解説していきます。
両者の特徴を正しく理解することで、目的に合った技術を選べるようになるでしょう。
CGIとSSIの違いをひとことで言うと
それではまず、CGIとSSIそれぞれの基本的な意味と、両者の本質的な違いから解説していきます。
CGIはCommon Gateway Interfaceの略称で、WebサーバーがプログラムをI/Fとして外部プロセスで実行し、その出力結果をHTMLとして返す仕組みです。一方SSIはServer Side Includesの略称で、HTMLファイルの中に特別なコメントタグを埋め込んでおき、Webサーバーがそのファイルを送信する際に動的な内容を挿入する仕組みです。
最も大きな違いは「何を動かすか」です。CGIはサーバー上でプログラムそのものを実行してHTMLを生成します。SSIはHTMLファイルをベースに、その一部だけをサーバーが動的に書き換えます。CGIは「プログラムが主役」、SSIは「HTMLが主役」と覚えるとわかりやすいでしょう。
SSIとは何か?Server Side Includesの意味
SSI(Server Side Includes)とは、HTMLファイルの中に特殊なディレクティブ(命令)を記述しておき、WebサーバーがそのHTMLを送信する際に命令を処理して結果を埋め込む技術です。拡張子は通常.shtmlが使われますが、サーバーの設定によって.htmlでも動作させることができます。
SSIで使えるディレクティブには、現在の日時を表示する・別のHTMLファイルを読み込んで挿入する・環境変数を表示するなどがあります。プログラムを書く必要がなく、HTMLに少し命令を加えるだけで動的な内容を表示できる手軽さが特徴です。
CGIとSSIの仕組みの根本的な違い
| 比較項目 | CGI | SSI |
|---|---|---|
| 正式名称 | Common Gateway Interface | Server Side Includes |
| 処理の主体 | 外部プログラム(スクリプト) | HTMLファイル内のディレクティブ |
| 出力の生成 | プログラムがHTMLを全て生成 | 既存HTMLの一部を書き換え |
| プログラミング知識 | 必要 | ほぼ不要 |
| 実行タイミング | リクエスト時にプロセス起動 | HTMLファイル送信時にパース |
CGIはHTMLページ全体をプログラムが生成するのに対し、SSIは既存のHTMLファイルの一部だけを動的に差し替えるという点が根本的な違いです。
SSIの基本的な記述例
SSIのディレクティブはHTMLのコメント形式で記述します。代表的なものを見てみましょう。
| ディレクティブ | 内容 | 出力例 |
|---|---|---|
| <!–#echo var=”DATE_LOCAL” –> | 現在の日時を表示 | Thursday, 12-Mar-2026 |
| <!–#include file=”header.html” –> | 別ファイルを読み込んで挿入 | header.htmlの内容 |
| <!–#echo var=”REMOTE_ADDR” –> | アクセス元IPを表示 | 192.168.1.1 |
| <!–#exec cmd=”date” –> | コマンドを実行して結果を挿入 | コマンドの出力結果 |
このようにSSIはHTMLコメントのような見た目で記述するため、プログラミングの知識がなくても比較的扱いやすいのが特徴です。
CGIとSSIの実行方式の詳しい違い
続いては、CGIとSSIがWebサーバー上でどのように実行されるかという実行方式の違いを確認していきます。
両者の動作の違いを深く理解するには、Webサーバーがリクエストを受け取ってからレスポンスを返すまでの処理の流れを比較するのが効果的です。
CGIの実行方式:プロセス起動型
CGIはブラウザからリクエストが来るたびに、Webサーバーが外部プロセスとしてスクリプトを起動します。スクリプトは実行されてHTMLを標準出力に書き出し、処理が終わるとプロセスは終了します。
この「毎回新しいプロセスを起動する」という仕組みが、CGIのパフォーマンス上の弱点です。プロセスの起動にはコンピュータのリソースが必要なため、アクセスが集中するとサーバーに大きな負荷がかかります。一方で、プロセスが独立しているためセキュリティ面での隔離性が高いというメリットもあります。
SSIの実行方式:HTMLパース型
SSIはWebサーバーがHTMLファイルをブラウザに送信する際に、ファイルの内容を一行ずつスキャン(パース)してディレクティブを検出し、その場で処理します。新しいプロセスを起動する必要がないため、CGIと比べてサーバーへの負荷が低くなります。
ただしSSIでは、ディレクティブが含まれるファイルはすべてパースされるため、大量のSSIディレクティブを含むページが多いとパース処理自体がサーバーリソースを消費することもあります。
Apacheでの設定の違い
ApacheでCGIとSSIをそれぞれ有効にする設定方法も異なります。CGIはScriptAliasやmod_cgiで有効化し、SSIはmod_includesモジュールとOptions IncludesまたはIncludesNOEXECで有効化します。SSIにはIncludesNOEXECという設定もあり、これはexecディレクティブ(コマンド実行)を禁止してセキュリティを高めたい場合に使います。
CGIとSSIの用途と使い分け
続いては、CGIとSSIをそれぞれどのような場面で使うべきかという用途と使い分けを確認していきます。
両者の特性を正しく理解したうえで、目的に応じて使い分けることが重要です。
CGIが向いている用途
CGIは複雑な処理や外部システムとの連携が必要な場面に向いています。具体的には以下のような用途です。
| 用途 | 内容 |
|---|---|
| フォームのメール送信 | 入力内容を受け取りメールで送信する処理 |
| データベース連携 | 検索条件に応じてデータを取得・表示 |
| ファイルの動的生成 | ユーザーの操作に応じてファイルを生成・ダウンロード |
| 認証・セッション管理 | ログイン・ログアウトの処理 |
| 外部APIとの連携 | 外部サービスのデータを取得して表示 |
プログラムで自由に処理を記述できるため、ユーザーの入力に応じた複雑な動的処理が必要な場合にはCGIが適しています。
SSIが向いている用途
SSIはページの一部を共通化したり、簡単な動的情報を表示したりする用途に向いています。
| 用途 | 内容 |
|---|---|
| ヘッダー・フッターの共通化 | 全ページ共通のナビゲーションを一括管理 |
| 現在の日時の表示 | ページ上に今日の日付・時刻を自動表示 |
| 最終更新日の表示 | ファイルの更新日時を自動で表示 |
| アクセス元情報の表示 | IPアドレスやブラウザ情報の簡易表示 |
特にヘッダーやフッターの共通パーツを複数のHTMLファイルに挿入する用途は、SSIの最もポピュラーな使い方です。プログラムを書かずにHTMLの一部を動的に変えられるため、プログラミング初心者でも扱いやすいでしょう。
CGIとSSIを組み合わせて使う方法
CGIとSSIは排他的な関係ではなく、組み合わせて使うことも可能です。たとえばSSIのexecディレクティブを使うと、HTMLファイルの中からCGIスクリプトを呼び出してその出力を埋め込むことができます。
静的なHTMLページの骨格はSSIでヘッダー・フッターを共通化しつつ、動的な処理が必要な部分だけCGIを呼び出すという構成にすることで、両者のメリットを活かした柔軟なサイト構築が可能です。
まとめ
本記事では、CGIとSSIの違いについて、それぞれの意味・仕組み・実行方式・用途・使い分けまで幅広く解説しました。
CGIはプログラムを実行してHTMLを動的に生成する技術であり、フォーム処理やデータベース連携など複雑な処理に向いています。SSIはHTMLファイルの一部をサーバーが書き換える技術であり、共通パーツの挿入や日時表示など簡単な動的処理に向いています。
目的に応じて両者を正しく使い分けることが、効率的なWebサイト構築への近道です。本記事がCGIとSSIの違いを理解する一助となれば幸いです。