ここではCGIを基礎から解説していきますが、CGIもブラウザ上で動作する以上、少なくともHTMLのタグや属性といったものを理解し、書く事が出来る必要があります。
そして確実にHTMLよりも複雑です。HTMLを理解できていない段階でCGIを学ぼうとするのはお勧めしません。HTML guideや他のHTML解説ページ等でそちらを学んでください。
CGIは「Common Gateway Interface」の略で、平たく言えば外部からのアクセスによって実行できる、サーバ内で動作するプログラムの事です。従ってサーバマシンで動作するプログラムでさえされば、その言語は問いません。つまり「CGI」というプログラミング言語があるわけではないのです。
しかし言語は問わないとはいうものの、現在Webページを表示しているCGIの多くはPerlという言語によって作られており、このページでもPerlによるCGIの解説をします。
Web上のページ(いわゆるホームページ)には、世界中の人がアクセス出来るとはいえ、それらは基本的にサーバ内にある情報を読み込んでいるだけに過ぎません。CGIは、外部からのアクセスによってプログラムを実行することで、サーバ内のデータを書き替えたりする事が出来るため、ページにユーザーの意思を直接反映させる事を可能にしています。
例えばWeb掲示板やチャットは、ユーザーの書き込みをログとしてサーバ内に保存し、他のユーザーはそのログを参照する事で、ほぼリアルタイムに複数のユーザー間で言葉のやり取りを行っているのです。
しかし、サーバ内でプログラムを実行したり、ファイルを書き替えられるという事は、サーバに対して悪影響を与える恐れがある他、サーバに処理を行わせる為処理負担がかかります。それでプロバイダごとにCGIの動作に関する制限が存在しているわけです。
Perlの特性として挙げられるものは次のような箇所です。
・比較的平易である
・書き方が自由である
・普及している
・コンパイルの必要が無い
1つ目は人にも寄るのですが、C言語やJavaなど他のWeb上で使われている言語に比べ、基礎の習得が容易であると思われます。さすがに全てを理解するには時間を要しますが、取っ付き易いという意味です。
2つ目の意味は、同じ処理をするにも多くの場合幾通りかの書き方が存在し、開発者は自分の理解しやすい形で書くことが出来るという事です。これは逆に他人が書いたソースを読む事を難しくしていますが、正しく理解していれば読めない事はありません。
3つ目はPerlそのものの特徴というわけではありませんが、重要な事です。普及しているということはそれだけ素材が多く存在しているという事で、開発の手助けとなるツールやモジュールが多数フリーで公開されており、それらを利用出来るというのは、初心者にとって何よりの利点であると思います。
4つ目は他の言語に触れてみると分かるのですが、一部の言語は人間が理解し易い文字列で書かれたプログラムを、コンピューターが理解できる形に翻訳する「コンパイル」という作業を必要とします。これは試しに作ったものの動作確認をしたり、ちょっと修正しただけでもいちいちコンパイルする必要があるので、結構面倒だったりします。
その点Perlはテキストで書いたものをそのままPerlを処理するプログラムに渡してやれば即実行させることが出来るので、開発の際の手間が少ないのです。ちょっとした事ですが、それらの言語を使い出すとその利便性を実感できるでしょう。
先ほど「Perlを処理するプログラム」と書きましたが、Perl言語でプログラムを作っても、そのままでは動作させる事は出来ません。Perlはサーバ上でも何でもPerlを処理するソフトを通して実行させるのです。従ってPerlを学ぶ上で、まず実行する為の環境が必要となります。
CGIを作る場合はWebサーバ上にアップして動作確認をする事も出来ますが、アップする手間がかかりますし、現在使用しているプロバイダでCGIを使えない可能性もあります。ここはやはりPerlやCGIをローカルマシン上で動作させられる環境を作りましょう。
Perl,CGIをWindows上で動作させるためのソフトの内、よく使われているものを紹介しておきます。
Perl処理ソフト
・ActivePerl
Windows用WWWサーバ
・Apache for Win32
・AnHTTPd
Perl処理ソフトはその名の通りPerl文を処理する為のもので、一応これだけでもPerlの動作実験を行う事が出来ますが、CGIとしてブラウザ上に結果を表示するにはWWWサーバ用のソフトが必要となります。実際のサーバの多くはUNIX系のマシンで動作していますが、ここに書いたものはそれらをWindows上で動作させられるようにしたものです。
ちなみに世界標準的なサーバ環境はApacheとActivePerlで、使用しているプロバイダがApacheを使用しているならAphche for Winを使うのも良いのですが、個人で使うだけならAnHTTPdの方が簡単で便利だと思います。
Perl処理ソフトの方は、基本的にインストーラの指示に従ってインストールするだけでOKです。
サーバソフトの方は、インストール後次のような設定が必要です。
・Apache for Win32の場合
"C:/Program Files/Apache Group/Apache/conf/httpd.conf"232行目 #ServerName new.host.name ↓ ServerName 127.0.0.1 239行目 DocumentRoot "C:/Program Files/Apache Group/Apache/htdocs" ↓ DocumentRoot "CGIをテストするフォルダを絶対パスで" 250行目 Options FollowSymLinks ↓ Options FollowSymLinks ExecCGI 273行目 Options Indexes FollowSymLinks ↓ Options Indexes FollowSymLinks ExecCGI 606行目 #AddHandler cgi-script .cgi ↓ AddHandler cgi-script .cgi |
"httpd.conf"がApacheの基本設定ファイルで、Apacheをインストールしたフォルダ内にあります。
239行目の設定は、作ったCGIを別ドライブに置いておきたい場合などに設定します。
ここでいう絶対パスとは"C:/〜"という様にドライブから指定する方法で、そのフォルダまでの絶対パスはエクスプローラ上部のアドレスバーに表示されています。
よく分からない場合はインストールしたApacheのフォルダ内にある"htdocs"フォルダ内で作業しましょう。デフォルトでいくつかファイルがありますが、消してしまっても構いません。念の為別の場所にコピーしても良いでしょう。
設定後、「Start Apache as console app」のショートカットからApacheを起動すると、DOSプロンプトウィンドウが開きます、邪魔な場合は最小化しておきましょう。
そしてそのままブラウザを開き、"http://127.0.0.1/"というURLにアクセスします。ネットワークに繋ごうとしてもキャンセルして構いません。モデムの電源が切ってあっても動作するはずです。
すると"httpd.conf"239行目で設定したフォルダに"index.html"があればそのファイルが、無ければそのフォルダのファイル一覧が出ると思います。そうなればひとまず動作確認は完了です。
また、作業を終える場合必ず「Shutdown Apache console app」のショートカットでApacheを終了させてください。そうしないと異常終了となってしまいます。
ちなみにApacheの場合次のような設定も可能です。
232行目 #ServerName new.host.name ↓ ServerName 127.0.0.1 297行目 UserDir "C:/Program Files/Apache Group/Apache/users/" ↓ UserDir "作業用フォルダの一つ上に設定" 633行目 #AddHandler cgi-script .cgi ↓ AddHandler cgi-script .cgi 638-639行目 #AddType text/html .shtml #AddHandler server-parsed .shtml ↓ AddType text/html .shtml AddHandler server-parsed .shtml AddHandler server-parsed .html |
こちらの場合、例えば297行目を"C:/Program Files/Apache Group/Apache/users/"として"C:/Program Files/Apache Group/Apache/users/karo/index.html"を作ると、"http://127.0.0.1/~karo/"でindex.htmlにアクセス出来ます。
・AnHTTPdの場合
AnHTTPdを"httpd"というフォルダに解凍したとして、そこに次の様にフォルダを作成します。
httpd/ ┬ ****/ ― public_html/ <このフォルダ2つを作成 | ├ cgi/ | ├ cgi-bin/ ・ ・ ・ ├ httpd.exe ・ ・ ・ |
"public_html"の上の"****"というフォルダは好きな名前にしてください。
そしてhttpd.exeを起動し、オプション一般の設定を行います。最低限動作に必要な設定は以下の通りです。
・ドキュメントルート: > [〜\httpd](httpd解凍フォルダの絶対パス)
・[/~****] -> ドキュメントルート\ [****\public_html]
・拡張子 [.pl,.cgi] 実行プログラム [perl]
[ ]の中が入力項目です。
設定を終えたら"public_html"内にindex.htmlというファイルを置き、ブラウザで"http://127.0.0.1/~****/"(****は自分で付けたフォルダ名)にアクセスしましょう。"public_html"直下のindex.htmlが表示されるはずです。
ローカルサーバの準備が出来たら、早速CGIの動作実験をしてみましょう。先ほど"index.html"を置いたのと同じフォルダに"test.cgi"というファイルを作り以下の内容にしてください。
#!C:/Perl/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<body bgcolor=#ffffff text=#000000>\n"; print "Hello! CGI!!\n"; print "</body></html>\n"; exit; |
1行目の記述は、そのサーバマシンにPerl処理ソフトがインストールされている場所を絶対パスで示しており、Perlのプログラムには必ず書かれるものです。ここではインストール時に"C:/Perl"を指定した場合で書いてありますが、自分の環境に合わせて設定してください。その他の記述については後々解説します。
準備が出来たらサーバソフトを起動してtest.cgiにアクセスしましょう。サーバ等の設定が合っていれば、ブラウザには「Hello! CGI!!」と表示されるはずです。
ActivePerlには文法チェック機能が付いており、動作させる前に安全にミスを探す事が出来ます。WWWサーバを起動させなくても良いので、スタートメニューのプログラムから「コマンド プロンプト(旧MS-DOSプロンプト)」を起動し、次のコマンドを実行しましょう。
C:\WINDOWS>perl -cw C:\Program Files\Apache Group\Apache\htdocs\test.cgi |
「perl -cw ファイル名」でそのファイルのPerlとしての文法上のミスをチェックします。「perl ファイル名」だと直接実行する事になります。ここではファイルをフルパスで指定していますが、cdコマンドで作業フォルダを移動すればファイル名のみでの実行も出来ます。コマンド プロンプトの詳しい使い方は個人で調べてください。
そして実行の結果「- syntax OK」と出ればとりあえず文法上に間違いはありません。エラーが出た場合怪しい行を教えてくれるので、その内容を見てどこがおかしいのか目星を付けましょう。
実際エラーが出ても、サーバに影響が出る事は滅多に無いのですが、出来るだけ実行前にチェックする事をお勧めします。