PerlでCGI入門 1.1 Hello, World!
Start Perl
2011年2月
では今回から早速コードを動かしてみましょう。まずはおなじみの Hello, World! から。
環境構築
Mac OS X
最近のMac OS Xの場合、環境構築は4クリックで完了します。画面はSnow Leopardですが、それ以前でもまあまあ同じように設定できるはずです。
これだけカンタンもう終わり! ちなみに画面では「ファイル共有」がオンになっているけどここはオフでいいです。
あ、あとエディタもいれておいてください。Macおすすめのエディタは文字コード、改行コードも簡単に指定できて色づけもしてくれるCotEditorですかね。miもなかなか。
Windows
Windowsの場合、「インストールの巻」あたりを見て頑張ってください。リンク先のページではHello, Worldまで動かしちゃってるので、次のセクションに進んでください。
エディタも必要です。Windowsの場合おすすめはサクラエディタかTeraPadですかね。
HTTPレスポンス
むつかしい説明になってしまうところはあえて説明しません。でも知りたい! って人は適当に調べてね。
たとえばアナタが pear.jp のページを見たいと思ってブラウザに「 http://pear.jp/ 」と入力したとします。すると、あのねちょうのページが華麗に表示されます。これは、アナタのコンピュータとpear.jpの会話を日本語訳すると、
アナタのコンピュータ「pear.jpのページちょうだい(リクエスト)」
pear.jp「はいどうぞ!(レスポンス)」
というやりとりを勝手に行っています。この「はいどうぞ」が今回のテーマ。1回のリクエストに対して1回のレスポンスが行われるのがHTTPプロトコルです。つまり、「ちょうだい(リクエスト)」に対して無視はありません。では「ちょうだい(リクエスト)」に対する「はいどうぞ(レスポンス)」の中身を見てみましょう。実際には、
Content-type: text/html
<!DOCTYPE html>
<html>
<head>
以下省略。
というデータが送られてきます。最初に謎の1行があり、1行空白が空き、そしてよく知ってるHTMLソースが始まります。アナタのコンピュータのブラウザはこの空白の行を見つけ、その後をHTMLとして解釈して表示していることになります。
では、空白の行以前のものは何でしょうか。これは、レスポンスヘッダと呼ばれるもので、Content-typeは文書の種類を教えます(※実際にはもっとたくさんのヘッダが送られてきますが、この講座の目的から気にしないことにします)。この例では「この文書はHTML文書だよ」と教えています。とりあえず詳しく知りたくなったら調べてもらうとして、今日はこれだけ使えるようになってください。HTMLではここんとこは意識しなくともいいんですが、CGIを作るにあたってはこのレスポンスヘッダ、区切りの空白の行の部分も考えてやる必要があります。
今回のソースコード
今回のみソースコードを提示します。次のコードを「Macintosh HD→ライブラリ→WebServer→CGI-Executables」に「sp11.cgi」という名前で保存しましょう。
#!/usr/bin/perl --
print("Content-type: text/html\n\n");
print("<html><body>Hello, World!</body></html>\n");
- 1行目はまだ気にしなくていいです。
printは、うしろのを表示させます。;は文の終わりを表します。\nは改行です。\n\nは2回改行することになり、つまり空白の行ができることになります(ヘッダとボディの境界とみなされ、残りがHTMLと解釈されます)。
パーミッション(アクセス権)
MacはUNIXなので、ファイルシステムはWindowsとはだいぶ違います。主な特徴としてはざっくり以下が挙げられます。
- ファイルやディレクトリに「所有者(オーナー)」という概念がある
- ファイルやディレクトリごとに、誰に何のアクションを許すか(読み、書き、実行)を設定できる
とりあえずプログラムを実行するためには、実行権限を与えましょう。
- 「アプリケーション→ユーティリティ→ターミナル.app」を起動
cd /Library/WebServer/CGI-Executables
と入力してEnterキーを押す。次回以降、Enterは書きません。そしてターミナルに入力するコマンドは、頭に$をつけて書き表すことにします。
cdは、そのディレクトリに移動するコマンドです。$ ls
lsとすると、ファイルの一覧が表示されます。ここに sp11.cgi が現れることを確認します。$ ls -l
うしろに-lをつけると、詳細情報まで出ます。最初に
-rw-rw-r--と表示されていますが、この10桁の文字にはそれぞれ意味があります。とりあえず今日は、「rが読み」「wが書き」「xが実行」権限と覚えましょう。これで sp11.cgi にはどうやら読み書き権限はあっても実行権限がないことが分かります(かなりざっくりしてるので知りたい人は「パーミッション」あたりで調べてね)。$ chmod +x sp11.cgi
chmodはファイルのパーミッションを変更します。+xは、実行権限をプラスします。その後に対象のファイル名を書きます。これで sp11.cgi が実行可能となりました。$ ls -l
で、ちゃんとxがついているか確認します。
実行テスト
ブラウザから http://127.0.0.1/cgi-bin/sp11.cgi にアクセスすると実行できます。うまく動いたかな? どうやら、「Macintosh HD→ライブラリ→WebServer→CGI-Executables」のディレクトリに投入したファイルが「http://127.0.0.1/cgi-bin」に対応しているようですね。次回は環境変数のあたりをお話しします。では。
エラーの見つけ方
うまく動かないときは、エラーログを見てみましょう。エラーログ自体は /private/var/log/apache2/error_log にあるのですが、これはFinderからは見えないようになっています。ということでターミナルですターミナル。
$ tail /private/var/log/apache2/error_log
でエラーを見ることができます。時刻がついているので「いつ発生したエラーか」をヒントにどれが該当するエラーか探しましょう。エラーメッセージをGoogle検索とかすると解決することが多いです。
tail は、そのファイルの後ろから10行を表示するコマンドです。ログファイルは後ろに追加されていくので、これで最近の分を表示することができます。
WindowsのAnHttpdを利用した環境でも同様にどこかにエラーログができている(場所は設定の中にあるはず)ので、それを調べてみればいいかもしれません。
それでもどうしてもできない人はコメントとかでサポートも受けます。が「できません」では困ります。どこまでできてどこができないかを明確にして、「できない」という結論に至った論拠を書くよう心がけてください(どういうエラーが出た、など)。
Comment
[...] This post was mentioned on Twitter by AnyEvent::PerlIsm, ぺありん. ぺありん said: あのねちょう: Start Perl 1.1 Hello, World! http://pear.jp/a/perl/start/1-1-hello-world/ [...]


