TOP > スクリプト制作メモ > CGI初心者への基礎知識
CGI とは、Common Gateway Interface の頭文字をとったものです。
何かのプログラミング言語と誤解されがちですが、CGI自体はプログラミング言語ではなく、アクセスに対してサーバで実行された結果を返す仕組みを指します。
CGIは、ホームページを楽しくする要素のひとつですが、設置や運用にはCGI以外のPCやアプリケーションやネットワークの基礎知識が多少必要です。
ここでは、配布CGIをクライアントPCからサーバに転送して設置、運用していく上で必要になるそれらの基礎知識を簡単に紹介してみたいと思います。
*サーバ管理はきちんとした人がやっていることが前提です。



≫OSによる違い

ほとんどの人はウィンドウズを使用していると思いますが、ウェブサーバの動いているパソコンの多くはUNIX系の OS です。

ウィンドウズとUNIXでは、いろいろと違いがあります。
  • 根本的に
    ウィンドウズはNT/XP系を除いて個人使用を目的にしていますが、UNIXは基本的にネットワークサーバとしての運用を目的に作られています。
  • 文字コード
    ウィンドウズはシフトJISですが、日本国内のUNIXはEUCであることが多いようです。ただ、最近はどちらもUnicodeへの対応が進んでいます。
  • 改行コード
    ウィンドウズは \r\n ですが、UNIXは \n です。実際はもっと細かい解釈が必要ですがここでは省略。
  • ファイル関係
    ウィンドウズでフォルダと呼ぶものを、UNIXではディレクトリと言います。ウィンドウズではファイル名に漢字を使いますが、UNIXではあまり使いません(一応使えますけど)。
他にも細かい違いがいろいろとあるので、ウィンドウズでCGIを編集してUNIXに設置する場合、ウィンドウズ上でコードを編集できるようにするとか、ローカルにテストサーバを作るなどの工夫が必要です。

≫圧縮と解凍

複数のファイルをひとつのファイルにまとめたり、大きなサイズのファイルを小さくしたりすることを圧縮と言います。圧縮されたファイルは、圧縮ファイルとかアーカイブとか言ったりします。

インターネットで配布されているCGIの多くは、複数のファイルをダウンロードする手間を省いたり転送量を減らす目的で圧縮されています。

圧縮ファイル(アーカイブ)には以下のようにいくつかの種類(形式)があります。
圧縮形式拡張子解説
LHA.lzh日本では最もメジャーな圧縮形式
ZIP.zip世界的にメジャーな圧縮形式
RAR.rarヨーロッパでメジャーな圧縮形式
GCA.gca高圧縮率で有名な圧縮形式
CAB.cabマイクロソフト製圧縮形式
TAR.tar.gzUNIX系でメジャーな圧縮形式
SIT.sitマックでメジャーな圧縮形式
この他にもたくさんあります。興味がある人は検索エンジンなどで調べてみましょう。

圧縮されたファイルを元に戻すことを解凍と言います。

圧縮・解凍を行うには専用のソフトがあります。ソフトによって圧縮・解凍ともに行えるものから解凍専用のものまであります。また、対応している形式も様々ですので、事前に良く調べておきましょう。

Windowsなら LhazStuffIt Expander のふたつがあればほとんどの形式を解凍できます。

圧縮作業はソフトにより様々な手順がありますが、解凍作業はほとんどのソフトでドラッグアンドドロップするだけです。詳しくはソフトのページやヘルプを一読してみましょう。

CGIを設置する上での解凍のコツは、ディレクトリ(フォルダ)とファイルの位置を保ったまま、空ファイルもそのまま解凍することです。特にCGIでは、データファイルを使用するために空ファイルを用意しますが、空ファイルを解凍時に削除してしまう設定の解凍ソフトもあったりするのでチェックしましょう。

≫テキストエディタ

ウィンドウズのメモ帳は基本的にシフトJISという文字コードで編集します。XPからはUnicodeでも編集できるようですが、例えばEUCやJISという文字コードで書かれたテキストは文字化けしてしまいます。

CGIをダウンロードして解凍し、ファイルを編集しようとしてメモ帳で開いたら、日本語部分が文字化けして編集どころではないという事態を経験したことがある人もいるかと思います。これは、CGIがシフトJIS以外の文字コード(多くはEUC)で書かれているために起こる現象です。

配布CGIでは、この辺の事情を考慮してメモ帳で編集できるようCGIファイルが予めシフトJISで書かれていたりもしますが、UNIXで基本的にEUCが使われるということと、CGIで行われる処理の都合などでEUCコードで書かれたCGIも多くあります。

CGIを設置/作成などしていくなら複数の文字コードに対応したテキストエディタを使用しましょう。

実は、CGIだと文字コード以外に改行コードも微妙な問題をはらんでいたりします。これもウィンドウズとUNIX系の違いと関連してくるのですが、複数の文字コードに対応したテキストエディタは、たいてい改行コードに関しても柔軟に対応しています。

と、いうわけでおすすめのエディタは、MKEditorです。

MKEditorの利点は、何と言っても複数のファイルをタブで切り替えながら編集できるということにつきます。CGIの初期設定ファイルと実行ファイルをタブを切替ながら編集するといったことができて便利です(2つ3つのファイルなら複数のウィンドウが開くタイプのエディタで同時に開いて編集しても気にならないかもしれませんが、私の場合10前後を平気で同時に開くのでタブ型じゃないとやってられません)。
もちろん、文字コードや改行コードは読み込み時には自動認識してくれますし、文字列の検索や置換機能もあり、grepもあります。充分すぎる高機能を備えていて“無料”というのは信じられません。

