インストール - Ruby
概要
Rubyはバランスの取れた言語である。
その生みの親であるまつもとゆきひろ氏は、自分の好きな言語(Perl、Smalltalk、Eiffel、Ada、Lisp)の一部を融合させ、関数型プログラミングと命令型プログラミングのバランスをとった新しい言語を作り上げた。
1995年の一般公開以来、Rubyは世界中の熱心なコーダーを引きつけてきた。
2006年には、Rubyは大衆に受け入れられるようになり、世界の主要都市で活発なユーザーグループが結成された。
Ruby言語について議論する主要なメーリングリストであるRuby-Talkは、2006年には1日平均200通のメッセージが寄せられるまでになった。
近年はコミュニティの規模が大きくなり、1つの中心的なメーリングリストから多くの小規模なグループに議論が移行したため、メーリングリストの数は減少している。
Rubyは、世界のプログラミング言語の成長と人気を測る指標(TIOBE指標など)のほとんどで、トップ10にランクされている。
成長の多くはRubyで書かれたソフトウェア、特に、Ruby on Rails(Webフレームワーク)の人気に起因している。
また、Rubyは完全に無料である。
無償であるだけでなく、使用、コピー、変更、配布も自由となっている。
Rubyのインストール
パッケージ管理システムからインストール
sudo zypper install ruby
ソースコードからインストール
Rubyのビルドに必要なライブラリをインストールする。
# RHEL sudo dnf install curl patch bzip2 bison gperf make automake autoconf gcc gcc-c++ rust \ gdbm-devel ncurses-devel readline-devel zlib-devel libffi-devel openssl-devel libyaml-devel # SUSE sudo zypper install gcc gcc-c++ autoconf bison gperf libopenssl-devel libopenssl-1_1-devel libyaml-devel zlib-devel \ readline-devel libedit-devel gmp-devel libffi-devel rust cargo ruby2.5-devel # Raspberry Pi / Mobian sudo apt install curl patch build-essential make automake autoconf gcc rustc \ libgdbm6 libgdbm-dev libncurses5-dev libreadline6-dev zlib1g-dev libgmp-dev libffi-dev libdb-dev uuid-dev libssl-dev libyaml-dev # Manjaro ARM sudo pacman -S --needed base-devel rust libffi libyaml openssl zlib
Rubyの公式Webサイト、または、RubyのGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。
tar xf ruby-<バージョン>.tar.gz cd ruby-<バージョン>
Rubyをビルドおよびインストールする。
./autogen.sh mkdir build && cd build ../configure --prefix=<Rubyのインストールディレクトリ> --program-suffix=<サフィックス> --disable-install-doc make -j $(nproc) make install
もし、Rubyのビルドについて問題がある場合、Rubyのインストールガイドページで解説しているサードパーティーツールの利用が助けになる可能性がある。
RbEnvのインストール
RbEnvとは
RbEnvとは、Unix系システム上のRuby環境をシームレスに管理するツールである。
同一PC上で複数のRubyのバージョンを切り替えたり、作業中の各プロジェクトが常に正しいRubyバージョンで動作させるために使用される。
RbEnvの仕組み
RbEnvが環境変数PATH
に追加した後、ruby、gem、bundler等のRuby関連の実行ファイルを起動する時、まず、rbenv
コマンドが実行される。
次に、rbenv
コマンドは、現在のプロジェクトディレクトリをスキャンして、.ruby-versionファイルを探す。
.ruby-versionファイルが見つかった場合、そのディレクトリ内で使用するRubyのバージョンを決定する。
最後に、rbenv
コマンドは、/<RbEnvのルートディレクトリ>/versionsディレクトリ下にインストールされているRubyの中から、該当のバージョンを探す。
以下の例では、プロジェクトのRubyのバージョンを選んでいる。
cd <Rubyのプロジェクト> rbenv local 3.2.2
上記のように、プロジェクトディレクトリに.ruby-versionファイルが作成または更新されて、選択したRubyのバージョンになる。
別のディレクトリにある別のプロジェクトでは、全く別のバージョンのRubyを使用することができる。
最後に、RbEnvの仕組みのほとんど全ての場面では、bashやzsh等で記述されたプラグインを使用してカスタマイズすることができる。
ただし、RbEnvのシンプルさには利点もあるが、欠点も存在する。
- オーバーヘッドが大きい
- RbEnvは、Rubyへの呼び出しをすべてインターセプトするため、Rubyの実行時間に〜50[ms]のオーバーヘッドが追加されることがある。
- これは、Rubyのほとんどの使い方では気にならないが、速度が要求される場面では摩擦を引き起こす可能性がある。
- 厳密性
- RbEnvのプロジェクト間のバージョン分離が厳密であるため、グローバルな(システムレベルの)Rubyツールを保持し、それをプロジェクト内から呼び出すことが困難であると感じる場合がある。
- 同様に、あるRubyのバージョンを使用しているプロジェクトから、別のRubyのバージョンを使用しているスクリプトに"shell out"することができない。
- ユーザのホームディレクトリにインストールされたgemを認識できない
- RbEnvは
--user-install
オプションを付加してインストールしたGem、つまり、~/.gemディレクトリや~/.local/share/gemディレクトリにインストールされたGemの実行ファイルを検出できない。 - 解決策は、RbEnvが管理するプロジェクトで、これらのGemに依存しないようにする、または、適切な~/.local/share/gem/<エンジン名>/<バージョン>/binディレクトリを手動でPATHに追加することである。
- RbEnvは
RbEnvのインストールと設定
git clone
コマンドを実行して、RbEnvのGithubからダウンロードする。
cd <任意のディレクトリ> git clone https://github.com/rbenv/rbenv.git RbEnv または git clone https://github.com/rbenv/rbenv.git ~/.rbenv
RbEnvの環境変数を設定する。
# ログインシェルがBashの場合 vi ~/.profile または vi ~/.bash_profile または vi ~/.bashrc # ログインシェルがZshの場合 vi ~/.zshrc # ログインシェルがFishの場合 vi ~/.config/fish/config.fish
# ログインシェルがBashの場合
# ~/.profile または ~/.bash_profile または ~/.bashrc
export RBENV_ROOT="<RbEnvのインストールディレクトリ>"
eval "$($RBENV_ROOT/bin/rbenv init - bash)"
# ログインシェルがZshの場合
# ~/.zprofile
export RBENV_ROOT="<RbEnvのインストールディレクトリ>"
eval "$($RBENV_ROOT/bin/rbenv init - zsh)"
# ログインシェルがFishの場合
# ~/.config/fish/config.fish
set -Ux RBENV_ROOT <RbEnvのインストールディレクトリ>
status --is-interactive; and $RBENV_ROOT/bin/rbenv init - fish | source
再ログインまたはPCを再起動する。
インストール可能なRubyのバージョン
# LTS版のみ確認 rbenv install --l # 全てのバージョンを確認 rbenv install --list-all
Rubyのインストール
rbenv install
コマンドは、rbenvには付属していないが、ruby-buildプラグインによって提供されている。
Rubyをインストールする前に、ビルド環境に必要なツールやライブラリが揃っていることを確認する必要がある。
Rubyのビルドに必要なライブラリをインストールする。
# RHEL sudo dnf install curl patch bzip2 bison gperf make automake autoconf gcc gcc-c++ rust \ gdbm-devel ncurses-devel readline-devel zlib-devel libffi-devel openssl-devel libyaml-devel # SUSE sudo zypper install curl patch bzip2 bison gperf make automake autoconf gcc gcc-c++ rust \ gdbm-devel ncurses-devel readline-devel zlib-devel libffi-devel libopenssl-devel libyaml-devel # Raspberry Pi / Mobian sudo apt install curl patch build-essential make automake autoconf gcc rustc \ libgdbm6 libgdbm-dev libncurses5-dev libreadline6-dev zlib1g-dev libgmp-dev libffi-dev libdb-dev uuid-dev libssl-dev libyaml-dev # Manjaro ARM sudo pacman -S --needed base-devel rust libffi libyaml openssl zlib
もし、rbenv install
コマンドが見つからない場合は、ruby-buildをプラグインとしてインストールすることができる。
git clone https://github.com/rbenv/ruby-build.git /<RbEnvのインストールディレクトリ>/plugins/ruby-build
また、rbenv install
コマンドの代わりに、/<RbEnvのインストールディレクトリ>/versionsディレクトリのサブディレクトリとして、
手動でRubyをダウンロードしてビルド・インストールすることもできる。
このディレクトリのエントリは、ファイルシステム上の他の場所にインストールされたRubyのバージョンへのシンボリックリンクにもなる。
Ruby gemsのインストール
プロジェクトのRubyバージョンを選択する。
rbenv local <バージョン>
その後、通常の手順でGemをインストールする。
gem install bundler
Gemがインストールされている場所を確認する。
gem env home # 例 /<RbEnvのインストールディレクトリ>/versions/<バージョン>/lib/ruby/gems/...
※注意
スーパーユーザとして、Gemをインストールすべきではない。
通常、Rubyのバージョンはホームディレクトリにインストールされるため、ユーザが書き込み可能である。
Gemをインストールする際にパーミッションエラーが表示される場合は、"system"のRubyのバージョンがグローバルのままになっている可能性がある。
rbenv global <バージョン>
コマンドを実行して、再度試すこと。
Rubyのバージョンのアンインストール
RbEnvを使用してインストールしたRubyのバージョンは、/<環境変数RBENV_ROOT
>/versionsディレクトリに存在する。
もし、使用しなくなったRubyのバージョンを削除する場合は、該当するバージョンのディレクトリを削除するだけでよい。
また、特定のRubyのバージョンのディレクトリを見つける場合は、以下に示すコマンドを実行する。
rbenv prefix または rbenv prefix <バージョン>
ruby-buildプラグインには、削除処理を自動化するrbenv uninstall
コマンドが存在する。