Ruby ビギナーのための CGI 入門 【第 5 回】文字コードと排他処理 3 ページ

前のページへ 目次へ

目次

掲示板の設置

この連載で作ってきた掲示板もようやく設置できる程度になりました。 そこで、今までのようにテスト環境で動かすのではなく、 掲示板をご自分の Web サイトに設置してみましょう。 自分が作ったものが実際に動くというのは プログラムの醍醐味の一つですからね。

準備

設置する掲示板

ダウンロードしてもらった rubima017-cgi.zip に 修正済みの掲示板が入っています。 まだダウンロードしていない人は 1 ページ目 からダウンロードして下さい。

設置する掲示板は rubima017-cgi\upload というフォルダに入っています。 内容は図のとおりです。 upload.jpg

設置する場所(サーバー)

設置する CGI プログラムは用意できていますが、1 つ問題があります。 それは設置する場所(サーバー)です。

この連載では Ruby で CGI プログラムを作ってきました。 そして、作った CGI プログラムはすべて自分のコンピューターで 動いているサーバー (server.rb) に実行してもらっていました。

当然、これから掲示板を設置する環境でも 同じような条件が整っていなければなりません。 もし、必要な環境が整っていなければ 掲示板を設置してもそのプログラムは動作しません。

Ruby の CGI プログラムを動かすために 必要なものは 初回 に説明しました。 下の 2 つです。

  • Ruby 本体
  • サーバー

掲示板などの CGI プログラムを設置する時は 設置場所にこれらが準備されているかどうかを 確認しなければなりません。

皆さんの中にはご自分の Web サイト (いわゆるホームページ) を 持っている方もいるでしょう。 一般的には掲示板などの CGI プログラムは Web サイトの中の 1 つの要素として その Web サイトを置いているサーバーに設置されます。

最初に Web サイトを持っていない方の場合について説明していきましょう。 Web サイトをお持ちでない場合、 まずは Web サイト(ホームページ) を持つ必要があります。 今回作った掲示板はその Web サイトに設置します。 この時、注意する点は

  • Web サイトのあるサーバーで CGI が許可されている
  • Ruby プログラムを CGI プログラムとして使うことが出来る(Ruby が使用可能)

の 2 点です。最低でもこの二つの条件を満たしていないと、 今回作った掲示板を設置することは出来ません。 Web サイトは無料ホームページ、無料サーバーなどの言葉を Google などで検索すれば、無料の Web サイトを提供している サービスを見つけることが出来ます。 そうしたサービスの中から Ruby プログラムを CGI プログラムとして 使用できるサービスを探してもらうことになります (有料のサービスを使っても構いませんが、最初は無料サービスで十分でしょう)。

ちなみに筆者は xrea のサービスを利用しています。 ここのサービスは人気のようで、無料サーバーへの登録はなかなか出来ません。 http://jp.rubyist.net/?RubyAvailableServers に Ruby の使える サーバーの一覧がありますので、参考にしてみて下さい。

次に自分の Web サイトを既に持っている場合です。 もし、その Web サイトのサーバーが CGI の設置が可能で、 かつ、Ruby が使える場合、 その Web サイトに自分の掲示板を設置することが出来ます。

ご自分の Web サイトのサーバーが上記の条件を満たしているかどうかは サーバーの管理者に問い合わせたり、 サーバーの機能を記したページを見てもらったりするしかありません。 こうした条件はサーバーによって違うので、 このサイトは使用可能で、 このサイトで使用不可だと決め付けることができません。

設置する際の手順

ここで大雑把に掲示板を設置する際の手順について説明しておきましょう。 箇条書きにすると下のようになります。

  1. サーバーの各種条件を確認
  2. 掲示板を構成する各ファイルを用意
  3. 各ファイルの設定や細かい修正
  4. 掲示板の各ファイルをサーバーに転送

1 つ目のステップは CGI プログラムを実行するための条件を確認します。 サーバーによっては CGI プログラムの実行に 制限がかかっている場合があります。 こうした条件をしっかり確認しないと、 せっかく CGI プログラムを設置しても CGI プログラムとして使うことができません。 それ以外にも確認しておきたいことがいくつかあります。

2 つ目のステップに関しては今回は考慮する必要はありません。 掲示板はすでに用意してありますからね。 他人が作ったCGIプログラムを設置する時には、 前ページで紹介した文字コードを統一するなどの作業も必要かもしれません。

