トップページ | 利用規定
  初心者向けミニ講座

カレッヂ
カレッヂ



初めてのCGI

CGIプログラムの設置は「練習」と「経験」が必要な世界です。まず「ごあいさつ」をお読みいただいてから、 まず簡単な学科講習と実技講習をしたいと思います。 このページがその全てではないので、参考書があればそれを片手に、また、他のサイトでも同じようなHOWTOがあると思いますので、併せてご覧くださいね。 みなさんの環境は実に様々なので、一般的なことしかご案内ができません。サーバ管理者(またはプロバイダ)のサポートも受けながら、 少しづつ順番に解決していきましょう。各所に「覚えてください」という表示がありますが、その場面で習得する必要はありません。 そういうことがあるのかと思っていただき、必要なときに習得することを記憶しておけばいいのです。 説明尽くすことができませんので、必要な部分を必要なときに勉強できるようにポイントを押さえられるようにこれを活用してください。


学科講習1 (情報収集)

  • まず確認しておくことがあります。設置しようとしているサーバ(プロバイダから提供されたホームページ域など)に、 カスタムCGIプログラム(要するに手持ちのプログラム)を設置していいかどうかを、サーバ管理者(プロバイダ利用の方はそこに)に確認してください。 禁止されていれば、どうやっても設置することは不可能です。
  • その際、サーバの環境はUNIXかどうか確認してください。 既に開発環境でご案内の通り、当サイトのCGIプログラムはUNIX上によるPerl言語にて動作させるように設計していますので、 もしWin系サーバなど他のOSを使っているサーバではご利用いただけません。正しく言えば、動かないものもあるということになります。 改造すれば動くとは思いますが、当方ではWin系サーバの知識がなく対応版を提供することができませんので、NTサーバへの対応についての参考サイト などを参考にされ、ご自身で対応していただくことになります。
  • 使えることが確認できたら、サーバ管理者(またはプロバイダ)から案内されている注意事項や制限事項を確認してください。 たとえば、sendmailが使えない場合は、電子メールするような機能があっても動作しませんし、知らずに設置してもエラーを発生させる原因にもなります。 この辺は慣れてこないと難しい面もありますので、もし設置に成功しないような場合に再確認することとして覚えておいてください。


学科講習2 (HTML)

  • 既にホームページはお持ちだと思います。少なくとも、簡単なホームページ(HTML)の設置は出来るようにしておいてください。
  • 何故CGIなのにHTMLなのかと申しますと、簡単に言うと、CGIはいろいろな処理をした後にHTMLを出力しているので、プログラムによってはその知識も必要なのです。
  • ホームページ用のファイルを作成するのに、あなたはどうしていますか?ホームページビルダーなどのソフトを使っていますか? もしそうなら、一度使わずにHTML文書が書けるようにやってみてください。Windowsの方なら「メモ帳」を使って書いてみてください。 書き方は参考書が沢山出ています。タグとは何か、どういう書式で書くのかを最低限覚えておいてください。
  • 高度な技は必要ありません。たとえば、<BODY>タグや<FONT>タグなどは、それらの意味と共に書けるようにしてください。 改行は<BR>や<P>タグで、文字の大きさは<Hn>タグ(nは数字)などを使います。
  • 色指定はよく<FONT>タグが使われます。同様にタグ辞典などの参考書で覚えてください。
  • 復習の為に、次のHTMLを書いて適当な名前を付けてファイルに保存してください。ファイル名は半角文字で空白を入れてはいけません。 保存するファイルの拡張子は.html(古いWindows等の方は3文字しか使えないので、.htmでOK)にします。 これは分かりますね?

    (※1)

  • これをお持ちのホームページ用の場所に、いつもやっているように転送(アップロード)して、そのページが次のように表示されるか確認しましょう。 ブラウザのタイトルバーには Hello World ! と表示されていると思います。
  • ついでに、ブラウザで画面のソースの表示をしてみてください。方法がわからない場合はブラウザの説明書をご覧ください。 転送したHTMLファイルが表示されると思います。

    世界のみなさんこんにちは!


