WindowsにおけるRubyやRailsの環境構築方法をいろいろ調べてみた（2017年3月版）


## はじめに

僕は普段MacでRailsの開発をやっているのですが、ひょんなことからWindows環境でRubyの動作確認をする必要が出てきたため、Windows上でのRuby開発環境について調べ始めました。

調べていくと「RubyInstallerを使いましょう」という記事や書籍が比較的多かったです。
しかし、RubyInstallerは2017年3月7日現在、メンテナンスが停滞しており、最新版のRuby 2.4.0ではなく、Ruby 2.3.3で更新が止まっています。

そこで、RubyInstaller以外の環境構築方法はないだろうか、とさらにいろいろ調べていきました。

というわけで、この記事では僕が調べたWindows上でのRuby開発環境方法をいくつかリストアップしていきます。

### おことわり

この情報は2017年3月7日現在の情報です。
将来的にはまた状況が大きく変わる可能性もあります。
ですので、適宜、最新の情報もチェックするようにしてください。

また、冒頭で述べたとおり、僕は普段Macを使って開発しています。
Windowsをメインで使っているわけではないので、Windows上でのRuby開発に詳しい人が見ると、何かおかしなことを書いているかもしれません。
その場合はコメント欄や編集リクエスト等で優しく指摘してやってください。

それでは以下が本編です。

## 方法その1: RubyInstallerを使う

RubyInstallerはRuby環境を構築するための専用インストーラを提供します。
インストーラを使うことで簡単にRuby環境を構築できます。

### 提供サイトや環境構築方法

