GitHub Rebaseで「Rip」というプロジェクトが開始した、というニュースを見たので調べてみた。

特徴は

ディレクトリ・ファイル・github・gemなどいろんなソースからインストール可能。

必ずしもパッケージを「ビルド」する必要はなく、リポジトリから特定のバージョンを直接インストール可能

"ripenv"という、仮想環境機能がある。ライブラリの新バージョンが出たときは、まず新しい環境を作って試してみるとか

依存関係はdeps.ripというテキストファイルに、一行一ライブラリで指定する。バージョンも込みなので、RubyGemsよりきっちり管理できる(?)

ということらしい。

状況は

まだ始まったばかり

RubyGemsを置き換える気はなく、共存すればいいと思っている

けど、便利さゆえにシェアが逆転する可能性はいずれあるかも？

というところのようだ。

まとめると「今後に注目」ということで。

以下は調査ログ。

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とかもサポートするつもりだそう。

RipはRubyの次世代パッケージングシステムを作るプロジェクトで、まだ荒削りだけどいい感じだよ。

「パッケージングシステム」っていうか、gitリポジトリからインストールとかできるから、そもそもパッケージ作る必要もないんだけど。

なんならgistからだってインストールできる。もう*.gemspecは書かなくていいってわけだ。

RipはRubyGemsのいくつかの欠点を解決すると共に、全く新しいアイデアも提供する。

まだ"development alpha"バージョン

「パッケージ」というものを、別のレイヤで抽象化する

いくつかの仮想環境を作り、それぞれ別のライブラリ群をインストールできる

Gitと同様、分散指向。「中央のRipパッケージサーバ」みたいなものは存在せず、各人が好きなところから好きなものを入れる。

だから、「gem install ライブラリ名」の代わりに、「rip install URI」のような感じになる。

Ripはいろんな長所があるし、Gitがこんなに速く普及したのを考えると、すぐに人気になってもおかしくないと思うね。

RipはRubyのための新しいパッケージングシステムで、パない

いろんなソースからインストールできる

仮想環境

実行時じゃなく、インストール時に依存が満たされてるかチェック

例

$ 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とかもできる。