3 つ目のステップでは掲示板の各ファイルの設定を行います。 今までなら CGI プログラムを作ればすぐに試すことができましたが、 実際には掲示板を設置する時には細かい設定が必要になります。 実は server.rb では簡単に CGI プログラムを試せるように 細かい設定を server.rb 側で済ませています。 一般のサーバーではこの部分を省略出来ず、自分で設定する必要があります。

最後のステップでは掲示板の各ファイルをサーバーに置いていきます。 この時には FTP を用いて転送を行います。

では、それぞれのステップについて詳しくみていきましょう。

サーバーの各種条件を確認する

サーバーによって CGI プログラムを実行するための条件は異なります。 そのため細かい部分まで説明することはできませんが、 最低限これだけはチェックしておいて欲しいという項目を説明していきます。

Ruby の本体の場所(パス)

初回で説明したように Ruby プログラムを実行するには Ruby の言葉を理解するプログラムが必要です。 Windows ではこのプログラムの名前は ruby.exe です。 RDE の設定をする時に ruby.exe の場所 (この場所のことをパスといいます) を指定したのですが、覚えていますか?

通常、サーバーでは Unix 系 OS が使われており、 そこでは Ruby の言葉を理解するプログラムの名前が Windows とは少し違います。 Unix 系 OS では Windows の ruby.exe に相当するプログラムのことを ruby と言います。

RDE で ruby.exe の場所を指定したように CGI プログラムで Ruby の言葉を使用する場合も どこに ruby があるのか知っておく必要があります。 一般的には

  • /usr/bin/ruby
  • /usr/local/bin/ruby

といった場所に ruby は置かれていますが、 ruby のパス(ruby のある場所) はサーバーによって違うために確認が必要です。

上で示したパスは Windows の C:\ruby\bin\ruby.exe というパスと書き方が違いますね。 Unix 系 OS では C: などのドライブレターは使用されません。 また、Windows では多くの人が「\」をフォルダの区切りに使いますが、 Unix 系 OS では「/」がフォルダの区切りになります。

例えば、/usr/bin/ruby は一番上のフォルダの下にある usr フォルダの中の bin フォルダの中の ruby という意味になります (一番上のフォルダというのが分かりにくい人は Windows のマイコンピューターのようなものと思って下さい。非常に大雑把ですが)。

/
|
+-- usr
     |
     +-- bin
          |
          +-- ruby

ちなみに Unix 系 OS ではフォルダのことをディレクトリと言います。 今後は Unix 系 OS でフォルダのことを指す時はディレクトリという言葉を使いますので、 よく覚えておいて下さい。

URL とサーバーのファイルの対応

既に Web サイトを持っている人にとっては必要ないことかもしれませんが、 ここで URL とサーバー上のファイルの対応について説明しておきます。

普段、私たちはブラウザに URL を打ち込むなり、 リンクをたどるなりしてサーバーにあるデータにアクセスしています。 この時、 URL とサーバー上のファイルのパスとの関係は どのようになっているのでしょう。 この関係を知っておかないと、掲示板をサーバーに設置しても、 どの URL で掲示板にアクセスできるのか分からなくなってしまいます。

例えば、server.rb を自分のコンピューターで動かし、 server.rb と同じフォルダにあるデータにアクセスしたいとします。 ここでは説明のために hoge.html が server.rb と同じ場所にあると仮定しましょう。 この場合、今までなら http://localhost/hoge.html で hoge.html にアクセスできました (本当は localhost:8080 なのですが、少し難しいのでその点は省略します)。

実は http://localhost/hoge.html のうち localhost は自分のコンピューターのことを指します。 localhost が自分のコンピューターであるという決まりがあるのです。 その後ろの /hoge.html は公開されたフォルダの直下にある hoge.html のことを示しています。 server.rb は server.rb のあるフォルダを公開フォルダとするように設定されていますので、 /hoge.html は server.rb のあるフォルダの中にある hoge.html に相当することになります。

server.rb の http://localhost/hoge.html

localhost 自分のコンピューター
/hoge.html server.rb と同じフォルダの hoge.html

もう 1 つ http://localhost/foo/hoge.html を考えて見ましょう。 この場合、localhost は同じです。/foo/hoge.html というのは server.rb のフォルダにある foo フォルダの hoge.html という意味になります。

server.rb の http://localhost/foo/hoge.html

localhost 自分のコンピューター
/foo/hoge.html server.rb と同じフォルダにある foo フォルダの中の hoge.html

では、 http://www.hogehoge.com/index.html ならどうでしょう? この場合は www.hogehoge.com というコンピューターの /index.html というファイルにアクセスしにいきます。 /index.html は www.hogehoge.com の公開フォルダ (ディレクトリ) の中にある index.html になります。