- [RubyInstaller for Windows](https://rubyinstaller.org/)
- [Windows10にRuby on Railsをインストール方法をやさしく解説 \- \[Skillhub \(スキルハブ\)\]](http://skillhub.jp/blogs/160)

### 長所

- Windows環境では比較的メジャーな構築方法だった（過去形）ので、ネットや書籍の情報が比較的多い。（つまり、トラブルが起きても解決しやすい）
- 開発環境がWindows内で完結するので、Windowsに関する知識（コマンドプロンプトやエクスプローラの操作方法等）をそのまま活用できる。

### 短所

- 2017年3月7日現在、メンテナンスが停滞しており、Ruby 2.3.3の提供で止まってしまっている。
  - 参考: [Looking for a Maintainer that can get releases out faster · Issue \#348 · oneclick/rubyinstaller](https://github.com/oneclick/rubyinstaller/issues/348)
- コマンドプロンプト上でirbやrails consoleを動かすと、日本語の入力に苦労する。
  - 参考: [RubyInstaller2でWindows環境にRuby 2\.4 \+ Rails 5\.0\.2をインストールする \- Qiita](http://qiita.com/jnchito/items/08b5be458134073c60e3#%E3%82%B3%E3%83%A9%E3%83%A0rails-console%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%8C%E5%85%A5%E5%8A%9B%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E5%95%8F%E9%A1%8C)
  - 上記記事はRubyInstaller2に関するものだが、RubyInstallerでもおそらく状況は同じ。
- [rbenv](https://github.com/rbenv/rbenv)や[RVM](https://rvm.io/)を使って実行するRubyのバージョンを切り替えることができない。


## 方法その2: RubyInstaller2を使う


RubyInstaller2はメンテナンスが停滞しているRubyInstallerの後継者を目指して開発されている比較的新しいインストーラです。

RubyInstaller2はRuby 2.4以降の正式なRubyInstallerに昇格しました。
ただし、名前が同じになっただけで、内部的にはRuby 2.3以前のRubyInstallerとRuby 2.4以降のRubyInstallerは別物になるので注意が必要です。（2017.5.26追記）

C言語ライブラリを使うgemをインストールする場合、RubyInstallerはDevKitを使いますが、RubyInstaller2は[MSYS2](http://www.msys2.org/)を使います。

### 提供サイトや環境構築方法

- [larskanis/rubyinstaller2: MSYS2 based RubyInstaller for Windows](https://github.com/larskanis/rubyinstaller2)
- [RubyInstaller2でWindows環境にRuby 2\.4 \+ Rails 5\.0\.2をインストールする \- Qiita](http://qiita.com/jnchito/items/08b5be458134073c60e3)

### 長所

- （本記事執筆時点の最新版である）Ruby 2.4.0がインストールできる。
- 開発環境がWindows内で完結するので、Windowsに関する知識（コマンドプロンプトやエクスプローラの操作方法等）をそのまま活用できる。

### 短所

- 登場して間もないので情報が少ない。特にCライブラリを使うgemのインストール方法がRubyInstallerと異なるので、インストール時にエラーが出ると解決に時間がかかるかもしれない。
- 
今後の先行きがよくわからない。（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と同様、コマンドプロンプト上でirbやrails consoleを動かすと、日本語の入力に苦労する。
  - 参考: [RubyInstaller2でWindows環境にRuby 2\.4 \+ Rails 5\.0\.2をインストールする \- Qiita](http://qiita.com/jnchito/items/08b5be458134073c60e3#%E3%82%B3%E3%83%A9%E3%83%A0rails-console%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%8C%E5%85%A5%E5%8A%9B%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E5%95%8F%E9%A1%8C)
- RubyInstallerと同様、[rbenv](https://github.com/rbenv/rbenv)や[RVM](https://rvm.io/)を使って実行するRubyのバージョンを切り替えることができない。

## コラム: RubyInstallerやRubyInstaller2でバージョンを切り替えるには？

**（2019.1.5 追記）**

RubyInstaller2でRuby 2.6をインストールすると、`ridk use`というコマンドを使って、Rubyのバージョンが切り替えられるようになりました。

以下はその実行例です。

```
C:\Users\JunichiIto>ruby -v
ruby 2.6.0p0 (2018-12-25 revision 66547) [x64-mingw32]

C:\Users\JunichiIto>ridk use
1 - C:/Ruby24-x64       ruby 2.4.1p111 (2017-03-22 revision 58053) [x64-mingw32]
2 - C:/Ruby26-x64       ruby 2.6.0p0 (2018-12-25 revision 66547) [x64-mingw32]
3 - C:/Ruby23-x64       ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
Select ruby version to enable: 1
Disable C:/Ruby24-x64
Disable C:/Ruby26-x64
Disable C:/Ruby23-x64
Enable C:/Ruby24-x64

C:\Users\JunichiIto>ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x64-mingw32]
```

**（追記ここまで）**

RubyではrbenvやRVMといったツールを使って、実行するRubyのバージョンを切り替えることができます。

- https://github.com/rbenv/rbenv
- https://rvm.io/

しかし、これらのツールはMacやLinux向けなので、Windows上では動作しません。

というわけで、Windows向けのrbenvやRVMのようなツールを探してみました。
するとどうやら、uruというツールを使うとWindows上でもRubyのバージョン切替ができるようです。（ただし未検証）

- https://bitbucket.org/jonforums/uru
- [uru - Windows用のRuby環境セレクター](http://www.softantenna.com/wp/review/uru/)

pikというツールもあるみたいですが、こちらはメンテナンスが2014年から止まっているので、あまりオススメできません。

- https://github.com/vertiginous/pik

他にも環境変数のPATHを直接編集する、という方法もあるみたいですね。
（あまり直接編集したくないですが・・・）

- [複数のRubyバージョンのインストール（RubyInstaller使用）](http://www.buildinsider.net/language/rubytips/0004#multiver)

また、このあとに紹介するBash on Ubuntu on WindowsやDocker/Vagrantのように、Linuxと同等の環境を用意すれば、rbenvやRVMが使えます。
Rubyのバージョンを切り替える必要があるなら、最初からこれらの環境で開発を進めるのも良いかもしれません。

## 方法その3: Windows Subsystem for Linux(WSL)を使う

Windows Subsystem for Linux(旧名:Bash on Ubuntu on Windows)は、Windows上にLinux環境（Bashシェル）を構築できるWindows 10の新機能です。
なので、Linux向けの開発環境構築手順が（理論上は）そのまま使えます。

### 提供サイトや環境構築方法

- [Bash on Ubuntu on Windows \- About](https://msdn.microsoft.com/ja-jp/commandline/wsl/about)
- [windowsのbashでRails環境を構築してみる。（Windows 10 Anniversary Update版） \- Qiita](http://qiita.com/chimame/items/8130aa2c07a152a865b1)

### 長所

- 開発環境構築をはじめ、様々なLinux向けのRubyに関するノウハウを活用できる（はず）。
- [rbenv](https://github.com/rbenv/rbenv)や[RVM](https://rvm.io/)を使って実行するRubyのバージョンを切り替えることができる。
- Bashシェルからirbやrails consoleを開くと、コピーアンドペーストで日本語が入力できる。（readlineの機能も有効にしたままでOK、エンコーディングもUTF-8で完結する）

![Screen Shot 2017-03-07 at 7.07.27.png](https://qiita-image-store.s3.amazonaws.com/0/7465/95841e9a-fb38-db95-9b19-b458d359636a.png "Screen Shot 2017-03-07 at 7.07.27.png")

- [wsl-terminal](https://github.com/goreliu/wsl-terminal)のように、サードパーティ製のターミナルを使うと、直接日本語を入力することも可能。

![Screen Shot 2017-03-07 at 7.13.00.png](https://qiita-image-store.s3.amazonaws.com/0/7465/707c5830-9ef5-5891-5a66-690445fb6cfe.png "Screen Shot 2017-03-07 at 7.13.00.png")

![Screen Shot 2017-03-07 at 7.13.12.png](https://qiita-image-store.s3.amazonaws.com/0/7465/5a236f3e-fb08-7012-a9da-6d900d280da4.png "Screen Shot 2017-03-07 at 7.13.12.png")

### 短所

- 2017年3月現在、Bash on Ubuntu on Windowsはベータ版という位置づけなので、不具合があったり、将来的に仕様が変わったりする恐れがある。
- 登場してからあまり時間が経っておらず、本家Linuxとの互換性もどこまで実現できているかわからないため、思わぬ落とし穴にハマる可能性もある。（注：個人的な推測です）
- Windows 8以前のWindowsでは利用できない。
- ターミナルを操作するために、Unix/Linux系のコマンド（`ls`や`rm`など）を新たに覚える必要がある。

## 方法その4: DockerやVagrant等の仮想環境を使う

[Docker](https://www.docker.com/)や[Vagrant](https://www.vagrantup.com/)のようなツールを使ってLinux系の仮想環境を用意し、その中でRubyの開発環境を構築する方法です。
（ただし、僕個人はこの方法をMac上では試したことがありますが、Windows上では試したことがありません）

### 参考サイト

- [RailsアプリをDockerで開発するための手順 \- Qiita](http://qiita.com/togana/items/30b22fc39fe6f7a188ec)
- [Windows10にVagrant \+ Virtualbox \+ CentOS7でRails の開発環境を構築する \| 二兎を追ってみる](http://mokuo.yokohama/windows10-vagrant-virtualbox-rails/)

### 長所

- 仮想環境内では本物のLinuxが動いているので、Linux向けのRubyに関するノウハウを活用できる。
- 他の人が用意してくれたテンプレート（のようなもの）を利用すると、コマンド一発で開発環境が構築（再現）できる。
- Windows 8以前のWindowsでも利用可能。
- [rbenv](https://github.com/rbenv/rbenv)や[RVM](https://rvm.io/)を使って実行するRubyのバージョンを切り替えることができる。（そもそもプロジェクトごとに別の仮想環境を用意する、という方法でも良さそう）

### 短所

- DockerやVagrantといったツールの使い方や用語を覚える必要がある。
- 仮想環境を動作させるためのリソース（メモリやCPU）が必要になる。
- ターミナルを操作するために、Unix/Linux系のコマンド（`ls`や`rm`など）を新たに覚える必要がある。

## 方法その5: クラウド上の開発環境を利用する

[Cloud9](https://c9.io/)のようなクラウド上の開発環境を利用し、ブラウザ内で開発を進める方法です。
実行に必要なのはブラウザだけなので、もはやローカルマシンのOSはほとんど関係なくなります。

最近の[Railsチュートリアル](https://railstutorial.jp/)がこの方式なので、「使ったことがある」という人も多いかもしれません。

### 参考サイト

- [Cloud9 \- Your development environment, in the cloud](https://c9.io/)
- [第1章 ゼロからデプロイまで \| Rails チュートリアル](https://railstutorial.jp/chapters/beginning?version=5.0#sec-development_environment)


### 長所

- ブラウザを開いてアカウント登録さえすれば、すぐに開発を始められる。

### 短所

- 学習用であれば十分かもしれないが、本格的なアプリケーション開発になると不便なところが出てきそう。（注：個人的な推測です。本格的な開発も全部クラウドでやってるよ！という人がいたら教えてください。）
- 内部ではLinux系の仮想環境が動いているので、Unix/Linux系のコマンドに関する知識が多少必要になる。


## まとめ

というわけで、この記事ではWindows用のRuby開発環境について、いろいろ調べた結果をまとめてみました。

どの方法も一長一短なので、これ！とひとつに決めるのは難しいですね。
ただ、「ちょっと試しにやってみる」ではなく、本格的な開発をやっていくつもりなのであれば、僕個人の意見としてはBash on Ubuntu on WindowsやDocker/Vagrantのように、Linuxベースの環境で開発を進める方がいいと思います。
（Rubyの機能やgemはMac/Linuxの使用を前提にしたものが多いのと、Linux系ならトラブルシューティングのノウハウとかもWindowsより豊富なので）

てか、「絶対にWindowsマシンを使いたい！」というこだわりがないのであれば、Macを1台買って環境構築した方が、トータルで見たときに一番時間を節約できる気がしま・・・って言ってしまうと、この記事を書いた意味がなくなっちゃいますね😅

とりあえず、これからWindowsマシンでRubyの開発環境を構築しようと思っている方は、本記事の内容を参考にしてもらえると幸いです。

また、WindowsマシンでバリバリRubyやRailsの開発をやっている方は、この記事で不足している知見や、もっと良い方法を教えてもらえると嬉しいです。

以上、「WindowsにおけるRubyやRailsの環境構築方法をいろいろ調べてみた」でした！