Powered by SmartDoc
情報技術基礎のページへ

11.1 CGI による動的なウェブページ

cron による実行では、指定した時刻にコマンドを実行してくれます。例えば、スケジュール帳から今日の予定の部分を抜き出し、HTMLに変換してファイルに保存するようなスクリプトがあるとしましょう。これを毎朝実行すれば、自分のホームページの「今日の予定」を自動的に更新できます。

しかし、通販サイトで合計金額を表示するような場合は、定期的な更新ではなく、ユーザがボタンを押した瞬間にスクリプトを実行しなければなりません。ユーザがボタンを押したという情報は、HTTP を使ってウェブサーバに送られます。したがって、ウェブサーバに「ユーザがこのボタンを押したら、このスクリプトを実行する」という設定をしなければなりません。

ウェブサーバがスクリプトを実行する仕組みをCGI(Common Gateway Interface)(19)と呼びます。URLがウェブサーバに送られてくると、通常は対応するファイルの内容が送り返されますが、CGIを使うように設定されていると、対応するスクリプトを実行した結果が送り返されます(図11.1[通常ファイルと CGI の比較])。

図 11.1 通常ファイルと CGI の比較

練習問題

以前にcron で実行したスクリプトを、今度はCGIで実行してみましょう。

  1. CGIスクリプトは、/home/t00000xx/public_htmlディレクトリの下になければなりません。emacs/home/t0000xx/public_html/myscriptというファイル(~/public_html/myscriptと省略します)を作り、以下の内容を書き込みなさい。

    #!/bin/sh
    date
    /pub/sfc/ipl/sfcnews
    

    1行目は、このスクリプトはshコマンド(実体は/bin/sh)で実行しなさいという指示です。

  2. 間違いなく実行できるか確認しなさい。

    % cd /home/t00000xx/public_html
    % sh myscript

  3. このファイルをブラウザで見てみましょう。http://web.sfc.keio.ac.jp/~t00000xx/myscriptというURLを指定しなさい。何が表示されましたか?
  4. SFCのウェブサーバでは、CGIスクリプトは、ファイル名の最後を.cgiにする約束になっています。myscriptというファイル名をmyscript.cgiに変更しましょう。ファイル名の変更にはmvコマンドを使います。

    % mv myscript myscript.cgi

    注意:emacsmyscriptを開いたままだと、後でややこしいことになるので、閉じておきましょう。現在編集中のファイルを閉じるには、アイコンなら「×」の形、メニューなら[File]->[Close (current buffer)]、キーボードならC-x kと押してKill Buffer:と訊かれたらEnterを押す、です。

  5. 変更したファイルをブラウザで見てみましょう。http://web.sfc.keio.ac.jp/~t00000xx/myscript.cgiというURLを指定しなさい。何が表示されましたか?
  6. CGIスクリプトとして実行するには、そのファイルのアクセス権が実行可能でなくてはなりません。myscript.cgiを実行可能にするには、次のようにします。

    % chmod +x myscript.cgi

  7. 実は、myscript.cgiの実行結果は、そのままではHTTPの規則に違反しています。HTTPでレスポンスを返すときは、必ずヘッダ(20)が必要です。ここでは詳しく説明しませんが、ヘッダを出力するためにemacsmyscript.cgiを編集し、次の2行目と3行目を書き加えてください。
    #!/bin/sh
    echo "Content-Type: text/plain;charset=iso-2022-jp"
    echo
    date
    /pub/sfc/ipl/sfcnews
    
  8. 実行結果がどうなるか、確認しておきましょう。echoは、その後に書いた文字列をそのまま表示するだけのコマンドです。

    % sh myscript.cgi

  9. 変更したファイルをブラウザで見てみましょう。http://web.sfc.keio.ac.jp/~t00000xx/myscript.cgiというURLを指定しなさい。何が表示されましたか?
  10. 最後に、rmコマンドで実験に使ったファイルを消しておきましょう。

    % rm myscript.cgi

スクリプト言語

上の練習問題ではシェルスクリプトを使いましたが、実際にはCGIでシェルスクリプトを使うことは、次のような理由から、あまり多くありません。

それでは何を使うかというと、PerlやPHPという言語がよく使われます。これらの言語は、スクリプトを手軽に書けるように工夫されているので、スクリプト言語と呼ばれます。Perlは、CGI以外にも広く使われている代表的なスクリプト言語です。PHPは、ウェブサーバやデータベースと連携して、ウェブアプリケーションを簡単に作れるので、急速に普及しています。

大規模なサイトで複雑なプログラムが必要な場合は、スクリプト言語では力不足なため、C++やJavaという汎用言語が使われます。

  1. 本来のCGIはウェブサーバと外部プロセスのインターフェースですが、ここではウェブサーバ内部でスクリプトを実行する場合も含めてCGIと呼ぶことにします。
  2. HTMLの<head>とは別のものです。
  3. シェルだけが特にセキュリティホールができやすいわけではありませんが、Perlなどにはセキュリティホールをできにくくする機能が備わっているので、それと比較しての話です。