これまでの例から分かるように URL にはサーバーの名前と公開ディレクトリ (フォルダ) からのパスが含まれており、 逆にいえば この 2 つの組み合わせで URL が決まることになります。

公開ディレクトリからのパスというのは以下のようになります。 仮に公開ディレクトリを /www としましょう。 この時 /www にあるデータを index.html とすると、 この index.html のパスは /www/index.html になります。 公開ディレクトリからのパスというのは 2 つのパスの共通部分を取り除いた部分です。 この例なら /www/index.html から /www を 取り除いた /index.html になります。 もう 1 つ別の例を考えてみましょう。 公開ディレクトリが /home/html、 ファイルのパスが /home/html/foo/bar/foo.html の場合です。 この時は公開ディレクトリからのパスは /foo/bar/foo.html になります。

公開ディレクトリからのパスの説明が済んだところで、 2 つほど具体例を見てみましょう。 1 つ目は筆者の使っている xrea です。 筆者が xrea から指定された条件では、サーバーの名前は radio.s14.xrea.com で、 公開ディレクトリには /public_html になっています。 この場合、http://radio.s14.xrea.com/index.html は radio.s14.xrea.com にある /public_html/index.html に相当することになります。 逆にブラウザで /public_html/bbs/bbs.html にアクセスしたい場合は http://radio.s14.xrea.com/bbs/bbs.html という URL を使用すれば良いということになります。

もう 1 つ少し特殊な例を考えてみましょう。 サーバーによっては /home/hogehoge/public_html が 公開フォルダ となっていることがあります (hogehoge は人によって異なります)。 この場合、サーバーが fugafuga.com という名前なら /home/hogehoge/public_html/index.html に 相当する URL は http://fugafuga.com/~hogehoge/index.html となります。 /home/hogehoge/public_html が /~hogehoge に 短縮されてしまっていると思ってもらえば分かりやすいでしょう。 逆に http://fugafuga.com/~hogehoge/foo/index.html は /home/hogehoge/public_html/foo/index.html になります。 この例は Unix 系 OS をお使いの人ならしばしば見るのですが、 Windows をお使いの人にとっては分かりにくいでしょう。

サーバーの名前は使用するサーバーによって違いますし、 公開ディレクトリの場所もサーバーによって違います。 そのため URL とファイルのパスとの関係は サーバーを利用する皆さんが自分で確認する必要があります。 他にも色々な例があります。実際に試してみるのが一番でしょう。

CGI プログラムの実行可能な場所

掲示板を設置する際は どの場所 (パス) に CGI プログラムを置いて良いのかを調べておかなければなりません。

特定のディレクトリに置いたファイルだけが公開可能となっている場合があります。 例えば、一番上のディレクトリに hoge, fuga, foo, bar のディレクトリがあったとしましょう。

/
|
+-- hoge
|
+-- fuga
|
+-- foo
|
+-- bar

このすべてが公開されることもありますし、 hoge ディレクトリの下にあるファイルだけが公開できて、 それ以外は公開できないということもあります。 後者の場合、fuga の下に Web サイトのファイルを置いたり、 掲示板を設置したりしてもそれを公開することはできません。

また、特定のディレクトリにしか CGI プログラムを設置できないこともあります。 上の例ならば、foo ディレクトリにしか CGI プログラムを設置できない等、 時おり設置場所の制限が見られます。注意が必要です。

その他

サーバーによっては .htaccess というファイルを置かないと、 CGI プログラムを動かせない場所もあります。 できればそういったサーバーは避けるようにしましょう。 慣れない人が .htaccess を作った場合、 大きな問題を起こすことがあります。 もし、そういうサーバーをお使いの場合は 別のサーバーを利用することも考慮してみて下さい。

もう 1 つ注意する点はファイルの拡張子です。 拡張子というのは hoge.rb ならば .rb、ruby.exe なら .exe のように 「.」より後ろの部分です (人によっては Windows の Exploerer の設定で拡張子を表示していない場合があります。 その時は Exploerer のメニューから ツール → フォルダオプション と選んで、ダイアログを表示させ、 そのダイアログの 表示タブ → 登録されていないファイルの拡張子は表示しない の項目のチェックを外して下さい。拡張子が見えるようになります)。

サーバーによっては特定の拡張子でないと、 CGI プログラムを実行できないという制限があります。 例えば、サーバーによっては .cgi しか使えないという制限があります。 この場合は bbs.rb や update.rb の拡張子を .cgi に変更しなければなりません。

shebang

shebang というのは何でしょうか。 主に Unix 系 OS でプログラムを実行するために利用されるのが shebang です。 CGI プログラムを実行するサーバーでは Unix 系 OS が使われることが多いため shebang について知っておく必要があります。

