JavaScript の連載と並行して、Ruby の連載「Ruby で楽しくサーバープログラミング」を始めることにしました。
クライアント側の処理は JavaScript でやっていくとして、囲碁の AI は JavaScript では無理そうだ、ということで、サーバーの CGI について調べました。当面、@nifty のホームページサービスの範囲[註]でやっていくことにしたので、スクリプト言語の選択肢は3つ。Perl、PHP、Ruby です。以前、Perl は少し使ったことがあるのですが、PHP と Ruby は全く使ったことはありませんでした。それでも、どうやら Ruby は面白そうだ、という気配を感じたので、Ruby を使ってみることにしました。
いずれ紹介することになると思いますが、例えば Ruby では、演算子のオーバーライドができます。Java や JavaScript では、2進ベクトルの論理和は a.or(b) と記述しましたが、Ruby では a | b と書くことができます。グラフ理論による囲碁の AI を記述するには、Ruby のほうがより向いているかもしれません。
Ruby という言語がプログラミングを楽しくできるように設計されているらしいので、これまで SmallBasic、Java、JavaScript で作ったものをまた Ruby に書き換えるときに、こんな書き方ができるのか、という楽しみがあるのではないかと考えています。
Ruby もまたオブジェクト指向言語なのですが、今回はクラスは使わず、手続きのみを使って、いわゆる Hello プログラムを作りました。hello として公開します。

【図1 Hello】
参考資料は、『JavaScript本格入門』の Ajax の説明のところです。この本では PHP を使っていましたが、Ruby に書き換えてあります。Ruby にも ERB という機能があり、PHP のように HTML にコードを埋め込めるのですが、@nifty では ERB が使えないようなので、Ruby のメソッド IO.puts で HTML を出力するようになっています。
クライアントとサーバーで、どう分担するか、を考える第一歩として、3つの Hello プログラムを作りました。Ajax をうまく使ってクライアントとサーバーで非同期処理ができるのが、理想かなというのが現在の結論です。
これらのプログラムを作る際には、主に2つのサーバーエラーが起きました。
1つは、500 サーバー内部エラーです。Ruby プログラムに誤りがあるとこのエラーが出ます。もう1つは、403 実行が拒否されましたというエラーです。これは ftp でアップロードした Ruby のファイルが実行可能になっていないためで、コマンドプロンプトの ftp コマンドで、例えば、
quote site chmod 755 hello01.rb
と設定して、解決しました。
なお、今のところ統合開発環境として、JavaScript で導入した、Aptana Studio 3 を使っていますが、サーバーの設定方法がよく分からないので、サーバーとして Apache 2.2 をインストールし結果の確認をしています。
今後は、クライアントは JavaScript 、サーバーは Ruby で開発していく予定で、連載は並行していくつもりです。
[註] @nifty では現在 CGI の実行に関して以下の制限があります。この範囲を越えないように進めていく予定ですが、いかんともしがたい状況になった場合は、他のサーバーを検討します。
CPUの連続使用時間 : 30秒
CGIの経過時間 : 60秒
(つづく)
