chruby

バージョン管理Ruby開発環境CLI軽量シンプルUNIX思想

GitHub概要

postmodern/chruby

Changes the current Ruby

スター2,889
ウォッチ47
フォーク193
作成日:2012年8月1日
言語:Shell
ライセンス:MIT License

トピックス

なし

スター履歴

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

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

chruby

概要

chrubyは、わずか90行のコードで実装された超軽量なRubyバージョン管理ツールです。UNIX思想に基づいたミニマリストな設計により、シェル環境への影響を最小限に抑えながら、必要十分な機能を提供します。余計な機能を削ぎ落とすことで、高速で予測可能な動作を実現しています。

詳細

主な特徴

  • 超軽量: コア部分はわずか約90行のシェルスクリプト
  • 非侵入的: shimやcdコマンドのオーバーライドを使用しない
  • 高速動作: 直接PATHを操作するため、実行時のオーバーヘッドなし
  • 透明性: 動作が単純で理解しやすく、デバッグが容易
  • 標準準拠: 標準的なUNIXツールと慣習に従う
  • シェル統合: bash、zsh、fishをネイティブサポート

設計哲学「アンチ機能」

chrubyは意図的に以下の機能を「持たない」ことを特徴としています:

  • shimなし: rbenvやasdfのような実行ファイルのプロキシを使わない
  • cdフックなし: RVMのようなcdコマンドの上書きをしない
  • gemsetなし: 依存関係管理はBundlerに委譲
  • インストーラーなし: Rubyのインストールはruby-installに委譲
  • 設定ファイルなし: 複雑な設定は不要

動作原理

  1. RUBIES配列に利用可能なRubyのパスを格納
  2. chruby関数で指定されたRubyを選択
  3. PATHGEM_HOMEGEM_PATH環境変数を直接操作
  4. シェルのハッシュテーブルをクリアして新しいRubyを認識

メリット・デメリット

メリット

  • シンプルさ: コードが短く、動作が完全に理解可能
  • 高速性: shimを使わないため、Rubyの実行が高速
  • 予測可能: 魔法のような動作がなく、問題の原因を特定しやすい
  • 軽量: メモリ使用量が極めて少ない
  • 互換性: ruby-buildとruby-install両方と連携可能
  • 最小限の依存: 標準的なシェル機能のみを使用

デメリット

  • 機能限定: gemsetやプラグインシステムなどの高度な機能なし
  • 手動切り替え: デフォルトでは自動切り替えなし(auto.shが必要)
  • 別途インストーラー必要: Rubyのインストールにruby-installが必要
  • Windows非対応: ネイティブWindowsでは動作しない
  • 初期設定: シェル設定ファイルの手動編集が必要

参考ページ

書き方の例

インストール(Linux/macOS)

# Homebrewでインストール(macOS推奨)
brew install chruby ruby-install

# または手動インストール
wget https://github.com/postmodern/chruby/archive/v0.3.9.tar.gz
tar -xzvf v0.3.9.tar.gz
cd chruby-0.3.9/
sudo make install

# ruby-installも同様にインストール
wget https://github.com/postmodern/ruby-install/archive/v0.9.3.tar.gz
tar -xzvf v0.9.3.tar.gz
cd ruby-install-0.9.3/
sudo make install

シェル設定

# ~/.bashrcまたは~/.zshrcに追加
source /usr/local/share/chruby/chruby.sh

# 自動切り替え機能を有効にする場合
source /usr/local/share/chruby/auto.sh

# macOS + Homebrewの場合
source $(brew --prefix)/opt/chruby/share/chruby/chruby.sh
source $(brew --prefix)/opt/chruby/share/chruby/auto.sh

# カスタムRubyパスを追加する場合
RUBIES+=(
  /opt/rubies/*
  "$HOME/.rubies/*"
  /usr/local/ruby-*
)

基本的な使い方

# Rubyのインストール(ruby-install使用)
ruby-install ruby 3.3.0
ruby-install ruby 3.2.3
ruby-install jruby 9.4.5.0

# インストール済みRubyの確認
chruby

# Rubyバージョンの切り替え
chruby 3.3.0
chruby ruby-3.2.3

# 部分一致での切り替え
chruby 3.3  # 3.3.xの最新版に切り替え

# 現在のRubyバージョン確認
ruby --version
echo $RUBY_ROOT

# システムRubyに戻す
chruby system

自動切り替えの設定

# .ruby-versionファイルの作成
cd /path/to/project
echo "3.3.0" > .ruby-version

# auto.shが有効な場合、ディレクトリ移動時に自動切り替え
cd ..         # 親ディレクトリへ
ruby --version  # デフォルトまたはシステムRuby
cd project    # プロジェクトディレクトリへ
ruby --version  # 自動的に3.3.0に切り替わる

# .ruby-versionの階層的な検索
# プロジェクトルート/.ruby-version → 親ディレクトリ → ... → ホーム

ruby-installの詳細な使い方

# 利用可能なRubyバージョンを確認
ruby-install --list

# 最新の安定版をインストール
ruby-install ruby

# 特定バージョンをインストール
ruby-install ruby 3.3.0

# インストール先を指定
ruby-install --install-dir ~/.rubies/ruby-3.3.0 ruby 3.3.0

# ビルドオプションを指定
ruby-install ruby 3.3.0 -- --with-openssl-dir=/usr/local/opt/openssl

# JRubyをインストール
ruby-install jruby

# TruffleRubyをインストール
ruby-install truffleruby

環境変数の操作

# chruby実行後の環境変数確認
chruby 3.3.0
echo $RUBY_ROOT     # /opt/rubies/ruby-3.3.0
echo $GEM_HOME      # ~/.gem/ruby/3.3.0
echo $GEM_PATH      # ~/.gem/ruby/3.3.0:/opt/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0
echo $PATH          # /opt/rubies/ruby-3.3.0/bin:~/.gem/ruby/3.3.0/bin:...

# 一時的なRuby切り替え(サブシェル利用)
(chruby 3.2.3 && ruby script.rb)
ruby --version  # 元のバージョンのまま

Bundlerとの連携

# プロジェクトセットアップ
mkdir myapp && cd myapp
echo "3.3.0" > .ruby-version
chruby 3.3.0  # または自動切り替えが有効な場合は自動

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

# Gemfileの作成
bundle init

# 依存関係のインストール
bundle install

# binstubsの使用(推奠)
bundle binstubs --all
export PATH="./bin:$PATH"  # プロジェクトのbinを優先

chruby-execの使用

# chruby-execで特定のRubyバージョンでコマンド実行
chruby-exec 3.3.0 -- ruby -v
chruby-exec 3.2.3 -- bundle install
chruby-exec jruby -- irb

# スクリプトでの使用例
#!/usr/bin/env bash
chruby-exec 3.3.0 -- ruby <<'EOF'
  puts "Running with Ruby #{RUBY_VERSION}"
  # スクリプトの内容
EOF

トラブルシューティング

# chrubyが認識しているRubyを確認
echo $RUBIES

# 手動でRubyを追加
RUBIES+=("/path/to/custom/ruby")

# PATHの確認
which ruby
type ruby

# 環境変数のリセット
chruby_reset

# chrubyの再読み込み
source /usr/local/share/chruby/chruby.sh

# デバッグ情報の表示
set -x  # bashでデバッグモード有効
chruby 3.3.0
set +x  # デバッグモード無効