chruby
GitHub概要
スター2,889
ウォッチ47
フォーク193
作成日:2012年8月1日
言語:Shell
ライセンス:MIT License
トピックス
なし
スター履歴
データ取得日時: 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に委譲
- 設定ファイルなし: 複雑な設定は不要
動作原理
RUBIES配列に利用可能なRubyのパスを格納chruby関数で指定されたRubyを選択PATH、GEM_HOME、GEM_PATH環境変数を直接操作- シェルのハッシュテーブルをクリアして新しい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 # デバッグモード無効