きりかノート 3冊め

おあそびプログラミング

RubyCocoaをふつーのgemにしたい

だいぶ前から考えてた、RubyCocoaをふつーのgemにすることに挑戦してみた。アプリ用の.frameworkはまだ手を付けてないけど、拡張ライブラリのほうは`rake test`が全部通るとこまできた。

-現状の課題

今のRubyCocoaはほとんど全部の機能がRubyCocoa.frameworkのほうに入っているので、rubyスクリプトから使う場合にも必ずフレームワークの配置が必要になる。フレームワークは特定のバージョン・構成のlibrubyにリンクして、ちょっとしたスクリプト書くときや、いろんなバージョンで検証したいときにけっこう手間がかかる。

目標はこんなところ。

作業の流れ(ここまで)

とりあえず、`bundle gem --ext`で新規に用意したものに、framework/src, test/のファイルを入れて試してみて、問題や変更点を洗い出し。

めどが立ったので、実際のリポジトリでブランチ切って作業。

  • bundleの生成ファイルを追加
  • ソースファイルを移動
  • 拡張ライブラリのコンパイルをextconf.rbにお任せに
  • テストを調整
    • minitestからtest-unitに
    • ファイル名をtest_*.rbから*_test.rbに変更。(生成されたRakefileの形式に合わせる)
    • testディレクトリで実行することを想定した相対パスまわりの対応。
  • 結果的にいらなくなったファイルを整理。

だいたい1日半くらい。思ったより簡単に対応できた印象。

今後の予定

残ってるRubyCocoa.frameworkは、NSBundleでrubycocoa.bundleをロードして、dlopenから初期化関数を呼び出すみたいな感じになる予定。.framework自体はlibrubyにリンクしない形式にして、場合によっては複数のバージョンのrubycocoa.bundleを使い分けできるように準備しておく。