きりかノート 3冊め

おあそびプログラミング

rb22-*なportがぜんぜんない

とくに結論のないはなし。

MacPortsにrb22-てportないんだけど、なんか例とかないの?」てメールが来た。

PortGroup rubyの確認用に手元では作ってるので、そいつを簡略化してgistに上げて「これ見て」と返信しておいた。

ruby.setup

MacPortsにはPortGroup(コード)という仕組みがあって、Portfileを簡単に書けるようにいろいろサポートしてくれる。

自分が担当する前(ruby-1.8.6以前のころ)から、PortGroup rubyにはruby.setupキーワード(tcl的にはproc)があって、これを使うと簡単にRubyのライブラリやツールがインストールできるようになっている。

前述のgistの例でいうと、

   ruby.setup          bundler 1.10.1 gem {} rubygems ruby22

で、この行のruby22をruby21にすればport:ruby21用のPortfileになる。(実際にはPortfileのファイル名も変えないとlintにはひっかかる)

これはrubygemsを使う例だけど、他にもいろいろなインストール手法に対応していて、

  • setup.rb
  • extconf.rb && make && make install
  • install.rb (1) basic_install.rb - 実行するとぜんぶインストールする。
  • install.rb (2) - config.saveを生成するタイプ。
  • make (このタイプpdumpfsしか見たことない…)
  • 単純にコピー

などが利用できるようになっている。でもいまどきはgemしかないよね。

rb22-* なportはなぜないのか / そもそもいるの?

直接にはだれもコミットしてないからなわけだけど。いちお考えてみると、

  • brew使ってる
  • gem installすればいい

あたりだよねえ。きっと。

個人的にはgem install|updateすればいいし、portつくって更新に追従するのもめんどう、といったところ。

ただそれは自分がrubyユーザだからそう思うわけで、そうでない人が特定のコマンド使いたいだけで「gem installしてね」というのもどうなんじゃろ?とも思える。(冒頭の質問してきたひとはRailsやってるて書いてたのでgemやbundler使ったほうがよくね?と思うけれど)

たとえばackPerlsphinxblockdiagPythonなわけだけど、それぞれに応じてcpanやpip使いわけてね!ってのものなんだかびみょーな気持ちはぬぐえないよな。

cpan2portのように言語のパッケージシステムから自動でPortfile生成するのもあって、これのgem用のをつくるのもそんな難しくないけど、じゃあ欲しいかっていうとそうでもないよなあ。