不定期連載準特別テーマ
イルカ野郎とはさすがにきっぱり別れたが、Windowsを完全に捨てるわけにはまだいかない。賢く使えばそれなりに使えるOSではあるのだ、たぶん、あの.NET構想とかいうヘンなことさえやらなきゃ。というわけで先日Solarisで怒濤のように作った家計簿WebDBをWin32環境に移行できるか試してみました。結果は、一応、できる!
WebサーバにはもちろんApacheのWin32版を選ぶ。IISを使うには2000Serverが必要だし、2000pro付属のPersonal Web
Serverでは機能がこころもとなさすぎる。その根拠はServer(IIS)との差別化のために機能を削ってやがるに違いないからだ。どっちにしろActive
Server Pagesを使うようにしか考えてないだろうからなんかできないナとか思ってヘルプを見てもどうせASPを使ってくださいとか言いやがって神経魚でされる(こう書くと神経を魚で生臭くべろべろんとなでられるような感じがしてリアリティーが増す(増すか!))のが落ちだろう。だいたいLib50に入れようとしているのはNT
ServerなのでIISを入れることになるとサービスパッチ(違う?)をあててオプションパッチを当ててまたサービスパッチをあててと死ぬほどめんどくさい。
ApacheのWin版はapache_1.3.20-win32-no_src-r2.msiというインストーラつきのバイナリファイルで、ソースはついてない。リコンパイルしようったってCわかんないし。インストーラからドメインやホスト名を登録していくからhttpd.confをあとから編集する必要もないし。ラクだねこーゆーのはWindowsだと。1.3.20はUNIX版でも標準でmod_perlは組み込まれているようだからあまり心配せずに次に進んだ。
PostgreSQLはwin版がない!ていうか有志の方がものすごい努力で作っておられるようだがPostgresの公式マニュアルには「Win版の場合はCygwinからインストールできる」なんて書いてある。あとインストールしたとしてもperlのモジュールとかどうするの?・・・わたしが調べた結果では残念ながら「Win版のperlにPostgres用モジュールは見たことがないですネ」という意見がBBSを席巻していた(別にしてない)。一方MySQLはwin版があるし、Active
Perl用にバイナリでモジュールをインストールできる。やり方はそのへんの本にも多くのウェブサイトにも信頼できる記述があるのでのに子ごときがここで公開する必要は感じない。
だが!結論をここで言ってしまうと、Postgresの機能をほしいままに使ってきたわたしにとってMySQLの機能の限定ぶりはかなり根性を奪うものだった。足りない機能はサポートされた機能を組み合わせるよって解決するだろうしそういうめんどくさいことを自動でするためにPerlがある。だがとりわけ、Subselectを2重3重マトリョーシカ状態で使ってきたわたしにとってこれを全部、テーブル作ってセレクトして入れてまたテーブルつくってセレクトして・・・に書き直すのはさすがに気が遠くなる感じだった。
いっそ、毎日のデータ入力だけMySQLWinマシンでやって、月に1度の集計のときデータをSolarisのPostgresに引っ張ってきてそこで処理してまた集計結果だけWinのMySQLに返すというのは・・・・
そんなのcgiでできるのかなーと思っているときにダンナ様が帰ってきた。事情を話すと、
「だったらSolarisマシンをもう一台買ったほーがいいな・・・」
ということになり、
「原則的にはできることが確かめられたが、これ以上の移行作業は必要ない」ということで打ち切りには、なった。
Javaはいずれは勉強したい言語であるがちと今のうちは敷居が高い。とするとPerlかPHPのどちらかになるだろう。Perlは結構やったのでこの際PHPを勉強がてら作ってみようと思ったが、やっぱりPHPではhtmlタグをたくさん書かなきゃいけないのがつらい〜。
あとここでは関係ないがUNIX版だとPostgreSQLとの連携オプションをつけてPHPをインストールすると、Apacheが起動しなくなるというトラブルがあった。調べたところこれは連携オプションによってできるlibpqというファイルをApacheが起動時に読み込めないのが原因のようである。Postgresのバージョンが6など少し古いばあいはこのエラーは生じないとのことだ。わたしがやったのはphp-4.6とPostgreSQL-7.1.2で、これでトラブった。
そんなわけで結局Perlにした。
Win32環境ではsjisを使わなければならないという頭があったせいか、Win32でMySQLを使うための本にもsjisにしたまえと書いてあったせいか(それはコマンドプロンプトでmsqlを使うためのようだ)よく考えずにMySQLのmy.iniにdefault-character-set=sjisと書いてしまった。するとperlでもphpでも、cgiを書くとハマる。文字化けだ。
1)まず、コマンドラインからmsqlを使う場合だ。エディタでコマンド等のテキストファイルを作っておいてそれを読み込ませる
source ファイル名
のコマンドだと、
eucのテキストだともちろん、日本語文字化け〜。
sjisのテキストだと、内容が短いうちはいいが、長くなるとエラーになり、途中までしかコマンドが読み込まれない。日本語が入っていてもいなくても同じ。
2)Active PerlでCGIファイルを書くと、わたしのケースでは、フォームなどの表示は正常になされるが入力して送信すると場合によって文字化けした結果が送られる。
3)PHPでCGIファイルを書くと、データベースに接続できない。Apacheのエラーログを見るとやはり文字コードの13というがインデックスが見つからないというようなことが書かれている。検討した結果、\mysql\share\charsetというフォルダの中に文字コードに関するファイルが置いてあって、そのindexというファイルの中でsjisコードは13というインデックスをつけられているがその設定ファイルsjis.confがないという意味らしい。確かにgerman1.confとかいろいろ.confファイルがあるけどsjis.confというファイルはない。
だが思い切ってdefault-character-set=ujisにした。
するとすべてうまく行った。(PHPだけはやってない)問題はコマンドラインのmsqlで文字化けすることだが、perlでcgiファイルをちゃちゃっと書いて結果をブラウザ上に表示させるようにすれば問題ない。
やっぱeucだよなーと思った。でも本当はUTFとかいうもっとコアなコードがあるらしい(無知)。
さらにPerlパッケージのインストールの仕方がわからなかったわたしは、そのへんからPerl5.0053のソースを拾ってきてCygwinでコンパイルできるのかどーか試してみた。
perlのグズ野郎をた〜してみるとなんとcygwin32用のインストールファイルとその使い方readmeが置いてあった。
README.cygwinというそのファイルには、cygwin上にインストールする場合にはそこにあるcygwinフォルダというものからいくつ かの設定ファイルをperlのソースのルートに引っぱり出し、かつ設定をこのように書き変え、さらにconfigureの事情聴取の際に
はこう答えるんだヨという説明がある。その通りにやって./configureをかますと、「以後の質問にはちゃんと答えないとPerlは 起動しませんから根性据えて答えるように」とのご託宣のあとにえらく長い事情聴取が始まった。だがさっきのREADMEに指定
された一つの質問に対する答えの他はよくわからなかったので、取調官の誘導するままに自供していくと、一応終わったらしく makeしていいぞとのお言葉が。でもmakeしてみるとものの数行で止まってしまった。やはりソースからのコンパイルは甘くな
い。パッケージは勝手なフォルダにインストールされるからやっぱりソースからのコンパイルに限るわね、などとフカしていたの を考えを改めることにした。
Apacheも最新Version1.3.20を(UNIX USERの先月号にあった)ソースからコンパイルしてみたけど、ところどころなんかno such
file or directoryというメッセージが出るなと思いつつ、とにかくmake及びmake installまでこぎつけ、「アパッチは成功裡にインストールされました」というメッセージは、出た。しかし、
usr/local/apache/bin/apachectl start とやると
「httpdがないので起動できません」と言われた。 わははははー。そりゃだめだよ。
さらに。postgreSQLは本当にソースからコンパイルできるのかと思ってやってみた。だがソースのグズ野郎をた〜したところで気がついた。
「postgresユーザーの追加ってどーするの?!」
なにせこのCygwin bashはwhichコマンドでさえ理解してくれない。useraddとか、きいてくれるもんかね?・・・やっぱ理解してもらえなかった。これじゃあとで緑の党のように(しつこい)厳しく構築しなければならない環境問題もとてもおぼつかない。すでにWin32環境への完全移行は完全にあきらめていた時点だったのでかなり潔くあきらめた。
Cygwinについては、たぶんかなり勉強してないんで、不当に低くその機能を評価してしまっているのかもしれない。Win環境でのUNIXエミュレーションというと、わたしはとにかくカネにあかせて、MLDを買ってしまったものでネ。まじめにこれを使わないとならないということになればちゃんと上記サイトなどでもっと勉強しまーす。
Win2000proにApache, Active Perl, MySQLのそれぞれWin32用パッケージをインストールして、Solaris上でApache,
Perl, PostgreSQLにより作成した家計簿Webアプリとほぼ等価なシステムを作成することは
できる
と結論された。
このとき、文字コードはeucで押し通すべきである。
MySQLはサポートする機能が少ないが、Perlで自動処理スクリプトをばんばんかけてやれば補完できる。けど一度Postgresで豊富な機能をふんだんに利用して楽こいてしまった身にはあえて全てを移行する気力を持たなかった。
けど、Win2000に、ApacheとActive PerlとMySQLしかアプリ入ってないって渋くない?!隣の奥様に自慢したくならない?!(気にもとめられないっての)