これまで Ruby プログラムをいくつか作ってきました。 実は RDE などで作った Ruby プログラムは普通のテキストファイルで、 メモ帳などで開くことができます(すでにご存知の方も多いかもしれません)。

それ単体は単なるテキストファイルであるため Ruby プログラムをプログラムとして利用可能にするには ruby.exe のようなRuby の言葉を理解するプログラム (ruby.exe) が必要です。 そして、Ruby プログラムとして実行するには 毎回 ruby.exe (あるいは ruby) に実行をお願いしなくてはなりません。 実行するたびに毎回 ruby.exe にお願いするのが面倒だったので、 この連載では RDE を使っていましたが、 Unix 系 OS では違う方法を使うことができます。 それが shebang です。

Unix 系 OS などでは Ruby プログラムの最初の行に

#!/usr/bin/ruby

のような行を付けると毎回 ruby に実行をお願いする必要がなくなります (OS が代行してくれます)。 /usr/bin/ruby というのは ruby の本体があるパスです。 先ほど ruby のパスを確認して下さいと書いたのはこのためです。

実は shebang を付けないと、Ruby プログラムは CGI プログラムとして動作しません。 CGI で プログラムを実行する時は自分で ruby に Ruby プログラムの実行を頼むことができないからです。 shebang を付けてあげれば自分で頼まなくても OS が代行してくれますので、 CGI プログラムとして実行することが可能になります。

shebang を付ける時は Ruby プログラムの最初の行でなければなりません。 また、#!… の順 (…は ruby のパス) にも注意して下さい。 この順番でなければなりません。

アクセス権と所有者

アクセス権というのはファイルに対してどのような操作が可能であるかを示しており、 所有者というのはファイルを所有している人が誰なのかということです。

普段、Windows を使っている人はあまり気にしていませんが、 各ファイルには所有者とアクセス権が設定されていることがあります (設定されていないこともあります)。 一方、Unix 系 OS では多くの場合、 多くのファイルやディレクトリに所有者やアクセス権が設定されています。

アクセス権によってファイルの

  • 読み込み
  • 書き込み
  • 実行

が可能かどうかが決まります。 例えば、CGI プログラムは実行できないといけませんので、 実行可能にする必要があります。 また、修正したいことも多いでしょうから、 読み込み・書き込みも可能にするでしょう。 そのため通常 CGI プログラムは上記の 3 つすべてを可にすることが多いです。

もう少し詳しくアクセス権について見ていきましょう。 上の読み込み・書き込み・実行の 3 つには数字が割り当てられており、 その数字を使ってアクセス権を設定したり、現在のアクセス権の状態を表したりします。 毎回、読み込み・書き込み・実行と書くのは面倒ですからね。 具体的な数字は下のようになります。

読み込み 4
書き込み 2
実行 1

例えば、読み・書き・実行のすべてを可能とするなら、4 + 2 + 1 の 7 になりますし、 読み書きを可能にするなら 4 + 2 の 6 になります。 読みと実行なら 4 + 1 の 5 になります。 要するに読み・書き・実行のうち可能のものの数字を合計するわけです。 サーバーに掲示板を設置する際は この数字で CGI プログラムのアクセス権を設定しておかなければなりません。

ファイルやディレクトリにはアクセス権だけでなく、所有者、所有グループが決まっており、 所有者、所有グループ、その他の人のそれぞれに対してアクセス権を設定することが可能です。 例えば、

  • 所有者は 7 (読み・書き・実行)、所有グループは 5 (読み・実行)、そうでない人は 5 (読み・実行)
  • 所有者は 6 (読み・書き)、所有グループは 6 (読み・書き)、そうでない人は 4 (読み)

と色々と設定することが出来ます。

ファイルのアクセス権は所有者・所有グループ・その他の人の それぞれの数字を三つ並べて、状態を表すことになります。 例えば、777 なら所有者・グループ・その他の人のいずれも読み・書き・実行が可能になります。 666 なら所有者・グループ・その他の人のいずれも読み・書きが可能です。 755 なら所有者のみ読み・書き・実行が可能で、グループ・その他の人は読み・実行が可能になります。

また、数字ではなくアルファベットを並べることもあります。 読みを r、 書きを w、実行を x で表し、アクセス権がないことを - で表します。 例えば、777なら rwxrwxrwx に、755 なら rwxr-xr-x に、644 なら rw-r–r– になります。 このような表記を使って Unix 系 OS ではファイルやディレクトリに アクセス権を設定していきます。

