【Ruby】Ubuntu での Ruby 開発環境構築

# はじめに
2020/7/7 時点で Ruby の環境構築をしてみたので、書き起こします。けっこうたくさんの方が記事にしていらっしゃいますが、自分でアウトプットするとそれだけでも勉強になるので。

# 導入環境
- Ubuntu 20.04 LTS (64bit)
    - Windows 10 Virtual Box内にインストールしています。
 
    
（注意）同じような Ruby バージョン管理ツールに、「RVM」がありますが、rbenv と RVM は非互換なので、「RVM」が入っていない環境を準備します。

# 入れるもの
複数のRubyバージョンの管理ができる rbenv というツールも一緒に入れます。複数のRubyバージョンを入れられるだけでなく、プロジェクト毎に使用するRubyのバージョンを指定することができるようになります。
　また、rbenv のオプション扱い（？）ですが、ruby-build も導入します。

- rbenv 1.1.2-30-gc879cb0
    - ruby-build 
- Ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux] 

※どちらも、2020/7/7 時点で最新の安定バージョン、だと思います。


# 大きな流れ
流れはこんな感じです。
　0. git をインストールしておく。
　1. 事前に必要なツール、パッケージを導入する。
　2. rbenv のインストールと環境設定
　3. ruby-build のインストール
　4. Rubyのインストール


