RubyInstaller2でWindows環境にRuby 2.4 + Rails 5.0.2をインストールする

##2017.5.26追記：RubyInstaller2＝Ruby 2.4以降のRubyInstallerです

RubyInstaller2はRuby 2.4以降の正式なRubyInstallerに昇格しました。

参考：[Switch to RubyInstaller2 for Ruby\-2\.4 ? · Issue \#352 · oneclick/rubyinstaller](https://github.com/oneclick/rubyinstaller/issues/352)

これにより、RubyInstallerのダウンロードページにもRuby 2.4のインストーラが登場しています。

![Screen Shot 2017-05-26 at 17.15.33.png](https://qiita-image-store.s3.amazonaws.com/0/7465/f39bc351-250b-b5c4-5712-53f1d58cbb2b.png)

ただし、内部的にはRuby 2.3以前のRubyInstallerとRuby 2.4以降のRubyInstallerは別物になっています。
この記事の内容はRuby 2.4以降には適用できますが、2.3以前では適用できません。

また、この記事でいうところの「RubyInstaller2」は、「Ruby 2.4以降のRubyInstaller」のことだと考えて読み進めてください。

ややこしくてよくわからない点があれば、コメント欄で質問してもらってOKです。

##はじめに：更新が止まったRubyInstallerと、新登場したRubyInstaller2

これまではWindows環境でRubyをインストールする場合はRubyInstallerを使うのが手軽、とよく言われてきました。

https://rubyinstaller.org/

しかし、RubyInstallerは2017年3月6日現在、最新版の2.4.0ではなく、Ruby 2.3.3で更新が止まっています。

https://rubyinstaller.org/downloads/
![Screen Shot 2017-03-06 at 8.40.13.png](https://qiita-image-store.s3.amazonaws.com/0/7465/2908681b-ed36-c2fa-7aaf-23daec678698.png "Screen Shot 2017-03-06 at 8.40.13.png")

これはどうやら、RubyInstallerのメンテナの人が「忙しくてもう無理！」とメンテナンスをギブアップしてしまったのが原因のようです。

[Looking for a Maintainer that can get releases out faster · Issue \#348 · oneclick/rubyinstaller](https://github.com/oneclick/rubyinstaller/issues/348)

そんな中、別の開発者の人が「新しいRubyInstallerを作ったよ」と名乗り出ました。
それがRubyInstaller2です。

https://github.com/larskanis/rubyinstaller2

もしかすると、将来的にはこのRubyInstaller2がRubyInstallerの正式な後継者になるかもしれません。

参考: [Switch to RubyInstaller2 for Ruby\-2\.4 ? · Issue \#352 · oneclick/rubyinstaller](https://github.com/oneclick/rubyinstaller/issues/352)

将来的な話はどうなるかわかりませんが、とりあえず、この記事ではRubyInstaller2を使ってWindows環境にRuby 2.4とRails 5.0.2をインストールする手順を紹介します。

## 動作確認した環境

- Windows 10 Home (Mac内のVirtualBox)
- RubyInstaller2 2.4.0-8

## おことわり

僕は普段Windows環境でRubyの開発をしていません。
（Mac環境がメインです）

もし、正確な説明や、もっと良いやり方を知っている方がいたら、コメント欄や編集リクエスト等で優しく指摘してやってください。
よろしくお願いします。

それでは以下が手順です。

## MSYS2をインストールする

純粋にRubyだけを実行する場合はRubyInstaller2だけで完結しますが、Nokogiriやsqlite3のように、Cのライブラリを利用するgemをインストールする場合は、MSYS2というパッケージをインストールしておく必要があります。

これはRubyInstaller時代のDevelopment Kit (DevKit)に相当するものです。

インストーラは以下のページにあるので、これをダウンロードしてMSYS2をインストールします。

http://www.msys2.org/

・・・のはずなんですが、僕の環境ではなぜかインストーラ(msys2-x86_64-20161025.exe)が全く起動しませんでした。
（exeをダブルクリックしてもエラーメッセージもなく、一瞬で落ちてしまう）

というわけで、こちらのページにある msys2-base-x86_64-20161025.tar.xz   を取得し、コマンドプロンプト上でインストールを実行しました。
（ファイルの解凍には[7-Zip](https://sevenzip.osdn.jp/)を使いました）

http://repo.msys2.org/distrib/x86_64/

コマンドプロンプトを使うインストール手順は以下で説明されています。

https://github.com/msys2/msys2/wiki/MSYS2-installation

ざっくり説明するとこんな感じです。

- 解凍してできたディレクトリ（msys64）をCドライブ直下に移動。
- msys64ディレクトリにある、`msys2_shell.cmd`を実行。（上記のWikiではなぜか`msys2_shell.bat`になっている）
- MSYS2のシェル上で`pacman -Syuu`を実行してパッケージをアップデート。

## RubyInstaller2を使ってRuby 2.4をインストール

MSYS2をインストールしたら、RubyInstaller2を使ってRuby 2.4をインストールします。
インストーラは以下のページで取得できます。
本記事では rubyinstaller-2.4.0-8-x64.exe を使いました。

https://github.com/larskanis/rubyinstaller2/releases

Rubyのインストール自体はRubyInstallerと同様にウィザード形式で進んでいきます。

ウイザードが最後まで進むと、MSYS2の開発ツールとMINGWのコンパイラをインストールする画面が表示されます。

![Screen Shot 2017-03-04 at 16.01.59.png](https://qiita-image-store.s3.amazonaws.com/0/7465/f2d009a8-b8b1-8ac4-89ca-2a4f4a149987.png "Screen Shot 2017-03-04 at 16.01.59.png")

MSYS2のインストール（選択肢1）と、MSYS2のアップデート（選択肢2）は完了しているので、ここでは3を選択して実行します。

かなりたくさんのツールやパッケージをインストールするので、結構時間がかかります。
（僕の環境だと30分以上かかったかも？）

なお、この画面からMSYS2のインストールも実行できるように書いてありますが（選択肢1）、僕がやったときはなんども途中で失敗して再インストールを繰り返し続けたので、本記事ではMSYS2は事前にインストール＆アップデートすることにしました。

## Ruby 2.4がインストールできたことを確認

ここまで来たら、いったんRubyのバージョンを確認しましょう。

```
> ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x64-mingw32]
```

これでRuby 2.4がインストールできました。

## Railsのインストール

次にRailsをインストールします。

```
> gem install rails
```

この記事を執筆した時点ではRails 5.0.2がインストールされました。

もしかするとRailsインストール時に、いくつかのgem（Cライブラリを利用するgem）のインストールに失敗するかもしれません。
その場合は、RubyInstaller2の[README](https://github.com/larskanis/rubyinstaller2)に載っている方法を参考にして、gemをインストールしてみてください。

```
# sqlite3のインストール
> ridk exec pacman -S mingw-w64-x86_64-sqlite3
> gem install sqlite3 -v (バージョン番号) --platform ruby

# Nokogiriのインストール
> ridk exec pacman -S mingw-w64-x86_64-libxslt
> gem install nokogiri -v (バージョン番号) --platform ruby -- --use-system-libraries --with-xml2-include=c:/msys64/mingw64/include/libxml2 --with-xslt-dir=c:/msys64/mingw64
```

ただ、このあたりはエラーが出たのか出なかったのか記憶があいまいです。
実際にやってみた人がいたらどんな動きになったのかコメント等で教えてもらえると助かります。

Railsのバージョンが確認できればインストール完了です。

```
> rails -v
Rails 5.0.2
```

## Railsでサンプルアプリケーションを作ってみる

Railsで簡単なサンプルアプリケーションを作ってみましょう。
以下のようなコマンドを実行します。

```
> rails new rails-sandbox
> cd rails-sandbox
> rails s
```

### Nokogiriのエラーに対応する

しかし、`rails s`でサーバーを起動すると次のようなエラーが出るかもしれません。

```
`require': cannot load such file -- nokogiri/nokogiri (LoadError)
```

このエラーには次のような方法で対処しました。
（執筆時点のRailsから要求されているNokogiriのバージョンは1.6.6.4）

まず、RubyInstaller2で説明されている方法でNokogiriをインストールします。

```
> ridk exec pacman -S mingw-w64-x86_64-libxslt
> gem install nokogiri -v 1.6.6.4 --platform ruby -- --use-system-libraries --with-xml2-include=c:/msys64/mingw64/include/libxml2 --with-xslt-dir=c:/msys64/mingw64
```

次に `C:\Ruby24-x64\lib\ruby\gems\2.4.0\gems\nokogiri-1.6.6.4-x64-mingw32\lib\nokogiri` というフォルダの下に `2.4` というフォルダを作成します。

最後に `C:\Ruby24-x64\lib\ruby\gems\2.4.0\gems\nokogiri-1.6.6.4\lib\nokogiri` というフォルダにある `nokogiri.so` を上で作成した `2.4` というフォルダにコピーします。

![Screen Shot 2017-03-06 at 19.55.50.png](https://qiita-image-store.s3.amazonaws.com/0/7465/c0bea177-90a1-44f8-1974-377bdad9f3d4.png "Screen Shot 2017-03-06 at 19.55.50.png")


僕の場合はこれでNokogiriのエラーが解消しました。

参考: [Ruby 2\.2\.2 の上で Rails 4\.2\.1 を動かす\(RubyInstaller for Windows 編\) \- Qiita](http://qiita.com/akaneko3/items/247af28abded3b3d3617)


### 改めて動作確認

再度 `rails s` でサーバーを起動し、 http://localhost:3000 にアクセスしてWelcomeページが表示されれば、まずはOKです。

![Screen Shot 2017-03-06 at 9.24.04.png](https://qiita-image-store.s3.amazonaws.com/0/7465/7f0e7a09-fcdb-dce8-073f-aea3077c458f.png "Screen Shot 2017-03-06 at 9.24.04.png")

### scaffold画面の作成

Ctrl+Cでサーバーを停止し、次に簡単なscaffold画面を作成しましょう。

```
> rails g scaffold Blog title content:text
> rails db:migrate
> rails s
```

これで http://localhost:3000/blogs にアクセスしてみます・・・が、人によっては次のようなエラーが出るかもしれません。

```
TypeError: オブジェクトでサポートされていないプロパティまたはメソッドです。
```

これは Node.js がインストールされていないのが原因らしいので、以下のページからインストーラを取得し、 Node.js をインストールしてください。

https://nodejs.org/en/download/

参考: [Windows 7 の Rails で ExecJS が TypeError を吐くようになった \- Qiita](http://qiita.com/scivola/items/ec7625118fcf6de5203a)

### scaffoldの動作確認

Node.js をインストールしたらコマンドプロンプトをいったん終了し、再度コマンドプロンプトを起動して、 `rails s` を実行します。

今度は http://localhost:3000/blogs が開くはずです。

![Screen Shot 2017-03-06 at 9.44.11.png](https://qiita-image-store.s3.amazonaws.com/0/7465/5e55c3e3-c5a7-38fe-4e67-61b373151c27.png "Screen Shot 2017-03-06 at 9.44.11.png")

ちゃんとデータも登録できることを確認しておきましょう。

![Screen Shot 2017-03-06 at 9.45.00.png](https://qiita-image-store.s3.amazonaws.com/0/7465/169d18f8-857b-ffc8-5698-b88bb0001cdb.png "Screen Shot 2017-03-06 at 9.45.00.png")

これでRailsの開発環境もセットアップが完了しました。
お疲れ様でした！

## コラム：rails consoleで日本語が入力できない問題

Railsの開発をやっていると、irbやrails consoleを使って簡単なコードの動作確認をしたり、DBに登録されているデータの確認をしたりすることがよくあります。

しかし、Windowsの環境の場合、irbを実行しても日本語が入力できません。
日本語を入力すると、bbみたいな文字が表示されます。

↓変換確定前
![Screen Shot 2017-03-06 at 9.52.06.png](https://qiita-image-store.s3.amazonaws.com/0/7465/022b892f-ebc2-d003-ad41-87af119af9e6.png "Screen Shot 2017-03-06 at 9.52.06.png")

↓変換確定後
![Screen Shot 2017-03-06 at 9.52.15.png](https://qiita-image-store.s3.amazonaws.com/0/7465/9f893dd5-fa64-996b-0a9d-7fbe771bd6e1.png "Screen Shot 2017-03-06 at 9.52.15.png")

### readlineを無効にしてみる

irbの場合は `--noreadline` というオプションを付けて起動することで一応日本語が入力できます。

![Screen Shot 2017-03-06 at 9.56.45.png](https://qiita-image-store.s3.amazonaws.com/0/7465/a046ad7c-d317-61b5-8722-4ec2f5e99144.png "Screen Shot 2017-03-06 at 9.56.45.png")

ただし、これはUTF-8ではなくWindows-31J（いわゆるShift_JIS）で文字が入力されています。

![Screen Shot 2017-03-06 at 9.58.07.png](https://qiita-image-store.s3.amazonaws.com/0/7465/232c0d8a-43e9-eba1-4248-1226643f982e.png "Screen Shot 2017-03-06 at 9.58.07.png")

また、readlineが無効になるため、矢印キーを使って過去に入力したコマンドを再表示したりできなくなります。

### 
2017.4.30追記: Ruby 2.4.1で文字化けする場合


正式リリース版のRuby 2.4.1では`Encoding.default_external`が`Windows-31J`のままになっているので、この問題は発生しないはずです。（2017.5.26追記）


Ruby 2.4.1版のRubyInstaller2では`Encoding.default_external`がUTF-8に変わったため、readlineを無効にしても文字化けします。


```
c:\>irb
irb(main):001:0> a='あいうえお'
=> "\x{82A0}\x{82A2}\x{82A4}\x{82A6}\x{82A8}"
irb(main):002:0> Encoding.default_external
=> #<Encoding:UTF-8>
```


この場合、"-E"オプションを付けて明示的にCP932(Windows-31J)を使うように指定すると、文字化けしなくなります。


```
c:\>irb -E CP932
irb(main):001:0> a='あいうえお'
=> "あいうえお"
irb(main):002:0> Encoding.default_external
=> #<Encoding:Windows-31J>
```


ただし、僕の方でこの挙動を元に戻すようにissueを立てたので、もしかすると今後修正されるかもしれません。


- [Encoding\.default\_external should reflect OS codepage · Issue \#37 · oneclick/rubyinstaller2](https://github.com/oneclick/rubyinstaller2/issues/37)

### rails consoleの場合

rails consoleには `--noreadline` オプションが付けられないので、`.irbrc` というファイルを作り（Windows 10の場合は `C:\Users\(ユーザ名)` 以下に作成）、そこに以下のコードを記述します。

```rb:.irbrc
IRB.conf[:USE_READLINE] = false
```

しかし、irbの場合と異なり、rails consoleでは日本語を入力しても画面上には `"\x{82B1}\x{82F1}\x{82C9}\x{82BF}\x{82CD}"` のように文字化けしたような文字が表示されます。
これはRailsが常にUTF-8で文字列を扱い、コマンドプロンプトは Windows-31J で文字列を入力するためです。
両者のエンコーディングが一致しないため、こんな現象が発生してしまいます。

![Screen Shot 2017-03-06 at 10.12.28.png](https://qiita-image-store.s3.amazonaws.com/0/7465/d1e27ec6-46e4-c3f8-3b50-ec2ba5e9e17a.png "Screen Shot 2017-03-06 at 10.12.28.png")

ですが、 `puts` を使って文字列を表示したり、値をDBに保存したりすると自動的にUTF-8に（？）変換してくれるようです。

![Screen Shot 2017-03-06 at 10.14.24.png](https://qiita-image-store.s3.amazonaws.com/0/7465/35b126ed-0dae-cb5e-c378-fa95d2b0476d.png "Screen Shot 2017-03-06 at 10.14.24.png")

とはいえ、RubyやRailsの暗黙的なエンコーディング変換に頼りながら開発を進めるのもちょっと気持ちが悪い（そのうち変な落とし穴にハマりそうだ）な～と思います。

### chcpでコマンドプロンプトのエンコーディングを変えてもダメ

コマンドプロンプトがWindows-31Jで、rails consoleがUTF-8で一致しないのであれば、コマンドプロンプト側をUTF-8に変える、という手もあります。

`chcp` というコマンドを使うと、コマンドプロンプトのエンコーディングを変更することができます。

たとえば `chcp 65001` と入力すれば、コマンドプロンプトはUTF-8で動作します。

![Screen Shot 2017-03-06 at 10.20.47.png](https://qiita-image-store.s3.amazonaws.com/0/7465/9ba1155a-d8c0-484c-007d-38884e5c829a.png "Screen Shot 2017-03-06 at 10.20.47.png")

しかし、この方法もあまり役に立ちません。
まず、コマンドプロンプト内で日本語IMEが起動しなくなります。
つまりキーボードを叩いても常に半角英数字記号しか入力できません。

直接入力できないのならば・・・！！とコピペで日本語入力を試みますが、こうするとirbは突然終了してしまいます。

少しわかりにくいかもしれませんが、以下はコピーアンドペーストで「こんにちは」と入力した直後にirbが突然終了してしまっている様子です。

![Screen Shot 2017-03-06 at 10.24.01.png](https://qiita-image-store.s3.amazonaws.com/0/7465/e8a53b83-fe0f-976f-060e-2d816b1fddcc.png "Screen Shot 2017-03-06 at 10.24.01.png")

この現象はrails consoleでも同様に発生しました。

### 結論：Windows環境とirb/rails consoleと日本語の相性は悪い

irbやrails consoleで快適に日本語入力ができる方法（＝入力も出力もUTF-8で完結し、なおかつ文字化けしない方法）はないかと、いろいろとネットを調べてみましたが、これといった有力な情報を見つけることはできませんでした。

なので、現時点ではWindows環境のirbやrails consoleで快適に日本語入力できる方法はない、というのが僕の結論です。
もし何かよい方法をご存知の方がいたら、情報を教えてください :bow: 

### 参考：Bash on Ubuntu on Windowsなら日本語入力が可能

RubyInstaller2とは全く別の方法になりますが、Bash on Ubuntu on Windows上でRuby環境を構築すると、ターミナルから日本語を入力することが可能になります。
詳しくは以下の記事をご覧ください。

[WindowsにおけるRubyやRailsの環境構築方法をいろいろ調べてみた（2017年3月版） \- Qiita](http://qiita.com/jnchito/items/9de9e515f82dc1969cc5)

## まとめ

というわけで、この記事ではRubyInstaller2でWindows環境にRuby 2.4 + Rails 5.0.2をインストールする方法を紹介しました。

僕は普段MacでRailsの開発をやっているので、Windows環境での環境構築はいろいろと知らないことが多くてちょっと苦労しました。

今回作成したのはあくまでHello, worldレベルのRailsアプリケーションなので、業務レベルのアプリケーションを作るとなると、さらにいろんなハードルが待ち受けてそうな気もします。

また、irbやrails consoleですんなり日本語が入力できないというのもなかなか苦しいところです。

できればUbuntu on WindowsやDockerのように、Linux環境とほぼ同等の環境を構築して、そこで開発する方が良いかもしれません。

・・・と、ついWindows環境に不慣れな僕は思ってしまうのですが、

「いやいや、私はRubyInstaller（またはRubyInstaller2）で開発環境を構築して、本格的なRailsアプリケーションをバリバリ開発していますよ！！」

という人がいたら、いろいろ知見を共有してください！
どうぞよろしくお願いします。

### あわせて読みたい

RubyInstaller2を使う方法以外にも、Windows環境でRubyやRailsの開発環境を構築する方法はあります。
詳しくは以下の記事をどうぞ。

[WindowsにおけるRubyやRailsの環境構築方法をいろいろ調べてみた（2017年3月版） \- Qiita](http://qiita.com/jnchito/items/9de9e515f82dc1969cc5)