いまだ真面目に働いています。今年いっぱいは忙しいとか言ってみたものの今週いっぱいくらいで息切れしそう。
電車の中での作業はイベントサイトのレポートを書いてたのでプログラム作業進まず。レポートは中身がだいたいできた。あとはデータの表とグラフ作って体裁を整えるだけなんだがそれがめんどい。さすがに電車の中でやるにはめんどい作業だしな。
irpackにissueが登録されてて、標準ライブラリのnet/httpを使ったら別なマシンで動かねぇんだけどと言われてしまった。うん、それ、手動で埋め込まないと動かないんだごめんね、と返してもいいんだがそれだけではちょっとひどいだろうし、それ英語で返すのめんどい。どうせなら対策したい。
実は問題が二つあるんだなこれは。一つは埋め込んでなくてもIronRubyをインストールしたマシンでは動いちゃうところ。これは起動時のオプション指定で標準ライブラリの場所とか実行ファイルの場所を指定してないせいなんだが、そうするとなぜかIRONRUBY_11環境変数を見にいってそこから標準ライブラリのパスを探す。IronRubyが入ってるマシンだとその環境変数が設定されちゃってるので見付けちゃうんだが、入ってないマシンだと当然標準ライブラリが入ってなくて終了、と。
まあこれはちゃんと標準ライブラリのパスやら実行ファイルの場所を指定してあげればいいだけだよね。しかし標準ライブラリのパスってどこに設定すればいいんだ?
もう一つの問題は標準ライブラリの埋め込みがすごいめんどくさい点。使ってるrbファイルはどれだっけかなーと自分で探してきてなんとか埋め込み指定しないといけない。これがとてもめんどい。
しかしながら、自動でひろってこようにもじゃあどれ使ってんのよというのが動的なRubyでは実行してみないとわからん。だがexe作るのにいちいち実行するのもださいしGUIアプリなんかでは自動化しづらいし困ったもの。さて他のexe作る奴はどうなってんだっけ?
といってもexerbぐらいしか知らんのだが、exerbは手動で指定だな。mkexy使って実行すると自動で列挙もしてくれるが一度は実行はしないといけない。一度実行しておけば済むとも言えるが、あとから使うライブラリ増やしたときにはレシピファイルを更新しないといけないのが面倒。
そういえばjrubyはjruby-complete.jarとかいうのに標準ライブラリも含めて全部ぶちこんであるんだった。ということは全部ぶちこんでも許容できるのでは?
計算してみたら素でぶちこむと4MB程。けっこうでかい……。圧縮を有効にしたと考えてzipしてみたら1.2MBくらいになった。あらまあいい具合じゃないですか。まあそもそも今時exeがちょっとくらいでかくなったところで困りもせんだろう。
そんなわけで--completeオプションなんかを追加して標準ライブラリを全部exeに埋め込めるようにするつもり。二つexeを作ったときにランタイムもライブラリも両方に埋め込まれることになるがそれは仕方ないかなぁ。全く埋め込まないという選択もできはするし。
あとは一体どこから標準ライブラリを拾ってくるかなんだが……。IRONRUBY_11からでいいものだろうか。IRONRUBY_11か無ければ実行ファイル(ir.exe)のある場所からでいいのか。
イベント後、自分の手元でちょこちょこと不具合修正してた以外ではやっと本格的に再度手をつけ始めた。
いろいろと修正してた部分でテスト通らなくなってたり、テスト足りてなかった部分があるのを追加した。あと接続先選択部分を修正しといたんだが、おかげで配信中リレー崩壊してしばらくつながらなくなる問題がだいぶ解消されていた。なぜか直下でもバッファる、つまり直下にデータが流れなくなることがあるという問題が根本なんだがさっぱり理由がわからん。まあそれの理由がわかるまでのつなぎとしては十分でしょう。幸いそう頻繁に起こる問題ではないし。
次はどうすんべ。HTTPのインターフェースを追加したいんだが何で作ろう。.NETのHttpListener使ってシンプルなサーバを作るか、ASP.NETをホスティングするか、IronRubyでWEBrickか何か使うか。どれも一長一短ありましてな。
HttpListenerは使うのは簡単だし他に必要になるものもないんだが、シンプルすぎるのでいろいろと自前で書かないといけないところが出てきちゃう。テンプレートエンジンが無いってのがちょっとなぁ。
ASP.NETは全部入りっぽくて便利そうなんだが、でっかくて設定ファイル書いたりがめんどくさそう。ClientProfileでは使えないので.NET4でもフル版を入れる必要が出ちゃう。まあフル版入れるのがそう問題にはならんだろうけどさ。そもそもMonoの2.7系に配慮して.NET 3.5で作ってるし。あと普通のアプリからASP.NETをホスティングする際の資料が少なくて不安ではある。
WEBrickなんかはIronRubyと関連ライブラリをぶちこまないといけないのがめんどい。しかしこれもRackとか使えるしSinatraとか入れてもいいしテンプレートエンジンもerbでもなんでも使えばいいし俺慣れてるしということでいいこと沢山。.NETも4ならClientProfileで足りる*1。しかし結局IronRubyが必要なのがね……。
HttpListenerで自前で書くのは独自のサーバになってしまうのでなるべくなら避けたいところ。他人がいじりづらいじゃん?となるとASP.NETかIronRuby。IronRubyはMonoでの動作が不安なところがいっぱいあるからなぁ。Monoでの不安はASP.NETもあるけどこっちはまだ試してない不安だしな。IronRubyはMonoでだめなところがいくらか分かってるし。
とりあえずASP.NETな方向でちょっと考えてみるか。そういやASP.NET上で動くIronRuby.Rackてなものがあるじゃんか*2。ASP.NETをサーバにしてIronRuby使えばいいのかそうか。
あとはプラグイン的な機構を考えないとなー。各インターフェースはプラグインになる方向で考えてるので、HTTPインターフェースを追加する際にGUIも本体と分けないといけない。まあ適当に作りながら分けますか。.NET3.5だからMEF使えないんだよなぁ。