インストール - Ruby

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

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のインストールと設定

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コマンドが存在する。