2009-06-17
■ [ruby] Rubyの新世代パッケージングシステム、Ripの目指すところ
GitHub Rebaseで「Rip」というプロジェクトが開始した、というニュースを見たので調べてみた。
特徴は
- ディレクトリ・ファイル・github・gemなどいろんなソースからインストール可能。
- 必ずしもパッケージを「ビルド」する必要はなく、リポジトリから特定のバージョンを直接インストール可能
- "ripenv"という、仮想環境機能がある。ライブラリの新バージョンが出たときは、まず新しい環境を作って試してみるとか
- 依存関係はdeps.ripというテキストファイルに、一行一ライブラリで指定する。バージョンも込みなので、RubyGemsよりきっちり管理できる(?)
ということらしい。
状況は
- まだ始まったばかり
- RubyGemsを置き換える気はなく、共存すればいいと思っている
- けど、便利さゆえにシェアが逆転する可能性はいずれあるかも?
というところのようだ。
まとめると「今後に注目」ということで。
以下は調査ログ。
InfoQ: Rip: A New Package Management System for Ruby
- Githubチームの新作
- ディレクトリ・ファイル・github・gemなどいろんなソースからインストール可能
- "ripenv"という、仮想環境機能がある。ライブラリの新バージョンが出たときは、まず新しい環境を作って試してみるとか
- 別にRubyGemsが嫌いなわけじゃない、むしろ大好き
- Ripはライブラリの配布より使用側に重点を置いている
- どのバージョンが使われるのかちゃんと分かるようにしたい
RipとRubyGemsの違い
- RubyGemsはrequireをハックするが、Ripは$LOAD_PATHをハックする
- RubyGemsのような「require 'rubygems'」が不要
- RubyGemsは1つの環境に複数バージョンのライブラリをインストールするが、Ripは複数の環境を持ち、それぞれは1つのバージョンのライブラリしか持たない(?)
- RubyGemsは*.gemしかインストールできないが、Ripはもっといろいろなソースに対応する(予定)
- 要するにゴールが違うんだ。RubyGemsと共存できればいいと思っているよ。
- Ripだと、処理系(1.8, 1.9, JRuby,..)ごとに別の環境を作ることができる。簡単でしょ。
あと今後の予定についていろいろ。svnとかhgとかもサポートするつもりだそう。
JamesWilding.net - Rip: a RubyGems Replacement?
- RipはRubyの次世代パッケージングシステムを作るプロジェクトで、まだ荒削りだけどいい感じだよ。
- 「パッケージングシステム」っていうか、gitリポジトリからインストールとかできるから、そもそもパッケージ作る必要もないんだけど。
- なんならgistからだってインストールできる。もう*.gemspecは書かなくていいってわけだ。
Rip: A Next Generation Ruby Packaging System - Watch Out RubyGems!
- RipはRubyGemsのいくつかの欠点を解決すると共に、全く新しいアイデアも提供する。
- まだ"development alpha"バージョン
- 「パッケージ」というものを、別のレイヤで抽象化する
- いくつかの仮想環境を作り、それぞれ別のライブラリ群をインストールできる
- Gitと同様、分散指向。「中央のRipパッケージサーバ」みたいなものは存在せず、各人が好きなところから好きなものを入れる。
- だから、「gem install ライブラリ名」の代わりに、「rip install URI」のような感じになる。
- Ripはいろんな長所があるし、Gitがこんなに速く普及したのを考えると、すぐに人気になってもおかしくないと思うね。
GitHub Rebase #23
- RipはRubyのための新しいパッケージングシステムで、パない
- いろんなソースからインストールできる
- 仮想環境
- 実行時じゃなく、インストール時に依存が満たされてるかチェック
About Rip
例
$ rip install git://github.com/defunkt/grit.git v1.1.1b
Pythonのvirtualenvとpipにインスパイアされた
特徴
- いろんなパッケージ形式のサポート
- 仮想環境(ripenv)。あるripenvを作るためのレシピも簡単に作成・公開できる
- インストール時に、依存関係をチェック。(※実装はどうなってるんだろう?)
- 親切なエラーメッセージ
- Rip自身はRubyだけあれば動く
RubyGemsとの違い
- パッケージを「ビルド」しなくていい。Gitリポジトリにタグを打って「これが最新版だよ」とか。
- 依存関係はテキストファイルで、一行一ライブラリで指定する。
- 仮想環境。ライブラリのバージョンを上げるときは、既存の環境をコピーし、インストールして試してみる。うまく行ったら、古いほうの環境を消す。
- Ripではあるライブラリの「どのバージョン」が必要なのか指定するので、実行してみてからバージョン違いで動かない…みたいなことはない(?)
- 既存のライブラリをRipに対応させるには、ただdeps.ripというテキストファイルを書くだけ。
- 中央集権的な「Ripサーバ」は存在しない(良くも悪くも…)
あるプロジェクト(ambition)のdeps.rip
git://github.com/drnic/rubigen.git REL-1.3.0 git://github.com/seattlerb/ruby2ruby.git e3cf57559 # 1.1.8 git://github.com/seattlerb/parsetree.git 480ede9d9 # 2.1.1
ambitionをインストールすると、これら(とその依存ライブラリ)も同時にインストールされる。rip install deps.ripとかもできる。
- アンインストールは、単にripenvを削除すればいい。rip uninstall <package>もできるけど。-dで依存関係ごとアンインストール。
- 拡張ライブラリのコンパイルは、rip buildで行う。これはプロジェクトのRakefileを使ってrake rip:install を行う。
- Windowsには未対応 (※インタビューに1.0までには、って書いてあったね)