トップ «前の日記(2009-06-10) 最新 次の日記(2009-06-18)» 編集

Route 477



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のvirtualenvpipにインスパイアされた

特徴

  • いろんなパッケージ形式のサポート
  • 仮想環境(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までには、って書いてあったね)