WindowsにおけるRuby/Rails開発 2017 Winter

![僕の開発環境](https://qiita-image-store.s3.amazonaws.com/0/7000/d41605f6-99fd-992b-57c4-181652521eea.jpeg)

この記事は[Ruby on Rails Advent Calendar 2017](https://qiita.com/advent-calendar/2017/ruby_on_rails) 1日目の記事です。

# まとめ

- Windows Subsystem for Linux
- RubyMine 2017.3
- Docker for Windows

# つらみとの決別

古来よりWindowsユーザーたちは、Windowsでの健康で文化的な最低限度の開発を望み、様々な手法を模索してきました。
その道は多くの無駄な努力とぬか喜びにあふれた、長く険しいものでした。

## Rubyバージョンのつらみ

使いたいバージョンのバイナリが提供されていない問題

## gemインストールのつらみ

native extensionでうまくいかなかったり

## ミドルウェアインストールのつらみ

Windows向けバイナリが提供されていない or インストールが面倒

## 仮想マシンのつらみ

いちいち起動や環境準備が面倒
Windows側と仮想マシン内のX windowでIMEが変わる違和感
Windows側のRubyMineのgemキャッシュ同期が遅い

Bash on Ubuntu on Windowsのリリースから1年と数ヶ月。
僕たちはついにそれを手に入れたのです！

# 僕のRails開発環境

こんにちは！タケユー・ウェブ株式会社でRailsを書いている[@takeyuweb](https://twitter.com/takeyuweb)といいます。
Railsは1.1の頃から使っていて、これまで何度もWindowsでの快適な開発環境構築を試みてきました。
その都度挫折してLinuxに乗り換えたり、仮想マシンを使ったりしていたのですが、最近ようやくまともに業務で使える環境が整ってきた感があるので、紹介します！


- Window 10 Pro (Fall Creators Update適用済み)
- Windows Subsystem for Linux (openSUSE Leap 42.3)
- RubyMine 2017.3
- Docker for Windows 17.09-ce
![](https://d2mxuefqeaa7sj.cloudfront.net/s_2CC5D556EB59103EFD85902A9DB34BE61180AF3F32EC6350865B16D97F814128_1511785300466_Windows.jpg)

## Windows 10 Pro (Fall Creators Update適用済み)
![](https://d2mxuefqeaa7sj.cloudfront.net/s_2CC5D556EB59103EFD85902A9DB34BE61180AF3F32EC6350865B16D97F814128_1511788124288_+2017-11-27+22.05.42.png)


[Windows 10 Fall Creators Update と 最新機能](https://www.microsoft.com/ja-jp/windows/features)
Proでなくてもよいですが、ProならRemote Desktopでカフェやコワーキングスペースから自宅のメインPCに接続して開発ができますし、ドライブ暗号化を利用できます。
Fall Creators Updateは次に説明するWindows Subsystem for Linuxのため、必須です。

## Bash on Ubuntu on Windows (BoW) 改め Windows Subsystem for Linux
![](https://d2mxuefqeaa7sj.cloudfront.net/s_2CC5D556EB59103EFD85902A9DB34BE61180AF3F32EC6350865B16D97F814128_1511785371617_+2017-11-27+20.53.13.png)


[Windows Subsystem for Linux](https://blogs.msdn.microsoft.com/wsl/)
正式版となり、導入の敷居が下がったWSLは、[少しの設定とWindowsストアからのインストール](https://msdn.microsoft.com/ja-jp/commandline/wsl/install-win10)だけでWindows上で本物のLinuxが使えます。本物のLinuxなので、いつもLinuxにインストールするようにしてRubyやgemをセットアップできます。
仮想マシンのように起動を待つ必要はなく、すぐに使い始めることができます。
メモリやCPUコア数、スレッド数もWindowsホストと同じだけ見えます。僕のPCでは`parallel_spec`すると12個のrspecが並列実行されます。
ちなみに、BoWの頃のUbuntuに加えてopenSUSEも選べます。

## RubyMine 2017.3
![](https://d2mxuefqeaa7sj.cloudfront.net/s_2CC5D556EB59103EFD85902A9DB34BE61180AF3F32EC6350865B16D97F814128_1511786152499_file.png)
※記事作成時点では2017.3はRC版でしたが、[現在は正式リリースされています！](https://blog.jetbrains.com/ruby/2017/11/rubymine-2017-3-released/)


**WSL Support**

> **Linux subsystem for Windows**
> RubyMine 2017.3 features Windows Bash Support! We encourage our Windows users to try out WSL in RubyMine to **get rid of any painful configs on Windows**, and **exploit the full power of the IDE**.
> https://www.jetbrains.com/ruby/whatsnew/#v2017-3-wsl

リモートインタプリタとしてWSL上のrubyを選べるようになりました。

![](https://d2mxuefqeaa7sj.cloudfront.net/s_2CC5D556EB59103EFD85902A9DB34BE61180AF3F32EC6350865B16D97F814128_1511785970599_+2017-11-27+21.32.41.png)


このように、リモートインタプリタとして登録するだけでローカルのRubyと同じように扱えます。SSHサーバなどの小細工は不要でそのまま使えるのでとても楽です。

![](https://d2mxuefqeaa7sj.cloudfront.net/s_2CC5D556EB59103EFD85902A9DB34BE61180AF3F32EC6350865B16D97F814128_1511786100984_file.png)


デバッガもちゃんと使えて捗りますね！

![](https://d2mxuefqeaa7sj.cloudfront.net/s_2CC5D556EB59103EFD85902A9DB34BE61180AF3F32EC6350865B16D97F814128_1511785764833_+2017-11-27+21.29.08.png)


SSH接続のリモートインタプリタで遅かったgemのダウンロード＆キャッシュ作成がだいぶ高速化されるのも大きなポイントです。

## Docker for Windows
![](https://d2mxuefqeaa7sj.cloudfront.net/s_2CC5D556EB59103EFD85902A9DB34BE61180AF3F32EC6350865B16D97F814128_1511786297823_+2017-11-27+21.38.09.png)


僕は主にMySQLやPostgreSQLのようなDBMS、memcached のようなミドルウェアについてプロジェクトで使うものをdocker-composeで管理しています。
こうすることでプロジェクトによって異なるバージョンのDBMSを使い分けることができますし、WindowsユーザーでもWindows用バイナリの提供されていないmemcachedをかんたんに使えます。
RubyMine からも Docker Compose を操作できるのもありがたいですね。（RubyMine 2017.2ではDocker Compose v2まででしたが、2017.3からv3がサポートされました！）

![](https://d2mxuefqeaa7sj.cloudfront.net/s_2CC5D556EB59103EFD85902A9DB34BE61180AF3F32EC6350865B16D97F814128_1511786566197_file.png)


WSLと組み合わせることで、これまでVagrant + Chef DK で構築していた頃に比べてはるかに手軽かつ素早く環境を構築できるようになりました。

# よくある質問
## Windows上のファイルのパーミッションどうなりますか？
![](https://d2mxuefqeaa7sj.cloudfront.net/s_2CC5D556EB59103EFD85902A9DB34BE61180AF3F32EC6350865B16D97F814128_1511786852768_+2017-11-27+21.47.21.png)


777となります。
[`git-update-index --chmod=`](https://git-scm.com/docs/git-update-index) でファイルの権限を設定したり、あるいはファイルの実行権限を無視するオプションもあるのでうまく使いましょう。

## 遅くない？

WSLではRailsプロセスの起動が遅いように思います。
それ以外はそこまで気になっていません。~~性能を上げてFLOPSで殴れ。~~

# 今後気になっているもの
- Docker for Windows supports LCOW
  - Linux containers on Windows
  - https://blog.docker.com/2017/11/docker-for-windows-17-11/

# [タケユー・ウェブ株式会社は自宅で黙々と開発したいRailsエンジニアを募集しています！](https://www.wantedly.com/projects/99879)

![LGTM.jpg](https://qiita-image-store.s3.amazonaws.com/0/7000/10f6e385-ea85-c3a9-e325-b624db96ccbe.jpeg)

実は僕は完全リモートのRails受託開発の会社を経営しています。

一緒に開発をしてくれるRailsエンジニアの方をフリーランス、社員問わず募集中です。

自宅に居ながらにしてLGTMって言ったり言われたりする仕事です。
週3日ぐらいからでも働けて、好きな日に開発できます。

興味のある方は↓のリンクから、ぜひぜひ応援・応募お願いします！

[自宅で黙々と開発したいRailsエンジニアを募集！フリーランスもOK！ - タケユー・ウェブ株式会社のWeb エンジニア中途・契約・委託の求人 - Wantedly](https://www.wantedly.com/projects/99879)