# 手順0. git のインストール
git 自体は環境構築とは直接関係がないのですが、rbenv, ruby-build のインストールの際、github からダウンロードします。このため、git をあらかじめ入れておいてください。
インストール方法は、[こちら](http://git-scm.com/download/linux) に書かれていますが、`apt-get`コマンド一つで完了です。
※必要に応じて、`sudo` を頭につけてください。

```
apt-get install git
```


# 手順1. 必要なツール、パッケージの導入

詳しくは[こちら](https://github.com/rbenv/ruby-build/wiki)に書かれていますが、英語なので、、、
rbenv+ruby-build で必要な Ruby のバージョンをダウンロード、インストールする際、環境の違いでコンパイルエラーが起こったりする場合がある、とのことで、少なくとも下記パッケージは事前に入れておいた方が良いよ、ということです。

一気に入れる場合は、下の長いコマンドをコピペして実行してください。
※必要に応じて、`sudo` を頭につけてください。

```
apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev
```

「libgdbm6」が使えない環境の場合は、「libgdbm5」でやってみて、とのことです。
それぞれのパッケージが何か、については、自分でも調べてみてもよく分からないものが多い、というより、必要になって使う場面にならないと分からなそうなので、興味がある方はそれぞれ調べてみてください。

<details><summary>【補足】事前に必要なパッケージの一覧（自分なりに調べてみた）</summary><div>
※ あくまで2020/7/7 時点で ruby-build の説明に記載のあったものです。

| パッケージ名 | これって何？ | 自分の環境に個別に入れてみたときの反応 |
|:--|:--|:--|
| autoconf | configure スクリプトの自動生成ツール  |   |
| bison | パーサジェネレータの一種。コンパイルのときに使われるみたい |   |
| build-essential | 名前の通り、開発に必要なビルドツール一式が入ってるみたい。 |   |
| libssl-dev | SSL関連の開発用ツールキット |   |
| libyaml-dev | YAML関連の開発用ライブラリ |   |
| libreadline6-dev | GNU readline のライブラリらしいが、何の機能かよく分からない・・・ |  libreadline-dev をすすめられ、libncurses-dev が依存でインストールされました |
| zlib1g-dev | 圧縮(gzip, pkzip )に関するライブラリ |　|
| libncurses5-dev | ncurses関連の開発用ライブラリ。端末に依存しない形式でテキストユーザインタフェース (TUI) を作成するためのAPIを提供するそうです|  |	 	
| libffi-dev | Foreign Function Interface に関するライブラリ。他の言語で書かれたメソッドを呼び出す際とかに使われるんだと思います。 |  |
| libgdbm6 | GNU dbm データベースルーチン (ランタイム版) |  |		
| libgdbm-dev | GNU dbm データベースルーチン (開発用ファイル) |  |		
| libdb-dev | Berkeley Database Libraries [development] | → libdb5.3-dev が追加でインストールされました。|
</div></details>



# 手順2. rbenv のインストールと環境設定

## 2-1. rbenv のインストール
rbenv のインストールは、`git clone` を使って github からダウンロードし、ホームディレクトリの`.rbenv`フォルダーに設置します。

```
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
```

## 2-2. rbenv の環境設定1 パスを通す
rbenv の環境設定として、`~/.rbenv/bin`へのパスを通します。[公式](https://github.com/rbenv/rbenv)だと、Ubuntu desktop 環境の場合は、.bashrc にパス設定を追加するように、と記載されています。ので、下のようにコマンド実行すればOKです。

```
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
```

<details><summary>【補足】.bashrcではなく、.profile に書く場合</summary><div>
個人的に .bashrc にパスの設定を書く、というのがなんだか筋が悪いような気がしています。環境変数を書くなら .profile か、.bash_profile じゃないのかなぁ、と思うので、自分の環境では .profile に書き込みました。

.profile にパス設定を記述する場合は、.profile をエディタで開いて、下記コードを追記して下さい。

```
if [ -d "$HOME/.rbenv/bin" ] ; then
	PATH="$HOME/.rbenv/bin:$PATH"
fi
```
</div>
</details>

## 2-3. rbenv の環境設定2 rbenv init - を .bashrc に入れる。
`rbenv init -` を .bashrc 内で実行するように、下記コマンドを実行します。

```
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
```

その後、設定を反映させます。

```
source ~/.bashrc
```

<details><summary>【補足】rbenv init - を .bashrc に入れることについて</summary><div>
`rbenv init -` コマンドは、shimsディレクトリの再作成やら、rehash処理なんかをしているのですが、こちらのコマンド内でも $PATH に shims へのパスを追加しています。なので、.bashrc に入れるのはなんだか気持ち悪いのですが、他にもいろいろ処理をしているので、こちらは公式の指示に従いました。

※ .bashrc に入れると、なにか変更して `source ~/.bashrc` で設定反映する度に、パスが２重、３重と追加されてしまうんですよね、、、かといって.bashrc を変更したのに、`source ~/.profile`するのもなんか変ですし。
</div>
</details>


# 手順3. ruby-build のインストール
ruby-build をインストールします。ruby-build も github 上に公開されていますので、rbenv と同じように、`git clone` でダウンロードします。設置する場所は、`~/.rbenv/plugins/` ディレクトリの下です。

```
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

これで、`rbenv install` コマンドが使えるようになります。


# 手順4. rubyのインストール
`rbenv install` コマンドで、ruby の各バージョンのインストールができるようになっています。

まず、`rbenv install -l` で、インストールできる安定バージョンを確認します。

```
$ rbenv install -l
2.5.8
2.6.6
2.7.1
jruby-9.2.12.0
maglev-1.0.0
mruby-2.1.1
rbx-5.0
truffleruby-20.1.0

Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all' to show all local versions.
```

通常版Ruby の 2020/7/7 時点での最新安定版は 2.7.1 のようなので、そちらをインストールする場合は、バージョンを指定します。

```
rbenv install 2.7.1
```

インストール後、通常使う ruby のバージョンとして設定するには、`rbenv global` を使います。

```
rbenv global 2.7.1
```

最後に、インストールしたrubyのバージョンをshimsに反映させるために、`rbenv rehash` を実行します。今後、ruby の別バージョンを入れたり、gem を追加したりした時は、`rbenv rehash` を行った方がいいそうです。

```
rbenv rehash
```

エラーが出ていなければ、これで ruby の実行ができるようになっています。
'ruby -v' でバージョンの確認ができます。

```
$ ruby -v
Ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
```

また、`irb`を使って "Hello, World!" を表示させてみます。

```
$ irb
irb(main):001:0> puts "Hello, World!"
Hello, World!
=> nil
irb(main):002:0> 
```