では、掲示板を設定する時はアクセス権をどのように設定したら良いのでしょうか。 具体的には掲示板の Ruby プログラム (bbs.rb や update.rb など) は 755 に、 bbs.html や bbs.dat を 644 にします。 ディレクトリのアクセス権については説明していませんが、 今回に限って言えば 755 にしておけば問題はないでしょう。

細かい設定は他にもあるのですが、 とりあえずこうしておけば CGI プログラムの実行はできると思います。 まとめると下のようになります。

bbs.html 644
bbs.rb 755
update.rb 755
bbs.dat 644
themeの中のファイル、ディレクトリ ファイルは 644、ディレクトリは 755

掲示板を転送する

以上で説明は終了です。 掲示板を転送していきましょう。 転送のことをアップロードするという言い方をすることもあります。

FTP によるアップロード

自分の Web サイトをお持ちの方ならご存知かもしれませんが、 サーバーにWeb サイトのデータを転送するには 少しややこしい手順があります。

転送には ブラウザを使って転送する、FTP で転送する、など幾つかの方法があります。 多くの人が利用しているのはブラウザによる転送とFTPによる転送の 2 つでしょう。 残念ながらブラウザによる転送はサーバーによって方法が異なりますし、 細かい制御が出来ないので、掲示板を設置する時は FTP による転送をお勧めします。

FTP というのは簡単に言うとファイルを転送するための約束事だと思って下さい。 この約束事にしたがってファイルを転送するソフトウェアを FTP クライアントといいます。

FTP クライアントにはたくさんの種類があります。 例えば、FFFTP というソフトがあります。 こうしたソフトを使えば FTP でファイルを転送することが出来ます。 ここでは FFFTP を使って説明します。 インストールや簡単な使い方 に関しては FFFTP の初心者マニュアル を読んで下さい。

最初に気をつけるべき点は初期設定です。 サーバーにファイルを転送するには サーバーの名前(ホスト名)、ユーザ名、パスワードが必要になります。 これらはサーバーの管理者から何らかの形で通知されているはずです。

  • ホスト名(アドレス)
  • ユーザ名
  • パスワード

これらをメモしておきます。 FFFTP を実行したら、ホスト一覧 のダイアログが出るので、 そのダイアログの「新規ホスト」ボタンを押します。 そこで、上記の 3 つを入力して「OK」ボタンを押します。 ダイアログに接続先が現れますので、それを選択して「接続」ボタンを押します。

接続に成功すると、右に接続先のファイル一覧が現れます。 接続が成功したら、左に表示されている自分のコンピューターのファイル一覧を選んで 掲示板を置いてあるフォルダまで移動します。 今の場合は rubima017-cgi というフォルダですね。 次に右の一覧をサーバーの公開ディレクトリにします。 これで準備完了です。 upload フォルダを選んで右クリックでアップロードを行います。 後は勝手に upload フォルダの内容を転送してくれます。

アクセス権の設定

転送が終わったら、アクセス権の設定を行います。 FFFTP ではアクセス権のことを属性と言います。 各ファイルの現在のアクセス権はファイルの一覧の属性のところにアルファベットで表されています。 アクセス権を変える時はファイル(bbs.rb など)を選んで 右クリックから属性変更を選びます。 オーナー、グループ、その他と出てきますので、それぞれの権限を設定します。

bbs.rb なら 755 に設定するので、 オーナーに読み、書き、実行の権限を持たせます (FFFTP なら呼出、書込、実行のところにチェックを入れます)。 グループ、その他に関しては読み、実行の権限を持たせます。 設定が済んだら OK ボタンを押して下さい。 これを必要なファイルにすべて行っていきます。 設置が終了したら、ご自分の掲示板にアクセスしてみて下さい。 うまく表示されたでしょうか?

おわりに

今回は排他制御や文字コードなどの細かい部分を修正しました。 また、掲示板の設置など実際に CGI プログラム にアクセスできるようにしました。 今後、自分の CGI プログラム を作成する時には こうした経験が役立つと思います。

次回は一行掲示板の部分を改造します。 また、データの保存形式についても変更を施す予定です。

参考文献というかリンク集

文字コード

排他処理

FTP

筆者について

最近、筆者の身に起きた不幸について。

  • ノートパソコンが壊れた
  • 腰痛が悪化
  • 猫に引っかかれた

小さな不幸が多いですねえ。

ところで、「Ruby に馴れよう」の頭につけている言葉は 某時代劇シリーズからとっていたのですが、 ついに尽きてしまいました。次号からどうしようかなあ。

前のページへ 目次へ