👻

PythonのuvライクなRuby用インストーラーのrvについて

に公開

GA technologiesでソフトウェアエンジニアをしている中坂です。

最近よく使われるようになっているPythonのパッケージ&プロジェクトマネージャーにuvがあります。pipの代替として作られたものでRustで実装されています。uvはRustでいうところのcargoのような、プロジェクトマネージメントやスクリプト実行の責務まで包含した総合的な開発ツールという位置づけです。

rvはこのuvのRuby版に相当するものです。

https://andre.arko.net/2025/08/25/rv-a-new-kind-of-ruby-management-tool/

https://github.com/spinel-coop/rv

開発者はbundlerの作者でありメンテナーをやっていたAndré Arko氏。氏はRuby/Rails関連のOSSでメンテナーをやっている人たちが集まっているSPINELというチームの一員です。このチームはGEOMYSにインスパイアされたOSSのメンテナ集団らしいです。こういうOSSメンテナによる技術チームみたいなものを作るムーブメントがあったことを初めて知りました。

bundlerの作者がuvにインスパイアされて作ったというツールということで興味が沸いたので調べてみました。

rvのインストール

READMEにしたがって、homebrewでinstallしてみます。

$ brew install rv
$ echo 'eval "$(rv shell init zsh)"' >> ~/.zshrc
$ eval "$(rv shell init zsh)"

Rubyのインストール

まずは適当なRubyのバージョンをインストールしてみます。

$ echo "3.4.5" > .ruby-version
$ time rv ruby install 3.4.5
Installed Ruby version ruby-3.4.5 to /Users/sample_user/.rubies
rv ruby install 3.4.5  0.32s user 0.84s system 46% cpu 2.478 total

Rubyのインストールの速さを売りにしているだけあって、ほんの数秒でインストールが終わりました。

homeディレクトリに.rubiesができています。.rubiesの中身を見てみましょう。

$ tree ~/.rubies -a -L 2 -I ".*"
/Users/sample_user/.rubies
└── ruby-3.4.5
    ├── COPYING
    ├── COPYING.ja
    ├── ChangeLog
    ├── INSTALL_RECEIPT.json
    ├── NEWS.md
    ├── README.md
    ├── bin
    ├── include
    ├── lib
    ├── libexec
    ├── sbom.spdx.json
    └── share

ruby-major.minor.patchというバージョンでディレクトリができているようです。

では別のバージョンもインストールしてみます。

$ rv ruby install 3.4.3
$ ls -la ~/.rubies
ruby-3.4.3
ruby-3.4.5

他のバージョンもこんな感じで~/.rubiesに並列にインストールされていく流れになっています。

速さのカラクリ

rvはspinel-coop/rv-rubyからビルド済みのバイナリを落としてきています。つまりruby-buildのようなビルドツールを使っていません。

tar.gz形式で圧縮されたビルド済みバイナリをダウンロードして展開するだけなので速いわけです。

しかしバイナリということはビルド先のプラットフォームには制限があるのでは?と思い調べたところ、やはり対応プラットフォームは限られていました。Windowsには対応していません。おそらく現状はほぼPoCなので必要最小限のものだけにしているのだと思います。

  • arm64_sonoma (M1/M2 Mac)
  • x86_64_linux
  • arm64_linux

https://github.com/spinel-coop/rv-ruby/releases

一応名誉のために書いておきますが、一度DLしたtar.gzはキャッシュしていたり、rayonというRustのイテレータを簡単に並列処理にしてくれるcrateを使ってローカルのRubyのtar.gzの検索を高速にする工夫などもされています。
https://github.com/rayon-rs/rayon

その他の機能

Rubyの高速なインストール、rvはまだこの機能のみです(一部listenvコマンドなどはあります)。なので現状rvはRustで実装されたRubyのビルド済みバイナリインストーラーにすぎません。

ただし、PLANS.mdをみると今後の開発計画が書かれており、なかなか野心的なのでいくつかピックアップしてみます。

  • rvm, rbenv, chruby, asdf, mise, ruby-build, ruby-install, bundler, rubygems を置き換えてパッケージマネージャではなく統合開発ツールにする
    • 複数バージョン切り替えはもちろん完備
    • rv tool install hogeのような感じで隔離された環境を作る
    • gemのインストールもRuby同様高速にインストールする
  • KDLを用いたrbproject.kdlというファイルでプロジェクトやバージョンなどの全てのコンフィグファイルをまとめる
  • rv run script.rbのような形式でスクリプト実行をした際に、まだインストールされていないgemがあっても自動で隔離された環境にインストールして実行できるようにする

等々、Ruby本体にバンドルされたらなかなか便利そうです。ただし、どれもまだまだ構想段階で実装されていない状態になっています。

最後に

bundlerの作者がuvライクなRubyのインストーラーを作ったということで実際にどんなものか試してみました。

まだRubyを高速にインストールするという機能しかないものの、今後の構想は野心的で面白いです。

Hacker Newsではmiseでいいのでは?とか現状に困っていないという意見がもちろん多いですが、miseはRubyのinstallにruby-buildを使っているので、個人的にはそのバックエンドにrvが使われると少し嬉しいのでは?と思ったりもします。

まだまだ開発が始まったばかりなので業務でいきなり導入するようなフェーズではないですが、今後の開発には注目したいです。

GA technologiesではこのようにRubyやRailsに関するライブラリやツールを使った開発が好きなソフトウェアエンジニアを求めています。もし興味があれば下記のリンク、もしくは私のXのアカウントまでご連絡ください。

https://ga-technologies-engineering.notion.site/GA-technologies-9794c78bc56c4011a03f7f3dcf91a18f

リソース

株式会社GA technologies

Discussion