WindowsでDockerを使ってCentOS上にrbenvなruby開発環境を構築する

# はじめに
Windows上にrbenvでバージョン切り替え可能なruby開発環境を構築する手順をまとめました。  
以下は実施した際の前提条件になります。

* Windows10 Pro
* 64bit
* メモリ8G
* Docker for Windows
* CentOS 7.4

# Docker for Windowsの導入
rbenvはWindowsでは利用できなさそうなので、Windows上にDockerでLinux環境を構築して、その中でrbenvを使って開発環境を構築します。

## インストーラの入手
* 以下からDLできる
    * https://docs.docker.com/docker-for-windows/install/  
安定版(Stable)実験版(Edge)がある、ここでは安定版を選択する

## インストール

* インストーラを起動してウィザード通り進める
    * Hypver-Vが有効になっていないと、有効にして再起動するか聞いてくるのでOKする

    * ”Hardware assisted virtualization and data execution protection must be enabled in the BIOS"    というエラーが出た場合、BIOSで当該項目を有効化する  
    ※機種依存なのであれこれ探す必要あり

    * 再起動後、サービスをスタートするか聞いてくるので、開始させる

    * タスクトレイのクジラのアイコン上で「Docker is running」と表示されていれば起動完了

    * コマンドプロンプトにて docker version をたたいて動作確認

## Dockerの基本操作  

* 以下に良くまとまっているので、実際に試して感覚を掴む  
https://www.ogis-ri.co.jp/otc/hiroba/technical/docker/part1.html

## あれやりたいときはどうするんだコマンド
* コンテナを終了せずに抜ける
    * Ctrl + p Ctrl + q
* 現在の変更内容をイメージとしてリポジトリに保存
    * docker commit コンテナID リポジトリ名
* イメージをDocker Hubに保存
    * docker push リポジトリ名    
※Docker Hubに予めアカウントとリポジトリを作っておく

## CentOSのイメージ導入
イメージはいろいろある、ひとまず[Docker社公式のリポジトリ](https://hub.docker.com/explore/)から取得する

* 以下コマンドでcイメージ取得
    * docker pull centos

* コンテナを開始
    * docker run -it centos

* バージョンを確認してみる
    * cat /etc/redhat-release  
※この時(11/30)は「CentOS Linux release 7.4.1708 (Core)」でした

## 使いやすい設定にする

* ターミナルのサイズなどを調整
* ターミナル上のフォルダ表示色を変える  
デフォルトではlsのフォルダ表示色が黒地に青なので耐えがたい視認性。以下の設定を追加し青地に白へ変更。
    * ファイル  
    ~/.bashrc
    * 追加設定  
    export LS_COLORS="di=01;44"
    * 以下に詳しい     https://cheaparchitec.wordpress.com/2016/04/11/dockerquickstartterminal%E3%81%AE%E8%A6%8B%E6%A0%84%E3%81%88%E3%82%92%E6%95%B4%E3%81%88%E3%82%8Bwindows/  
    http://spiral.world.coocan.jp/tips/computer/lscolor.html
* viをvimに変える
    * ファイル  
    ~/.bashrc
    * 追加設定  
    alias vi='vim'
* タイムゾーンを日本にする
    * ファイル  
    ~/.bashrc
    * 追加設定  
    export TZ="Asia/Tokyo"
* 日本語を表示できるようにする
    * 前準備  
    yum -y reinstall glibc-common  
    localedef -v -c -i ja_JP -f UTF-8 ja_JP.UTF-8; echo "";
    * ファイル  
    ~/.bashrc
    * 追加設定  
    export LANG="ja_JP.UTF-8"

# rbenvのインストール
以下が参考になりました。ありがたや。
[CentOSにrbenvをインストール](https://qiita.com/AkyndKnight/items/8ce137f39f176c664bf9)

## gccのインストール
* yum install gcc -y

## makeのインストール
* yum install make -y

## bzip2のインストール
* yum install bzip2 -y

## gitのインストール
* yum install git -y

## rbenvをgitからcloneする
* git clone https://github.com/rbenv/rbenv ~/.rbenv

## rbenvのコンパイル
* cd ~/.rbenv && src/configure && make -C src

## パスを通す
~~~
echo 'PATH=$HOME/.rbenv/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
~~~

## ruby-build(rbenvのプラグイン)をclone
* git clone https://github.com/rbenv/ruby-build  ~/.rbenv/plugins/ruby-build  
※rbenv installコマンドを利用するために必須

## 動作確認
* rbenv -v
* rbenv install -l

# rubyのインストール

## ビルドに必要なパッケージのインストール
* yum install -y openssl-devel readline-devel zlib-devel

## rbenvでrubyのインストール
* rbenv install 2.4.2

## 切り替え
* rbenv global 2.4.2

## パスを通す
~~~
echo 'PATH=$HOME/.rbenv/shims:$PATH' >> ~/.bashrc
source ~/.bashrc
~~~

## 動作確認
* ruby -v

## 別のバージョンも入れてみる
* rbenv install 2.3.3

## 切り替えと確認
* rbenv global 2.3.3
* ruby -v

# 所感
4年落ちのデスクトップPCでも、特にストレスなく使えました。
きちんとdocker imageにタグをつけて管理していけば、切り戻しも簡単に行えるので、実用性は高いと思います。
無料でこんなにいろいろできるなんて、すごい時代だなぁ。

以下は細かい点。

* dockerの操作感はgitに似ている気がします。なれると使いやすい。

* rbenvは言うまでもなく便利。あとrehashは不要になっている様です。

### 18/02/06追記
3ヶ月ほど、簡単なスクリプト開発などで使用してみた感想は以下です。

* vimが使いこなせない身としては、開発環境というより実行/検証環境になりがち。
* VSCodeでコードを書いて、Power Shellでファイルを送り込むというスタイルに落ち着いた。
* Docker for Windowsのアップデートは、安易にやらないほうが良いかもしれない。  
※私の環境では 17.12.0-ce-win47 辺りにアップデートした後、PCがクラッシュしてDockerの再インストールを余儀なくされました。
今は 17.09.1-ce-win42 で問題なく利用できています。