8←  home  →10
さみだれ雑記(9)1999年7月4日

CGIでPerlのお勉強(その1)

 「アンケートかきかき」と「発言かきかき」コーナー開設を記念して、基礎からのCGI/Perlのお勉強シリーズです。不定期発表。

 HTMLの時とはえらい違いでした。HTMLって基本的考え方は楽なんです。ところがぎっちょんちょん。CGI/Perlになると、「基本的考え方」からしてなかなか分からない、という状態で、みなさんよろしかったら一緒に勉強しましょうね、っていうシリーズです。なぜ別枠にしないんだ?といえば「完結する自信も目途もない」ってことで、このコーナーなら、「雑記」ですから、やになったらやめちゃえばいい、って安直。

 「初心者にもわかりやすい。・・・くどいほど丁寧に説明・・・他のCGIの本を読んで理解できなかった読者にもよくわかる・・・」っていうセリフで買ってしまった本を読んで、う〜難しい・・・。

「Perlで作るCGI入門 基礎編」 結城浩 著(ソフトバンク)¥2千600円。

って本ですけどね。この本、「関数」「変数」「引数」「ファイルハンドル」とかいう専門用語を説明なしに、ポンと使うんだ。「基礎が学べる」ってそこら辺から教えるってことじゃあないのお?
 と、文句言っているくせに、めでたく「書き込みコーナー」が出来たのは、完成したプログラムのサンプルがあるから。また、それを著者のページからダウンロード出来たからでしょうね。プログラミングの一番の敵は、タイプミス+うち忘れ・・・ぐす、私よくやる・・・。;のつもりで:うってたり・・・。
