【連載01】214.(Ansible)Rbenvを使用してRuby環境をインストールする


<b><font color="#ff6633">当記事はケーススタディの連載となっています。目次は[【こちら】](http://qiita.com/CsFactoryitter/items/6b8308b96afafd61ce5f
)です。</font></b>
<b><font color="#ff6633">最新のソースコードは[【GitHub】](https://github.com/csfactorygihubblog001/blogansible)で公開中です。</font></b>
サーバの責務は<b>[こちら](http://qiita.com/CsFactoryitter/items/032cc339048e52ee3586)</b>で確認ください。

##1.ruby設定概要
スクリプト言語Rubyをインストールする。Rubyは主にWebアプリケーションで利用されることが
多いと思いますが、今回は軽量なバッチシェルを作る場合に利用します。

![image](https://qiita-image-store.s3.amazonaws.com/0/98085/c59730a7-022b-da3d-5fcb-14827a42c5ff.png)

##2.playbookファイルの相関
![image](https://qiita-image-store.s3.amazonaws.com/0/98085/87607ec2-f4ac-2536-d973-c8941d7135f5.png)


##3.playbook(site.yml)
${ANSIBLE_HOME}/site.yml
[メインとなるplaybook(site.yml)](http://qiita.com/CsFactoryitter/items/3112c6d504d3b5a58011#3%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%A8%E3%81%AA%E3%82%8Bplaybooksiteyml)参照


##4.rubyインストール/設定のplaybook(/operations/1011_ruby.yml)

${ANSIBLE_HOME}/operations/1011_ruby.yml

playbook中のコメントの補足に関しては「[5.補足説明](#5%E8%A3%9C%E8%B6%B3%E8%AA%AC%E6%98%8E)」を参照。

```yaml:
# ========================================================
# Rubyをインストール(ruby.yml)
# ========================================================
- hosts: all
  sudo: no
  remote_user: root
  tasks:
    # ========================================================
    # rubyが既にインストールされている場合は実行しない
    # 為の確認コマンド
    # ========================================================
    - name: Rubyの存在確認
      shell: which ruby
      register: ruby_install
      failed_when: ruby_install.rc not in [0, 1]

    # ========================================================
    # 以下のRubyがインストールされている場合は設定しない
    # ========================================================

    # ========================================================
    # githubよりrbenv(Rubyの複数バージョン切替)をクローンする
    # ========================================================
    - name: gitからrbenvをクローンする
      git: repo=https://github.com/sstephenson/rbenv.git dest=~/.rbenv
      when: ruby_install.rc == 1

    # ========================================================
    # githubよりruby-build(rubyインストーラ)をクローンする
    # ========================================================
    - name: rbenvビルドプラグインをクローンする
      git: repo=https://github.com/sstephenson/ruby-build.git dest=/root/.rbenv/plugins/ruby-build
      when: ruby_install.rc == 1

    # ========================================================
    # rbenv init置換する
    # ========================================================
    - name: profile_init.sh内のREPLACE_EXECRBENVをrbenv initに置換する
      replace:  dest=/etc/profile.d/profile_init.sh regexp="^#REPLACE_EXECRBENV" replace='eval "$(rbenv init -)" >/dev/null 2>&1'
      when: ruby_install.rc == 1

    # ========================================================
    # profile_init.shを再読み込み
    # ========================================================
    - name: bashの実行
      shell: /etc/profile.d/profile_init.sh
      when: ruby_install.rc == 1

    # ========================================================
    # ruby 2.1.8バージョンをインストールする
    # ========================================================z
    - name: 2.1.8のインストール
      command: rbenv install 2.1.8
      when: ruby_install.rc == 1

    # ========================================================
    # ruby 2.2.4バージョンをインストールする
    # ========================================================z
    - name: 2.2.4のインストール
      command: rbenv install 2.2.4
      when: ruby_install.rc == 1

    # ========================================================
    # rbenv rehashを行う
    # ========================================================z
    - name: rehashを行う
      command: rbenv rehash
      when: ruby_install.rc == 1

    # ========================================================
    # ruby 2.1.8をデフォルトに設定
    # ========================================================z
    - name: 2.1.8をデフォルトに設定
      command: rbenv global 2.1.8
      when: ruby_install.rc == 1

    # ========================================================
    # rbenv rehashを行う
    # ========================================================z
    - name: rehashを行う
      command: rbenv rehash
      when: ruby_install.rc == 1

```


##5.補足説明




####5.a 実行処理概要

<dl>
<dt>Rubyのインストールは以下の手順で行います。</dt>
<dd>1. rbenvのgitクローン</dd>
<dd>2. rbenvビルド用のプラグインgitクローン</dd>
<dd>3. rbenv init - をログイン時に実行するように/etc/profile.d/profile_init.shにeval "$(rbenv init -)"を記述する。</dd>
<dd>4. 3のシェルを実行し現在シェル環境内でrbenvが使用できるようにする。</dd>
<dd>5. rbenvを使用してruby2.1.8,ruby2.2.4をインストールする</dd>
<dd>6. ruby2.1.8,ruby2.2.4の２versionのうち2.1.8を使用するように設定</dd>
<dd>7. rehashする。（~/.rbenv/shims/ に指定したRubyが使用できるように置き換える） </dd>
</dl>

※今回のrubyインストール関して冪等性の担保は
・_which rubyが実行出来た場合には上記処理は行わない。_
事にしていますが、
・_rbenvがインストールされている場合はインストール処理は行わない。_
・_rbenvを使用して該当バージョンがインストールされている場合はインストールしない。_
冪等性の担保は検討の余地ありと思います。


####5.b. 実行処理補足説明
rubyのインストールに関しては今後のバージョンアップや他バージョンでの実行確認が容易に行えるように
環境切替に便利なrbenvを使用して実行します。
rbenvはgithubよりクローンして実行します。
	ansibleでgitからクローンするにはgitモジュールを使用します。
#####gitモジュール
repoにURLを指定しクローンします。

```yaml:
git: repo=https://github.com/sstephenson/rbenv.git dest=~/.rbenv
```


#####commandモジュール
rbenvはモジュールが存在しない為commandモジュールを使用して実行します。
commandモジュールを使用する為,通常のshellと記述は同じです。

```yaml:
command: rbenv install 2.2.4
```

複数rubyバージョンをインストールした場合のデフォルト指定はrbenvのglobalを指定して行う。

```yaml:
command: rbenv global 2.2.4
```
				
最後にrbenvでバージョンを切り替えたり,gemをインストールした場合は
rehashを行い、~/.rbenv/shims以下に指定したバージョンをコピーする
(らしいが現在は不要になっている。rehashに関しては念の為。)

```yaml:
command: rbenv rehash
```

次回は「[215.java/Tomcatのインストール・配置](http://qiita.com/CsFactoryitter/items/027ad59752782d1da0ba)」について。

<b><font color="#ff6633">連載の目次は[【こちら】](http://qiita.com/CsFactoryitter/items/6b8308b96afafd61ce5f)です。</font></b>