!!!FSWikiを@niftyに置けない "FSWiki nifty"でググると、FSWiki ''Lite''を置く方法はたくさん見つかるが、本家本元''フルセットのFSWiki''を置く記事はなかなか見つからない。とある案件でFSWikiを置きたかったので、試行錯誤したが'''失敗したメモ'''。 !!@niftyの仕様 @niftyは一応自作CGIを置けるとなっているが、その詳細仕様はあまり開示されていない。CGIを作れる人間ならそのくらい自分で調べろという事なのかも知れないが、サポート状況としてはあまり芳しくない。''Perlのバージョンも書いていない''し、使えるモジュールの情報なんて以ての外。そのくせシェルスクリプトが使えると書いてあって、でもそのパスやシェルの種類も書いてない。 で、Perlのバージョンは''5.005_003''でした。なんと''10年以上も前''の実行環境…。Perlは正直、5.6(5.006)以降でないとあちこちで苦労させられる。例えば変数宣言ステートメントの''ourが使えない''など、基本的な言語仕様の部分で違いが出てくる。セキュリティ的にも危ぶまれるし、どうしてこんな古い環境なのか。 気を取り直して、使えるモジュールは…'''ない'''。なんと、5.005に付属の''標準モジュールでさえ導入されていない''ようだ。CGIもCarpもExporterも、果てはintegerやvarsさえもない。 !!試行錯誤→挫折 ここで気づくべきだったのだけれど、なにせPerlに関してはそれほど詳しい訳ではない。教科書レベルの事は分かるが、実行環境の内情などは知らない。C/C++で言えば「メモリのアラインが…」とか「スタック破壊が…」とか「例外ハンドラの実装が…」「boostが…」というような知識レベルにはない。 で、悪戦苦闘して、必要そうな''標準モジュールを片っ端から''一つ一つ入れていった。当たり前だが、標準モジュールは標準モジュール同士の依存が多いので''相当な量''になる。しかし、サーバの容量も限られているので全部を入れる訳にも行かない。また、FSWikiが要求するPerlModuleの中には、5.005に添付のものより新しいバージョンのものがある。これも一生懸命CPAN等から拾った。 そして、''途中で気づいた''。基本的に、tarballで取得してきたPerlのソースからモジュールをコピーしていたのだが、中にはlibではなく''ext''というディレクトリ以下のものを必要とすることがある。それらの中にはMakefile的なものがあったりする。…Config.pm?…DynaLoader?…Fcntl? ひょっとして、これらはPerl(perlコマンド)のインストール時に、当該マシンでビルドしなければならないのでは。つまり、''Pure Perlではない''ので、借り物の(make等できない=バイナリを作成・配置できない)'''@niftyのサーバでは導入できない'''のでは。 ''そう、そーです。そーなんです。あああーーー!!'' !!無惨な結果 Perl Moduleは、何もPure Perlと限っているわけではない。当然だ。そして、''Pure Perlではないが有用だからこそ、標準モジュールになったり''する。標準でないと、後からの追加には権限が必要になるからだ。 こんな当たり前のことに気づかないとは、久しぶりの''大ポカ''だった。 その後もネイティブモジュールの使用部分を互換コードに置き換えたりしていったのだが、途中で''限界''を感じた。やろうと思えば動作自体は可能なのかも知れないが、スタブモジュールや回避コードを書けば書くほど、エミュレーション故のセキュリティの低下や効率の低下が気になる。FSWikiも標準モジュールも書き換え過ぎて、''グダグダ感が出てきたところで諦めた''。そもそも標準モジュールの構成をきちんと知らないから、スタブを書くにしても依存関係を何処で切ってスタブに置き換えるべきか、良好な判断が下せない。 標準ライブラリという意味では、これがC言語だとしても似たような状況だろう。C言語の標準ライブラリがどのような構成で作られているかを子細に把握している人は、''現在ではとても少ない''。特に筆者はANSIが標準(C89)を定めてしばらく後の世代なので、普通に使っている限り、C言語の標準ライブラリの構成を気にすることは殆ど無い。昔はコンパイラ製品に''標準ライブラリのソースが付いていることが重要''だったりもしたのだけれど。昔は各コンパイラでライブラリの実装がバラバラで、かつメモリが非常に狭かったので、標準ライブラリから不要なものを削ったり、改造するなんてのも特段珍しくもなかった。筆者は初めて持ったPCがPentiumでWindows万歳、''32bitリニアアドレス空間+仮想メモリ万歳''の世代なので、C++でSTLでも使わない限りは標準ライブラリの問題なんて殆ど感じたことがない。 !!FSWiki Lite 閑話休題。 仕方がないので結局、FSWiki Liteを使用することになった。FSWiki LiteはフルセットのFSWikiが動かない環境で動作させる意図があった(むしろ@niftyが重要なターゲットだった?)らしく、ひとまず動かすだけなら簡単だ。 PDF出力やRSS対応機能などは使えないし、プラグインを追加するには''ゴリゴリとコーディング''しなければならないが、標準モジュールと格闘するよりはこちらの方がよほど楽だった。Liteにはログイン機能がなく、従って管理画面もないのだが、その程度なら過去のコードから引っ張ってこればそれほど苦労しない。最初からこうしておけば半日を無駄にせずに済んだのに。 そういう訳で、フルセットのFSWikiを@niftyに設置しようとすることを、猫科研究所はお勧めしない。だだし、もしできたなら、お裾分けをお願いしたい。