三度llenvを作ってみた!今度はrubyだよ!

常にマイブームなllenvシリーズの第3弾です。

今回は過去のやつとはコンセプトが違ってます。bundlerの様に常にllenv exec hogehogeで使うことを想定しています。その分中身は相当すっきりしました。で、調子に乗ってrubygemsで公開しちゃいました。

概要的な

declareというのを外部で定義できるようにしてるので、正直LLとかどうでもよくて、shellスクリプトでインストールの部分と実行の部分を書けるものならなんでもいけるような気はします。とりあえず、以下の4つはgemの中にぶち込んで有ります。

  • node-0.9.3
  • perl-5.16.2
  • python-2.7.3
  • ruby-1.9.3-p327

使い方は簡単。

$ cd your-project
$ echo ruby-1.9.3-p327 > .llenv

まずこんな感じでプロジェクトのトップに.llenvというファイルを置いて、そこにdeclareの名前であるLLのバージョンを書いておきます。あとは

$ llenv install
$ llenv exec rackup

とかするだけで、あら不思議、rvmとかrbenvとか自分のとこで頑張って設置しなくても勝手にrubyのインストールからbundle installまでやってくれます、多分。LLのインストール先は~/.llenvで、モジュールはプロジェクトの中に作られます(pythonだけはvirtualenvの中に作られます)。初回は当然時間かかりますが、あとは同じLLのバージョン使うプロジェクトだったらLLのインストールは省略されるのでチョッパヤだと思います。

ちなみに簡単にできた理由は、どの言語もインストーラとローカルパッケージ管理の仕組みが非常によくできてるからで、あまり頭は使わずにありがたくそのまま使わせていただきました。何やってるかはgithubのdelrareの中を見てもらえれば一目瞭然かと思います。shellスクリプトが下手くそなのはご愛嬌。

あと、この先オプションとか綺麗にしていくのは誰かに期待したいところ。僕はこれを使ってHerokuっぽいものでも作ろうかなと思ってるのでそっちが先かなぁ〜。

gem作り

超絶簡単でした。

$ bundle gem ruby-llenv

これでスケルトンできるので、あとは作って、gemspec書いて、

$ bundle build
$ bundle install

で確認して

$ bundle release

で終わり。githubに勝手にタグ切ってくれました。

まとめ

ちなみに、中身はforemanのコードを大いに参考にさせてもらいました。

もちろん、テストとか一切ないです!怖い!ではまた~