RVM

バージョン管理Ruby開発環境CLIgemset多機能

GitHub概要

rvm/rvm

Ruby enVironment Manager (RVM)

ホームページ:https://rvm.io
スター5,174
ウォッチ160
フォーク1,029
作成日:2009年8月24日
言語:Shell
ライセンス:Other

トピックス

jrubymri-rubymrubyrbxrubiniusrubyruby-environmentruby-versionsrvmtruffleruby

スター履歴

rvm/rvm Star History
データ取得日時: 2025/7/20 02:56

言語バージョン管理ツール

RVM(Ruby Version Manager)

概要

RVMは、Rubyの複数バージョンとgemsetを管理する最も歴史あるバージョン管理ツールです。gemsetによる完全な依存関係の分離、複数のRuby実装のサポート、豊富な機能セットが特徴です。2009年にWayne E. Seguin氏によって作成され、Rubyエコシステムで最も広く使用されてきました。

詳細

主な特徴

  • gemset管理: プロジェクトごとに完全に独立したgem環境を作成
  • 複数実装サポート: MRI、JRuby、TruffleRuby、mruby、IronRuby等をサポート
  • 自動切り替え: ディレクトリベースの自動Ruby/gemset切り替え
  • インストーラー内蔵: Rubyのダウンロードとビルドが統合されている
  • 豊富な機能: パッチ適用、依存関係管理、アップグレード機能など
  • コマンド補完: bash/zshの高度な補完機能

gemsetシステム

RVMの最大の特徴は「Named Gem Sets」と呼ばれるgemset機能です。各プロジェクトで独立したgem環境を持つことで、依存関係の競合を完全に防ぎます。gemsetは共通のキャッシュディレクトリを使用するため、同じgemの複数コピーを持つ必要がありません。

最新機能(2024年)

  • Ruby 3.3.6、3.4.4のサポート
  • Ruby 3.5.0-preview1のサポート
  • OpenSSL 3.0対応の強化
  • macOS ARM(Apple Silicon)の完全サポート
  • セキュリティ強化(プロジェクトファイルからのコード実行防止)
  • Termux、Void Linux、Deepin等の新しいLinuxディストリビューション対応

メリット・デメリット

メリット

  • 完全な分離: gemsetによりプロジェクト間の依存関係が完全に分離
  • 多機能: バージョン管理に必要な機能がすべて揃っている
  • Ruby実装の多様性: JRuby、TruffleRuby等も簡単に管理
  • 成熟したエコシステム: 長い歴史と豊富なドキュメント
  • 自動化: .ruby-versionと.ruby-gemsetによる自動切り替え
  • チーム開発: 環境設定をファイルで共有可能

デメリット

  • 複雑さ: 機能が多すぎて初心者には扱いにくい
  • 重い: 起動が遅く、シェルの初期化時間に影響
  • 侵入的: cd コマンドのオーバーライドなど、シェル環境への影響大
  • メモリ使用: 多くのメタデータを保持するため、メモリ使用量が多い
  • Windows非対応: WSL/Cygwinが必要

参考ページ

書き方の例

インストール(Linux/macOS)

# GPGキーのインポート(推奨)
gpg --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

# インストールスクリプトの実行
\curl -sSL https://get.rvm.io | bash -s stable

# RVMの読み込み
source ~/.rvm/scripts/rvm

# インストール確認
rvm --version
type rvm | head -n 1  # "rvm is a function" と表示されるはず

シェル設定(.bashrcまたは.zshrcに追加)

# RVMの自動読み込み設定
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

# PATHの設定(通常は自動で追加される)
export PATH="$PATH:$HOME/.rvm/bin"

基本的な使い方

# 利用可能なRubyバージョンの一覧
rvm list known

# Ruby 3.3.0のインストール
rvm install 3.3.0

# JRubyのインストール
rvm install jruby-9.4.5.0

# TruffleRubyのインストール
rvm install truffleruby

# インストール済みRubyの一覧
rvm list

# デフォルトRubyの設定
rvm use 3.3.0 --default

# 現在のRubyバージョン確認
rvm current
ruby -v

gemset管理

# 新しいgemsetの作成
rvm gemset create myproject

# gemsetの使用
rvm use 3.3.0@myproject

# または一度に指定
rvm use 3.3.0@myproject --create

# gemset一覧の表示
rvm gemset list

# 現在のgemsetの確認
rvm gemset name

# gemsetのコピー
rvm gemset copy 3.3.0@oldproject 3.3.0@newproject

# gemsetの削除
rvm gemset delete myproject

# グローバルgemsetの使用(全gemsetで共有)
rvm use 3.3.0@global
gem install bundler rake

プロジェクトごとの管理

# プロジェクトディレクトリで設定
cd /path/to/myproject

# .ruby-versionファイルの作成
echo "3.3.0" > .ruby-version

# .ruby-gemsetファイルの作成
echo "myproject" > .ruby-gemset

# ディレクトリ移動時に自動切り替え
cd ..
ruby -v  # システムRubyまたは別のバージョン
cd myproject
ruby -v  # 3.3.0に自動切り替え
rvm gemset name  # myprojectが選択されている

高度な使い方

# Rubyインストール時のオプション指定
rvm install 3.3.0 --with-openssl-dir=/usr/local/opt/openssl

# パッチの適用
rvm install 3.2.0 --patch /path/to/patch.diff

# 複数バージョンでのコマンド実行
rvm all do ruby -v
rvm 3.2.0,3.3.0 do bundle install

# gemsetのエクスポート/インポート
rvm gemset export Gemfile.lock.gems
rvm gemset import Gemfile.lock.gems

# Rubyバージョンのアップグレード
rvm upgrade 3.2.0 3.3.0

# RVM自体のアップデート
rvm get stable

gemsetとBundlerの連携

# プロジェクトセットアップ
mkdir myapp && cd myapp
rvm use 3.3.0@myapp --create

# .ruby-versionと.ruby-gemsetをコミット
echo "3.3.0" > .ruby-version
echo "myapp" > .ruby-gemset
git add .ruby-version .ruby-gemset

# Bundlerのインストール
gem install bundler

# Gemfileの作成
bundle init

# 依存関係のインストール(gemset内に隔離)
bundle install

# binstubsの作成(推奨)
bundle binstubs --all

トラブルシューティング

# RVMの再読み込み
rvm reload

# 問題の診断
rvm requirements
rvm doctor

# キャッシュのクリア
rvm cleanup all

# gemsetのリセット
rvm gemset empty myproject

# RVMの完全な再インストール
rvm implode
# その後、再度インストールスクリプトを実行