超簡単 MacのローカルでCGI

'01.1.30 ('02.5.21更新)

Webサーバを立ち上げて、CGI実行環境を作ってとか、とかく難しく考えがちですが、実はMacだと簡単にできるのです。(OS 9までの方法です。OS Xについては別ページで)

  1. MacPerlをダウンロード
  2. TCP/IPコントロールパネルを設定
  3. Web共有コントロールパネルを設定
  4. MacPerlでプログラムを開いて、CGIとして保存
  5. ブラウザから呼び出して実行

これだけです。あとはMacPerl用にプログラムの手直しですね。(これが一番面倒だったり)

(ここでは取り上げませんが、Mac上ではAppleScriptのCGIも動きます)


MacPerlをダウンロード

Mac用のPerlを使います。日本語に対応したMacJPerlというのもありますが、一般的にインターネット上のサーバの多くで使われる、jcode.plやJcode.pmを使った日本語対応とは相容れないので、ここでは使いません。

下記のどちらか。*にはリリースナンバー(1〜)が入ってます。

TCP/IPコントロールパネルを設定

すでにTCP/IPによるLANに接続していて、CGIをLANに公開してもいいならここは設定しません。
メニューの設定.../複製...で新しい名前 (localhost) をつけた新しい設定を作ります。

Ethernet,手入力,127.0.0.1,255.255.255.0

127.*.*.*はローカルのスタンドアロン専用IPアドレス(ループバックアドレス)。
経由先はAppleTalkでも可能です。
ここをインターネットの設定のままだと全世界に公開することになります。

Web共有コントロールパネルを設定

Webページ,default.html,開始クリック

開始ボタンをクリック。
OS (8以上) をインストールしたまま削除・移動してなければMacintosh HD (起動ディスク) 直下に「Web ページ」フォルダがあります。適当なフォルダに変えてもかまいません。ここがWebサイトのルートディレクトリになります。
ここの「ホームページ」はディレクトリを指定した時に表示されるページです。インターネットだと「index.html」の方が一般的ですね。変える場合はあらかじめHTMLのページを作っておきます。「なし」にすればディレクトリ内のファイルリストを表示します。

クリックの結果こうなる

インターネットに接続する時は「停止」しておかないと全世界に公開ってことになります。LAN接続の場合はアドレスを覚えておきます。

MacPerlでプログラムを開いて、CGIとして保存

Tyep:CGI Scriptで保存

MacPerlのメニューのEdit/Formatで日本語フォントを選べばスクリプト中の日本語を表示できますが、Shift JISで記述してある場合だけです。

ブラウザから呼び出して実行

http://127.0.0.1/test.cgi

LAN接続ならWeb 共有に表示されるアドレスでアクセスします。
アプリケーション形式に保存されたスクリプトファイルとMacPerlが起動し、CGIが実行されます。

MacPerl用にプログラムの手直し

UNIX用のプログラムを動かすなら、手直しが必要になるでしょう。ごく基本的なUNIXのPerlとMacPerlの違いを並べてみました。

比較項目 UNIX Mac
プログラムファイルの改行コード LF CR
プログラムの中の改行コードの意味 \nはLF \nはCR
パスの区切り / : (HTTPで呼び出すファイルの区切りはUNIXと同じ)
ルートディレクトリ /から始まる 無い。ディスク名からのパスならある。
カレントディレクトリ . :
カレントディレクトリにあるファイル ./hoge.txt かパスが通っていれば hoge.txt :hoge.txt と hoge.txt
一つ上のディレクトリ ../ ::
二つ上のディレクトリ ../../ :::
Perlへのパス 1行目に記述 なくても平気
$ENV{PATH_INFO} hoge.cgi/path/info hoge.cgi$/path/info
CGI名直後に$必要
CGIのパスの?以下の引数データ shiftや@ARGVからでも取り込み可能 $ENV{QUERY_STRING}のみ
Perlのバージョン 5.005か5.6が多い UNIX版の5.6.1相当(5.6.1)か5.004相当(5.2.0r4)
symlink関数 リンク先は実在しなくてもよい。 存在しないファイル、ディレクトリのリンク(エイリアス)は作れない。
flock関数 使えない環境もある 使えない。Mac独自のロックなら可能。

UNIXのPerlとMacPerlのスクリプトの差異を解消するために、Mac::FileSpec::UnixishやFile::BasenameやFile::Specというモジュールが使えます (MacPerl5.6.1のlibフォルダに.pm拡張子のファイルが入ってます)。詳細は、それらのモジュールファイルをMacPerl付属のShuckで開いて説明を読みましょう。