学科講習3 (FTP)

  • 話は前後してしまいましたが、転送(アップロード)に使っているFTPソフトは何ですか? いま使っているものでも構いませんが、次に説明する機能、つまり転送モードの選択が出来ないものはCGI設置に向きません。 お勧めというわけではありませんが、Windows用ならFFFTP、 Mac用ならFETCHなどをご利用ください。 使い方はそれぞれの説明書をご覧ください。
  • 次に、転送モードについてです。転送(アップロード)時に使ったソフト(FTPソフトと言います)の画面または説明書を読んで、 「アスキーモード」または「テキストモード」またはその意味(テキスト形式で扱うという意)を持った表現があるボタンまたはスイッチを探してみてください。 さらに、「バイナリモード」または「RAWデータ」またはその意味(バイナリ形式で扱うという意)を持った表現があるボタンまたはスイッチもあると思います。 バイナリ形式とは、ファイルを何もかもそのまま転送するモードで、主に画像ファイルの転送に使います。 もし「自動判別」とか「自動判定」など、オート(自動)で処理するというボタンがあれば、CGIプログラムまたはその関連ファイルを扱う場合には、 これらは使わないようにしてください。本当に自動ではないからです。
  • HTMLファイルはOS(WindowsとかMacとかUnixとか)を問わず表示できるように、 クライアント(ネットスケープとかインターネットエクスプローラとか)となるブラウザでは、転送モードを問わずにどんな環境で送られてきたファイルも、 テキストファイル(文字のファイルのこと。写真などはバイナリファイルです。)であれば正常に表示するようになっています。
  • 今後、CGIプログラムまたはその関連ファイルを扱う場合には、必ず「アスキーモード」を使ってください。 たとえばパソコンがWindowsでサーバがUnixの場合、OSが異なるのでそれぞれファイルの形式(改行コード。行の終わりをつかさどる特殊コード。)が違います。 そこでFTPソフトでは「アスキーモード」を使うことによって、Windowsパソコン上にある例えばHTMLファイルを転送(アップロード)すると、 サーバ側であるUnix上には、Windows形式であるファイルがUnix形式に変換されてから転送(アップロード)することができます。

  • しかし注意することは、あらかじめWindows上でUnix形式に変換して保存できるエディタでHTMLを作成した場合には、 既にUnix形式になっていますから、バイナリモードで転送してもいいことになることは理解できますね? 詳しくは改行コードについてをご参照ください。


学科講習4 (パーミッション)

  • UNIXには、ファイルやディレクトリ(フォルダとも呼ぶ)ひとつひとつに、(オーナー・グループ・その他誰でも)にどのような権限(読む・書く・実行する)を与えるかを設定することになります。 あなたが転送したホームページ用のHTMLファイルも例外ではありません。でも何もしていなくてもホームページの設置はできましたよね。 それはデフォルト(初期の状態のこと)で既に「その他誰でも」に対して「読む」ことを許可する権限(以下、パーミッションと呼ぶ)が与えられているからです。
  • ここでまた、設置するサーバによってその権限の与え方が異なります。 多くのサーバでは、ホームページオーナーのあなたもその他の方も全て「その他誰でも」に該当します。 ホームページを見るときは、たとえ自分であっても、立場は他の全ての方と同じとなります。 一部のセキュリティ意識の高いサーバでは、オーナーの権限でCGIの実行を行うようになっている場合もあり、 HTMLや画像のパーミッションと、CGIプログラムやそれに付随するデータファイルなどのパーミッションの与え方は、 サーバ管理者の指示に従ってください。こちらではこれにしてください、という言い方をすることができませんので、 あくまでも一般的な値をご案内します。
  • 一般にパーミッションの設定(変更)はFTPソフト上で行うことができますが、 まれに、Telnetを使わないとできないサーバもあります。こうなると初心者の域では難しいと思いますので、直接サーバ管理者にお尋ねください。
  • ファイルやディレクトリのパーミッションの設定(変更)方法は、ご利用のFTPソフトの説明書を読んでください。
  • 当方では3桁の数字でパーミッションをご案内します。さらに詳しいことはパーミッションについてをご参照ください。


