windowsのbashでRails環境を構築してみる。（Windows 10 Anniversary Update版）

Windows 10 Anniversary Updateが開始されたということで再度Windows上にRubyおよびRailsをインストールする方法を記載します。
「[windowsのbashでRails環境を構築してみる。（Windows 10 Insider Preview 14316版）](http://qiita.com/chimame/items/3787a59eca1005b89eac)」を修正してもいいのですが、追記箇所が多くなったので新たに作りました。

#Ubuntu on Windowsのインストール
まずはUbuntuのbashが使えるようにします。
「スタートメニュー」→「設定」→「更新とセキュリティ」を開くと
![image](https://qiita-image-store.s3.amazonaws.com/0/70363/5c1b0988-2102-c5a7-984c-944b6b07c366.png)
"開発者モード"というのがあるので、これを選択します。

次に「コントロールパネル」→「プログラムと機能」→「Windowsの機能の有効化または無効化」を開き、「Windows Subsystem for Linux(Beta)」をチェック
![image](https://qiita-image-store.s3.amazonaws.com/0/70363/4a551fd1-0b66-820c-c4fb-45987067d5b4.png)
"Windows Subsystem for Linux(Beta)"を選択して、"OK"を押下（多分ここで再起動を行わないといけない）

続いては「Windowsキー＋R」→「cmd」でコマンドプロンプトを開き、`bash`と入力し、Enterキー
すると…途中で実行確認があるので`y`します。
Insider Previewではなかったのですが、続けてUNIXのユーザ名およびパスワードが聞かれるので任意に入力します。
![image](https://qiita-image-store.s3.amazonaws.com/0/70363/a28e8d4f-0ddd-752d-dff2-d85e6f61e67e.png)

ここまでくればbashのコマンドが実行可能です。
ついでにバージョンを確認しました。
![image](https://qiita-image-store.s3.amazonaws.com/0/70363/daedc2e9-d530-b065-8b3c-cd5168c38752.png)
"Ubuntu 14.04"だそうです。ちょっと古いかな。

#Rubyのインストール
##gitのインストール
前回のInsider Previewの通りに実行していきます。
まずはgitのインストールします。

```
sudo apt-get update
sudo apt-get install git
```

Insider Previewと違い管理者権限が必要らしく`sudo`をつけてコマンドを実行します。
途中に聞かれるパスワードは最初に設定したパスワードを入力すればOKなはずです。

##rbenvのインストール
続いて、rbenvをインストールします。

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

ここは前回通りで大丈夫です。
`.bashrc`に以下のパス設定を足します。

```
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
```

で、以下のコマンドで`.bashrc`を再読み込み（bash自体の再起動でもOK）

```
source ~/.bashrc
```

##Rubyのインストール
いよいよRubyのインストールですが、コンパイルに必要なものを先に入れておきます。

```
sudo apt-get install gcc build-essential libssl-dev libreadline-dev zlib1g-dev
```

ここも`sudo`が必要です。
以下のrbenvのコマンドでRubyインストールします。（ここは正直長いです）

```
rbenv install 2.3.1
```

2.4.0まだpreview版ですが、インストール可能ですので、お好きなバージョンを。
最後に以下のコマンドを打って、インストールしたRubyを有効化します。

```
rbenv global 2.3.1
ruby -v
```

![image](https://qiita-image-store.s3.amazonaws.com/0/70363/ae987a39-76db-d5a9-b449-719ae2319930.png)
これでRubyのインストールは完了です。

#Ruby on Railsのインストール
いよいよ大詰めのRailsのインストールです。まずは`bundler`を入れます。

```
gem install bundler
```

作業用フォルダを作って`Gemfile`を作成します。

```
mkdir rails_on_windows
cd rails_on_windows
bundle init
```

作成された`Gemfile`を以下のように編集

```diff:Gemfile
source "https://rubygems.org"

- # gem "rails"
+ gem "rails"
```

Railsを入れる前に、Insider Previewと同様に最大の難所であるNokogiriの設定をしておく。

```
gem update --system
sudo apt-get install libxml2 libxml2-dev libxslt-dev
bundle config build.nokogiri "--use-system-libraries --with-xml2-include=/usr/include/libxml2"
```

**※下記のエラーおよび対応は現在は発生しないとのコメントを頂きました。
　発生した場合にのみ対応すればOKです。**
で、Railsをインストールと行きたいところですが、このまま`bundle install`をしてもエラーが出てしまいました。

```
--- ERROR REPORT TEMPLATE -------------------------------------------------------
- What did you do?

  I ran the command `/home/chimame/.rbenv/versions/2.3.1/bin/bundle install --path vendor/bundle`

- What did you expect to happen?

  I expected Bundler to...

- What happened instead?

  Instead, what actually happened was...


Error details

    ArgumentError: parent directory is world writable but not sticky
```

解決は[https://github.com/bundler/bundler/issues/4599](https://github.com/bundler/bundler/issues/4599)に書いてある通り、以下のコマンドをまず実施。

```
find ~/.bundle/cache -type d -exec chmod 0755 {} +
```

それから以下の`bundle install`でRailsを入れます。
（これを書いている時点ではRails5.0がインストールされます）

```
bundle install --path vendor/bundler
```

Nokogiriでエラーにかからなかったらゴールは目の前です。

```
sudo apt-get install libsqlite3-dev
```

sqliteで動かすだけですが、とりあえず入れておきます。
続けて、Railsプロジェクトを作ります。

```
bundle exec rails new . --skip-bundle
```


Railsの起動にJavaScriptのランタイムがいるのですが、
「Node.jsをインストールする」か「以下のgemをGemfileで有効」のどちらかを実施します。

```diff:Gemfile
- # gem 'therubyracer', platforms: :ruby
+ gem 'therubyracer', platforms: :ruby
```

最後のインストールしてRails以外のgemを入れてしまいます。

```
bundle install
```

以下のコマンドでRailsを立ち上げます。

```
bin/rails s
```

ところが・・・
![image](https://qiita-image-store.s3.amazonaws.com/0/70363/1750bb61-0790-1ded-0cfa-f04b69a5dee2.png)

どうやら[https://github.com/Microsoft/BashOnWindows/issues/216](https://github.com/Microsoft/BashOnWindows/issues/216)に書かれていることらしく"Filesystem watchers like libinotify do not work"とのこと。

ならばということで、[https://gorails.com/setup/windows/10](https://gorails.com/setup/windows/10)に書かれているとおりに、`config.file_watcher = ActiveSupport::EventedFileUpdateChecker`をコメントアウトにします。

```diff:config/environments/development.rb
- config.file_watcher = ActiveSupport::EventedFileUpdateChecker
+ #config.file_watcher = ActiveSupport::EventedFileUpdateChecker
```

もう一度`bin/rails s`を実行すると
![image](https://qiita-image-store.s3.amazonaws.com/0/70363/7c34f53b-9110-7e5b-17af-0219a840f996.png)

Railsが立ち上がってますので、ブラウザで`http://localhost:3000`を指定して開くと

![image](https://qiita-image-store.s3.amazonaws.com/0/70363/a61ae2f7-bee3-6f4f-9b62-f512dd0f5513.png)

Windows 10 Anniversary Updateの当日にあげるはずが最後でハマりました。動くようになりましたが、もう少しまともに動くと嬉しいですね。
開発するにはHomebrewみたいなパッケージマネージャをWindowsにないとつらいかな。PackageManagementはイマイチだし…

そうは言っても、Windowsでしか開発できない人の参考になれば幸いです。

この記事のbashで作ったファイル等はエクスプローラで参照可能なので好きなエディタ等で作業できます。
![image](https://qiita-image-store.s3.amazonaws.com/0/70363/8fe62975-a8f8-cee3-fbd7-2f2f179fcba4.png)