WSL（Ubuntu）にRuby on Ralis開発環境を構築する

Windows subsystem for linuxにUbuntuをインストールした環境にRuby on Rails開発環境を構築しようと思ったので、手順をまとめました。 
要所要所にnokogiriに関する情報を名指しで出してますが、これはnokogiriで躓いたためです。 
以下を参考に、Rails 5.1.6を導入しています。 
[Ruby on Rails 4.2 を Ubuntu にインストールする手順をかなり丁寧に説明してみました](https://www.oiax.jp/rails/zakkan/rails_4_2_installation_on_ubunt.html) 

# 構築する内容  
Windows10（バージョン 1709） 
Ruby 2.5.1 
Rails 5.1.6 
Ubuntu 16.04.4 LTS(windows subsystem for linux) 
以上を構築していきます。

# 手順
メインは、Ruby on Rails環境構築ですので、WSLの導入などはさらっと行きます。

## Windows subsystem for linux有効化  
　「Windowsの機能の有効化または無効」からWindows subsystem Linuxを有効にする。 
　Windows StoreからUbuntuをインストール & コマンドライン起動

## Ruby on Railsの開発環境構築  
### パッケージのインストール(とアップデート)  
```  
# アップデート
$ sudo apt-get update  

# 必要なパッケージのインストール
$ sudo apt-get -y install git curl g++ make  
$ sudo apt-get -y install libssl-dev libreadline-dev  
$ sudo apt-get -y install libyaml-dev libxml2-dev libxslt-dev  
$ sudo apt-get -y install sqlite3 libsqlite3-dev nodejs 
 
# nokogiriのための必須パッケージインストール  
$ sudo apt-get -y install build-essential patch zlib1g-dev liblzma-dev pkg-config  
```

### rbenvのインストール

```
$ cd
$ git clone git://github.com/sstephenson/rbenv.git .rbenv
```

### ruby-build のインストール

```
$ mkdir -p ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git
```

### Ruby のインストール
rbenvでRubyの最新バージョン確認  

インストールできる一覧を取得

```
$ rbenv install -list
```

listから、最新の2.5.1をインストール

```
$ rbenv install 2.5.1
※ちょっと待ちます…
```

systemに一度2.5.1を適用させる

```
$ rbenv global 2.5.1

# rbenvバージョン確認
$ rbenv version
2.5.1

# rubyのバージョン確認
$ ruby -v
ruby 2.5.1　xxxxx
```

### Railsのインストール

#### gemrcの作成
gemのインストールはドキュメントをインストールするため遅いので、以下を設定しておく。 
（遅くてもドキュメントなどあったほうがいい人は、この手順スキップです。）

```
$ vi ~/.gemrc
install: --no-document
update: --no-document
```

また、余談ですが、gem install でインストールする際は、-N オプションでで上記と同様な動作をします。  

```
# Rubygemsより
-N, -​-no-document - Disable documentation generation
```

#### Railsのインストール
システムにgemでインストールしてしまうのではなく、
bundlerで必要なものはvendor/bundleに格納し、
bundle execで呼び出す構成を作ります。

プロジェクトディレクトリ作成

```
$ mkdir project_name
$ cd project_name
```

プロジェクト毎にのRubyバージョンを固定できるようにするには、プロジェクトディレクトリ内で、以下を実行します。

```
$ rbenv local 2.5.1
```

プロジェクトの初期化

```
$ bundle init
Writing new Gemfile to /path/to/project/Gemfile
```
作成されたGemfileに、Railsを記載

```
$ vi Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

# Railsを5.1.6に固定（お好みで）
# gem "rails" だけでもOK（最新版）
gem "rails", "5.1.6"

```
プロジェクト内にgemインストールする

```
$ bundle install --path vendor/bundle
$ bundle exec rails new .
# Gemfileの上書を聞かれますが、上書きしてよいです。
```

## テスト実行
railsコマンドを実行するときは、bundle execをつけるのを忘れないでください。
プロジェクト内にrails をインストールしたためです。

```
bundle exec rails s
=> Booting Puma
=> Rails 5.1.6 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.11.3 (ruby 2.5.1-p57), codename: Love Song
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
```

実行したRailsにアクセス。
http://localhost:3000

こんな画面が出ればOKです。
![Screenshot-2018-4-1 Ruby on Rails.png](https://qiita-image-store.s3.amazonaws.com/0/104188/9de70cbe-e7e8-b742-cf13-e39c74403a58.png)


以上です。


# 補足
bundle install --path vendor/bundleに失敗した場合、以下を試して再実行してみてください。

```
$ bundle config build.nokogiri --use-system-libraries
$ bundle install --path vendor/bundle
```

nokogiriのインストールに躓いた場合、いくつか原因があるようですが、
僕の場合、「pkg-config」がないことによる問題でした。
公式のインストールガイドにも載っていないので、この問題に気付くのにだいぶ時間がかかりました。

失敗したときは、vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0-static/nokogiri-1.8.2/mkmf.logなどにエラー原因が出ていたりするので、見てみましょう。