実技講習1 (準備)

  • CGIプログラムの設置には、CGIプログラミングの知識は必ずしも必要はないのですが、 初期設定ファイルに何か設定する場合は、結果的にはCGIプログラムを直接いじることと同じなので、 扱いに注意するためにも、多少の知識技術は習得しておいた方がいいでしょう。 これらをさらに勉強することで、表示結果などを自分で書き換えていったりできるようになります。
  • では実際に簡単なCGIプログラムを設置してみましょう。次の11行のプログラムをファイルに保存してください。 CGIプログラムファイルの拡張子は一般に.cgiですので、test.cgi でいいでしょう。まれに、CGIプログラムの拡張子をこれ以外に指定される場合もありますが、 当サイトのプログラムは.cgiで使うように前提しておりますのでご注意ください。
  • 注意することは、CGIプログラムファイルの「1行目の左端から」#!/usr/local/bin/perl を記述することです。 #! と /usr/local/bin/perl の間は空白があっても構いません。空白とは半角スペースのことで、全角スペースを""や''やコメント行以外の場所に入力してしまわないように注意してください。 うっかり書いてしまっても見えないので、エラーの原因となってもなかなか見つからなくなります。
  • ここでは /usr/local/bin/perl と書かれていますが、これは設置するサーバの環境に合わせてください。 この意味は、/usr/local/bin という場所(Windowsで言えば、C:\program\cgiという感じ。)に、perlという名前のPerl言語を実行するためのソフトがあるので、 それをこのファイルの実行に使う、という宣言文です。サーバによっては、/usr/bin/perl かもしれませんし、/usr/local/gnu/bin/perl5 かもしれません。 これはサーバ管理者に聞いてください。当サイトからダウンロードしたファイルの1行目に #! から始まるこの宣言文があれば、 特に説明が無くても、設置するサーバに合わせて書き換えてください。

    (※2)


  • 実技講習2 (設置)

    • 出来あがった test.cgi は、あなたがいつもホームページファイルを転送(アップロード)するようにして、 CGIが実行できる場所に設置してください。 このときに重要なのが「アスキーモード」で設置することです。 これをバイナリモードで転送しただけで動作しなく(サーバエラーとなる。)なります。
    • CGIが実行できる場所とは、サーバによって指示があったり、ホームページエリアならどこでもOKだったり、 どこでもいいけれども設定(※3後述)が必要だったり、これまた実に様々ですので、サーバ管理者にお尋ねください。 大抵はプロバイダのホームページのどこかに案内があるとは思います。 もし、CGIとHTMLが別の場所に配置するように指示されているようなサーバ(有名どころではHi-Hoとか。)の場合、 HTMLや画像とCGIプログラムが混同しているプログラムの場合は、初心者には設置は難しいかもしれません。 プログラムによっては改造しないと設置できないもの(そういう構成に対応していないもの)もあります。 もしあなたが初心者でCGI設置を前提に考えているのなら、プロバイダ選びに設置しやすい環境も一考するといいでしょう。
    • 次に test.cgi のパーミションを設定します。これは実行した結果を表示させなければなりませんので、 「その他誰でも」に「読むと実行」を意味する 5 を与えます。この辺の詳しいことを知りたいのであれば、 パーミッションについてをご参照ください。ここでは、755 を設定してください。 前述の通り、サーバによっては、705 や 700 にした方が安全であるという指示を出している場合もあります。
    • これで設置手順は完了です。実行して動作を確認してみましょう。ページのアドレス(URIとかURLというもの)は分かりますね。 ホームページを作っている方であれば、どのファイルがどういうアドレスで表現されるかは分かると思います。 仮に、http://somesohere.host/~user/somewhere/ に位置する場所に test.cgi を設置したのであれば、 http://somesohere.host/~user/somewhere/test.cgi ですね。ブラウザからアクセスしてみてください。 先ほどのHTML設置実験と同様に「世界のみなさんこんにちは!」って表示されましたか? 実は、※1も※2も、結果は同じなのです。直接表示するか、CGIの実行結果として表示するかの違いです。
    • 成功していれば、実技講習4へお進みください。もちろん勉強のために、実技講習3を読むことはいいことです。 設定ファイルが別な事情で必要になることがあるからです。


    実技講習3 (サーバ設定)

    • 実行したらプログラムがそのまま表示されてしまった方はいませんか?(※3) そういう方は、サーバ管理者からCGIの実行に関して何か指示がないかどうか確認してください。 一般的には、デフォルトでCGIの実行ができないようになっていて、設置する方が自分でCGIの実行ができるように設定できることが多いようです。 CGIプログラムを設置したのと同じディレクトリ(それよりも上であればいいのですが、説明が難しくなるので、ここでは同じ場所ということにします。)に、 次のファイルを .htaccess という名前で設置してください。ピリオドから始まるファイル名はUNIXでは設定ファイルの意味としてよく使われます。 もしピリオドから始まるファイルが作れないとか、どうしても .txt などの拡張子がついてしまうという場合は、 とりあえず適当な名前で作成したら、FTPソフトの名前変更機能で .htaccess に変更すればいいでしょう。 簡単に言うと、.cgiのついたファイルはCGIプログラムとして認識し、実行結果をWWWサーバに渡すように処理せよ、という指示です。

    • 注意することは、この設定は、Apacheという有名なWWWサーバソフトでの設定の話だということです。 この他のサーバソフトで動いている場合は、サーバ管理者に聞いてください。また、Apacheだとしても、 そのバージョンによっては設定の方法が違う場合もあります。

      ExecCGI とするところを、+ExecCGI にした方がいい場合もあったり、+ExecCGI にできないサーバなのに設定してしまうと、 サーバエラーになってしまったりする場合もあります。サーバエラーというのは何もプログラムのエラーだけでは発生しないので、 一度サーバエラーになると、私でも原因究明はなかなか大変なのです。

      たとえば、この講座では扱っていませんが、SSIを有効にする場合の設定で、

      AddType text/x-server-parsed-html .shtml をする場合と、

      AddHandler server-parsed .shtml

      が必要な場合もあり、重要な設定にもかかわらずこの辺のことになると専門的になりますから、 サーバ管理者のサポートを受けてください。

    • もう少し情報を知りたい方は、CGIやSSIを使うための設定は?や諸参考書を見てください。


    実技講習4 (プログラム設定)

    • さて、ここまででCGIファイルの設置や転送やパーミション設定などは習得できたでしょうか? 基礎としては最後の難関?!です。
    • 殆どのプログラムには、初期設定するところがあります。 既に書いたとおり、プログラムを直接いじることなので、多少のPerlプログラミングの知識が必要です。 殆どの方は「見様見真似」で設定していると思いますので、ここで少し勉強してみましょう。

    • 例えば次のような初期設定があったとします。#から始まる文字列はコメントで、プログラムの動作に影響を与えません。

    • いずれも、$変数 に = の右側の値を代入する、というプログラムです。EとFはその変形型です。
    • 1つの例について2つの場合を想定して紹介しています。 まずAとBを比較してください。Aは''で囲ってあり、Bは""で囲ってあります。 ''はその中に書かれた内容を評価しない、つまりそのまま表示するということを意味しています。 ""はそうではないので、もしその中に$で始まる変数を入れてしまうとそこにその値が代入されてしまいます。 また、""内に"を入れたい場合はBのように、中に記述される"にはその前に\記号を置き、\"というように書きます。 \はその次の文字を本来の意味を消すための指示子として働くことになります。 また、''の中に'を入れたい場合、\'にしても駄目です。なぜなら、''の中は評価されないので、消すための\は意味を持たず、そのまま\と表示されるどころか、 ''の中に'が入ると文法エラーとなってしまうわけです。この場合は、''で囲まれている全体を""に変更します。
    • CとDの違いは、AとBと同じです。""の方では「申」の直後に\記号がありますね。 当サイトのプログラムは既にご案内の通り、SJISで書かれていて、別段の指示が無い限りそのままSJISで設置するようになっています。 そこで文字化けという不都合なことが起きます。どうして起きるかとか、「申」のほかに影響を受ける文字は何かなどは、 文字化けについてを読んでください。""で囲んだ場合にこれを回避するには、その文字の直後に\記号を起きます。 ''で囲んだときは必要ないのはもう分かりますね。
    • さらに、CとDはメールアドレスの@マークの前に\記号の有無に違いがあります。これはPerl5で影響が出るものですが、 昨今のPerlは大抵がバージョン5だと思いますので、このように@マークを回避しておいた方が無難です。
    • EとFを見てください。これは複数行を代入する手法です。 この場合はこれまでと同じように"EOF"と'EOF'の違いなのに、中身の"については\"になっていません。 この手法の場合は必要ありません。@記号と文字化け対象文字については、\記号を使って措置してください。
    • 以上の方法を十分習得して設定をしてください。 もし不安なら、まずはこういう設定は何も書き換えずに、その他の設置に必要な設定だけをして設置し、 動作を確認してから、1ヶ所ずつ書き換えては実行し、そうすればそこで書き換えたことが何か違っていたということが分かります。 もし書きかえるところをすべてやってから設置してみて動けばいいですが、そうではない場合はどこで間違えたのかが分からなくなってしまいます。 こういう方法もデバッグの1つのやり方です。



    最後に

    • さて、どうでしたか? 殆どプログラムは、初期設定などがあれば必要最低限だけの設定をしたら、とりあえずは動くような形にして公開しています。 それには、設置構成にあるダウンロードファイルに含まれていない他に必要なディレクトリやファイルを用意し、 説明書に書かれている設置構成に従って設置し、パーミッションを設定して。説明書にはこのこと程度しか書いていませんが、 それしか書けないというのも現状です。あとは、設置する環境に左右されるので、いままでの講習で習得したことを間違いなく行って設置したと仮定して、 それでもしサーバエラーなどの、原因不明のエラーメッセージが出てしまった場合は、これは私でもなかなかその原因を見つけることが難しいことがあるなど、 とても大変な作業になります。
    • 簡単なものから設置練習し、再度設置失敗したものに兆戦してみるとか、遊び感覚でCGIの世界を楽しんでみてください。 それには、サポート掲示板CGIメーリングリストなどを是非活用してください。
    • 個人または趣味でホームページを開設している場合はそれでもいいかもしれませんが、もし仕事でとか、早急に設置したいという場合は、 やはり設置を請け負ってくれる業者やお友達に頼んでやってもらうことも重要です。
    • 以上書いた講習内容はほんの基礎に過ぎません。 プログラムによっては実に様々なこれら以外のやり方や技術を要することになります。 当サイトは極端な話、プログラムだけを提供しているようなものなので、是非インターネットという有用な財産を利用しまくってください。 私も分からないことはまだまだ沢山ありますが、殆どはホームページを探す旅に出て、実に沢山の専門家がいることも分かり、 いろいろな情報は発信されていますので、これらを利用しない手はありません。
    • では、CGIの世界をお楽しみください。そうそう、CGIの設置が「目的」ではなく、CGIがホームページ運用の「手段」であることが大切だと思います。 設置できて終わりではなく、掲示板などを設置してそれを使って初めていろいろな方との出会いを演出してくれるものと信じます。^^;

  • Powered by CGI RESCUE(R)