≫FTP

FTPとはFile Transfer Protocol の頭文字をとったもので、ネットワーク接続されたコンピュータ間でファイルをやりとりする仕組みです。

FTPは、CGIでなくてもHTMLファイルをウェブサーバスペースに転送する際に使用していると思うので使ったことはあると思います。

FTPを行うにはFFFTPなどのソフトを使用します。

通常の転送作業はHTMLファイルなどと同じです。ただし、CGIを設置する際には「パーミションの設定」という重要な作業があります。

UNIX系OSのディレクトリやファイルには、[オーナー/グループ/その他]という3つのユーザ分類についてそれぞれ[読み/書き/実行]という3つの権限を設定できるようになっています。これは、ネットワーク上で共有しているディレクトリやファイルを一部の人にだけ読めるように、または実行できるように、などの設定を可能にするための仕組みです。

パーミッションの設定とは、このディレクトリやファイルに対して権限を設定する作業です。

それぞれのディレクトリやファイルをいくつに設定するかという情報は、配布CGIの場合たいてい解説ドキュメントなどに記されていると思います。ほとんどの場合はその解説書の設定どおりで良いのですが、たまに上手くいかないことや、もっと最適な設定があることがあります。

なぜなら、パーミッションの設定値は、サーバによって癖が多少有るからです。これは本当にサーバによってまちまちなので、詳しくはサーバ管理者の公開しているパーミションの設定ドキュメントなどを探してチェックしてみましょう。

ちょっと細かい話をすると、SuExecという環境にあるウェブサーバでは、例えば 0755 と設定することになっているCGIファイルを 0705 という設定で動いたりします。

パーミションの設定によって権限を与えるというのは、ともするとセキュリティホールの原因にもなりかねないことで、最低限の権限のみを与えた状態がベストと言えます。従って、0755 よりも 0705 の方がセキュリティ的には信頼度が高くなります。ただ、これはサーバの設定がからむ部分なので一概には言えません。

ちなみに、SuExec環境ではむやみに権限を与えてもCGIが正しく動きません。例えば、0777 に設定されたディレクトリ内ではCGIが動きません。初心者にはちょっと落とし穴かもしれません。

パーミションの設定はサーバの設定などをチェックして適切に。

≫telnet SSH

telnetとは、ローカルのパソコンからネットワークを通じてリモート(遠隔地)のサーバにログインして様々なコマンド(命令)によりファイル転送やディレクトリ作成などの作業をするためのものです。SSHはやれることはtelnetとほぼ同じですが、ローカルからリモートへの通信内容が暗号化され安全なやりとりが可能です。

ウィンドウズなどはその名の示すとおりウィンドウを開いてグラフィカルな環境でマウス操作することが多いと思いますが、telnetは、DOS環境のようにテキストでコマンド(命令)を打ち込んでパソコンを操作します。

CGIを設置/作成する上でtelnetが便利なのは、Perlスクリプトの文法チェックやエラー行を捕捉することができる点です。

間違ってはいけませんが、CGIの実行テストは共有サーバでは行わないように。CGIが暴走したりセキュリティホールを作り出したりすると共有しているまわりのユーザはもとよりインターネット全体に迷惑がかかる事態をも招きかねません。

CGIの実行テストはローカルに立てたサーバで。という前提として、

ローカル環境と実際に設置するサーバとの環境の違いでエラーが出る場合など、telnetでの文法チェックは非常に便利です。

コマンドは
#telnet >perl -wc CGIパス
です。


文法が正しければ Syntax OK と出ます。

実はSyntax OK と出てもエラーが100%無いわけではないのですが、エラーがあればその間違っている行番号を示してもらえるので便利です。

telnetやSSHはサポートされていないウェブスペースやレンタルサーバも多くあります。配布CGIを改造したり、オリジナルでCGIを作成しようという人は、なるべくtelnetかSSH環境のあるサーバを選んでおいた方がいいかと思います。

★Telnet/SSH 最低限のコマンド集

コマンド名解説
lsディレクトリの内容を表示します。[ ls -l ]とすると、もっと詳しく表示されます。
cd ディレクトリディレクトリを移動します。ひとつ上に戻る時は [ cd ..]。[ cd ] だけ打つとホームに戻ります。
pwd自分のいるディレクトリパスを表示します。
touch ファイルファイルを新規作成します。
mkdir ディレクトリディレクトリを作成します。
chmod 0705 ファイルorディレクトリパーミションを変更します。
rmdir ディレクトリディレクトリを削除します。中身が空じゃないとだめ
rm ディレクトリディレクトリを中身ごと削除します。
rm ファイルフィルを削除します。
more ファイルファイルの中身を1画面ずつ表示します。エンターで次の行、スペースキーで画面送りします。Qキーで終了します。
which コマンドコマンドのパスを表示します(例:[ which perl ] [ which sendmail ] [ which gzip ])
man コマンドコマンドの解説を表示します。


だいたいこんだけ知ってればユーザとしては大丈夫だと思います。FTPソフトでファイル操作の多くはできるので、普段は ls, cd, perl -wc くらいしか使わないと思います。

≫ちょい技

  • 空ファイルの作り方
    ウィンドウズでのやり方です。
    空ファイルを作りたいフォルダでマウスを右クリックします。
    コンテクストメニューで[新規作成]→[テキスト文書]を選択します。
    作られたアイコンを右クリックします
    [名前の変更]で任意の名前に変更します。
    「拡張子を変更すると…」というポップアップが出ますが、「はい(Y)」を選択します。


TOP > スクリプト制作メモ > CGI初心者への基礎知識
(C) bayashi.net