(ちなみに、http://www.st.rim.or.jp/~hyuki/cgibook/です)(ついでにもとほほのWWW入門の中のPerlの項目も参考になります)
 
 実際、この本、よく分からないなりに、プログラムをちょこちょこっと修正すれば使えるようになってます。でも、それじゃ面白くないんで、だいぶ修正+改変しました。さあ、これがそのプログラムだ!!

とやりたいんですが、それやってもあまり意味ないんですよね。このページは基本的に「身内向け」のもんで、サーチエンジンになんて登録するつもりもないし(あ、FairuzのページはずうずうしくYahoo!に登録を申し込んでしまいましたが・・何も言ってこない)

何の話だったかというと、プログラムの説明しても、試す環境がなかったら面白くない、ってことですね。HTMLでもCGI/Perlでも、自分で作ったソースが動いてくれなきゃ、人のプログラム読んだだけじゃ面白くないからです。ということで、第一回は、自分のマシンでCGI/Perlを動くようにするの巻です。

 まず、CGI/Perlのプログラムをダウンロードしてくる必要がありますが、その前に、私たちはいかにホームページを見ているかの説明。

 ブラウザを立ち上げ、住所を打ち込んだり、リンクをたどるとページが表示される

って、あたりまえですが、その場合、ブラウザは接続したWWWサーバにhtmlファイルを送ってくれるよう要求するわけです。WWWサーバはその要求に応えてhtmlファイルを送る。それをブラウザが表示する。
 つまり、htmlファイル(およびJavaScript)を処理するのはブラウザです。ですから、htmlファイルはブラウザさえあれば自分のマシンで表示させることができます。
  htmlを扱うのに特殊なソフトは必要ありません。私の契約しているプロバイダみたいに、CGIが使えないWWWサーバだったら、自分のマシンでも基本的に同じこと。(多少動作が違うんだが・・・・特に問題ない)

 で次、CGIではだいたいPerlというプログラムが使われます。ということで
http://www.perl.com/pace/pub/perldocs/latest.html
ってとこでUnix,Windows,Mac用のperlが入手できます。これでPerlは動きます。他のOSは知りませんが、Windows版は特にとまどうこともなく使えます。Dosプログラムですけど・・・。(他の使い方もあるんでしょうが) perl ***.cgi  + RETURN ってやるとプログラムの間違いを行数付きで指摘してくれます。便利。間違ってなかったら実行します。

 しかし、CGIは使えません。使うためには自分のマシンをWWWサーバにする必要があります。

なぬ???と思った人はわたしのお仲間です。
 ま、ここでめげずに、Windowsの人は、AN HTTPD Home Page ってとこへ行きましょう。これをマシンに入れてhttp:Hypertext Transfer Protocol が使えるようにします。httpってURLの最初に出てくる「馴染みがあるはずなのに、何か分からない記号でしたよね。けど意味が分かってしまえば、HypertextつまりhtmlファイルをTransfer伝達するProtocol議定書(作法)って何のことはない「htmをやりとりだよ」って言ってるだけ。。。。(もちろん技術的には難しいのだろうがhttpって言葉の意味はその程度だったのか・・・)
  さて、これをインストールすればいいんですが、まずLANを組んでいたら問題なく立ち上がります。LANを組んでなかったら、あるいは組んでいてもノートパソコンの場合カードを外していたら、TCP/IPがどうたらという文句をいいます。逆にカードを指していたら、他のパソコンに接続しているかいないかは問題ではありません。ですからうち1台しかない、という人も別にもう一台パソコンを買う必要はありません。カードなしでもあるいは設定の仕方では可能なのかもしれませんが、なにぶん素人なので分かりません。(後で考えたらノートパソコンはインターネットにつないでいません。要はTCP/IPが生きていたらいいんだと思います。)
さてそれをインストールします。立ち上げます。でもまだ働きません。
何のこと?
ってんで、説明します。ただし、話を単純化します。上でも「ブラウザがWWWサーバにhtmlファイルを要求し」ってとこで、「こらgif, も jpegもあるじゃろうが」と思った方もいらっしゃると思いますが、それ以上に単純化します。さて、
CGIのプログラムはperlで書きます。.cgiという拡張子をつけます。このプログラムをperlで動かすことは出来ます。例えば
print "Hello World";
という1行だけの hello.cgi というプログラムをperlで動かせば、
Hello World 
と表示されます。でもブラウザでこのhellocgiファイルを読み込むと
print "Hello World";
と表示されるだけです。つまり、単なるテキストファイルとして処理されているのです。
これで分かっていただけるでしょうか? cgiを処理するのはWWWサーバなのです。普通のマシンはブラウザがcgiを要求すると、ほい!とすぐ渡します。渡されたブラウザはそれをテキストとして処理します。おしまい。
ブラウザがcgiファイルを要求する。WWWサーバはそれをperlで処理する。その処理結果をブラウザに渡す。とまあ、そういう仕組みです。
ですから、自分のマシンでは perl が動く、WWWサーバも立ち上げた。まだ駄目なのです。サーバに働いて貰うためには、サーバに接続する必要があります。
  ということで、まず自分のマシンから自分のマシンの中で立ち上がっているWWWサーバに接続します。(気持ち悪い人はマシンを2台買って下さい)
そこで、ブラウザを立ち上げて、http://localhost に行きます。localhost は要するに自分自身ということです。すると

Error 403

このディレクトリのインデックスリストは見られません。


AnWeb/1.17

 
という表示が出ます。なぬ〜!です。設定を見ても素人にはよく分かりません。分からないなりに邪道を見つけるのがわたしの性質で、ラッキー!!みっけ、です。ディレクトリの中身を覗いていたらあるじゃありませんか、それらしいのが・・・。
インストールしたhttpdのhttpd-docsというサブディレクトリの中にある

.www_browsable (wwwがブラウズできるよ)というファイルをhttpdのディレクトリにコピーします。(移動したら今度はhttpd-docsに入れなくなります。)すると:
 

/ のインデックスリスト


 cgi/                             Directory   1999/06/24 22:21:18
 cgi-bin/                         Directory   1999/06/24 22:21:18
 httpd-docs/                      Directory   1999/06/24 22:21:18
 imagemap/                        Directory   1999/06/24 22:21:18
 isapi/                           Directory   1999/06/24 22:21:18
 maps/                            Directory   1999/06/24 22:21:18
 prog/                            Directory   1999/07/04 14:10:08
 Scripts/                         Directory   1999/06/24 22:21:18
 SSI/                             Directory   1999/06/24 22:21:16
 anctl.exe                            50 kB   1998/01/24 16:49:10
 Ansvc.exe                            50 kB   1998/02/01 10:08:20
 errors.log                            2 kB   1999/07/05 01:40:02
 helper.exe                           56 kB   1999/06/05 08:46:22
 httpd.exe                           967 kB   1999/06/06 16:39:26
 httpd.log                            27 kB   1999/07/05 01:40:02
 proxy.dll                           178 kB   1999/06/05 08:46:28
 readme.html                           6 kB   1999/06/06 17:05:12
 Service.dll                          41 kB   1998/01/24 16:49:06

AnWeb/1.17

 

と入れてくれます。私は一応、そこにprogというディレクトリを作って、そこにも.www_browsableを置いて入っていくことにしています。スマートとは言えないやりかたですが、これで設定をつつかずに使えるようになった。httpサーバの詳細を知っている人からみたら「なんちゅう」というやり方かもしれませんが・・・。
 MacのHTTPソフトはどこにあるのか私知りません。まあ原理的には同じことだとは思いますが・・・・。
 

あ〜疲れた。読む方も大変だったかもしれませんが、書く方はもっと・・・。やっぱCGI/Perlの話はやめようかなあ。HTMLに比べて話複雑。
 
 





8←  home  →10