Bash on Ubuntu on Windows + VcXsrv + RubyMine でWindowsでも快適なRails開発環境を作ろう

  • 9
    いいね
  • 2
    コメント

以前からWindowsでのRailsアプリケーション開発は、Rubyのバージョンやnative extensionに悩まされることが多く、WindowsにVirtualBoxやHyper-VでLinuxの仮想環境を構築して開発しているという方も多いんじゃないでしょうか。
しかしここに来て、Windows 10 Creators Updateにより、Bash on Ubuntu on WindowsとVcXsrv(あるいはXming)、そしてRubyMineを使った簡単かつ快適なRailsアプリケーション開発の環境が現実的になってきました。

Bash on Ubuntu on Windows のインストール

Windows 10 Creators Updateの適用

Windows 10にCreators Updateを適用していない場合は、先にWindowsを更新しましょう。
以下のURLを開き、「今すぐアップデート」ボタンをクリックすると、アップデートツールをダウンロードすることが出来ます。
https://www.microsoft.com/ja-jp/software-download/windows10
Windowsの更新は再起動後にかなり時間がかかりますので、お出かけの前に再起動をかけておくと良いです。

Windows Subsystem for Linux (Beta)の有効化

[Windows の機能] を立ち上げ、[Windows Subsystem for Linux (Beta)] にチェックをつけ、OKをクリックします。この操作には再起動が必要となります。
01.wsl_install.png
もし、既にインストール済みのBash on Ubuntu on Windowsの環境を綺麗に初期化したいのであれば、lxrunコマンドを利用することで、初期化や再インストールを行うことが出来ます。
Windows 10のBash on Ubuntu on Windows環境を初期化/再インストールする

再起動が終わったら、スタートメニューを[bash]で検索することで、bashコマンドが見つかります。
03.bash_install.png
この時点ではまだUbuntuはセットアップされていません。プロンプトに従ってUbuntuをセットアップします。
04.bash_install_prompt.png
ロケールをja-JPにするか聞かれたり(オススメのままyにします)、UNIXユーザ名やパスワードを聞かれますので、入力します。
07.bash_on_windows.png
ちょっと時間がかかりますが、しばらくするとUbuntuのセットアップが終わります。ここに限りませんが、反応が無い場合はちょこちょこEnterを押して突っついてみると動いたりします。
セットアップ後は、アイコンがUbuntuのアイコンになり、スタートメニューから[Bash]や[Ubuntu]といったワードで検索して起動できるようになります。

VcXsrvのインストール

SourceForgeからVcXsrvをダウンロードしてインストールしておきましょう。
https://sourceforge.net/projects/vcxsrv/
Windows用のX ServerとしてはXmingが有名かもしれませんが、こちらは64bit版がダウンロードでき、どうやらパフォーマンスも良いらしいので、今回はVcXsrvを利用しました。
インストール後は、スタートメニューにて[vcxsrv]で検索すれば出てきますので、起動しておきます。タスクバーの通知領域を開くことで、VcXsrvが常駐していることが確認できます。
08.xming_launch.png

Ubuntu側の設定

Bash on Ubuntu on Windowsを起動したら、まずはOSの更新をしておきましょう。
$ sudo apt-get update
$ sudo apt-get upgrade
sudoによりパスワードを聞かれますが、現在ログインしているユーザ(Bash on Ubuntu on Windowsの初期化時に入力したもの)のパスワードを入力します。

必要なライブラリ、パッケージ等のインストール

続いて、必要なパッケージをインストールします。
$ sudo apt-get install git build-essential libssl-dev libreadline-dev zlib1g-dev x11-apps x11-utils x11-xserver-utils libsqlite3-dev nodejs fonts-ipafont libxml2-dev libxslt1-dev
x11-apps x11-utils x11-xserver-utilsはX Window Systemの動作、動作確認およびRubyMineの起動のため、build-essential、libssl-dev、libreadline-dev、zlib1g-devはRubyのビルドに必要となります。
libsqlite3-devはrails newコマンドを実行したときに必要なのでとりあえず入れておきます。
また、assets:precompileで使うのでnodejsも先に入れておきましょう。
fonts-ipafontも日本語文字列を表示するためにインストールしておきます。
libxml2-devとlibxslt1-devと古めのバージョンのnokogiriをインストールする際に必要になります。

Rubyのインストール

rbenvを利用し、サクッとRubyをインストールします。
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
なお、Creators Updateを適用した最新のBash on Ubuntu on Windowsは、相互運用のためかWindows側の環境変数PATHがBash側の$PATHにマージされるという、有り難いのか迷惑なのか微妙な仕様になっています。
筆者の場合、bundleコマンドがWindows側のコマンドを叩きに行ってしまい、上手く行かないケースがあったため、.bashrcで書き換えるという対策をしました。
Ubuntu側の環境変数を
$ echo $PATH
とコマンドを叩いてPATHを表示すると、Windows側ファイルシステムにアクセスするための /mnt 配下のパスがずらずらと並んでいるのがわかります。
とくに、Windows側にRubyをインストールしてPATHを通している場合などは、.bashrcの最後に以下のような記述をしてPATHを綺麗にしておくとよいでしょう。({user}の部分は適宜読み替えてください)

export PATH=/home/{user}/.rbenv/shims:/home/{user}/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

忘れずに.bashrcの再読込もしておきます。
$ source ~/.bashrc

rbenvの導入が出来たら、Rubyをインストールします。
$ rbenv install -l
でインストール可能なRubyの一覧を表示し、インストールしたRubyのバージョンを指定してインストールします。
今回は2017年4月時点での最新安定版の2.4.1を選択しました。
$ rbenv install 2.4.1
かなり時間がかかるのでのんびり待ちましょう。インストールが終わったら確認しておきます。
$ rbenv versions
2.4.1

インストール済みのRubyが表示されるので、標準のRubyとして登録しておきます。
$ rbenv global 2.4.1
$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

これでRubyの導入まで完了しました。

X11アプリケーションの動作確認とRubyMineのインストール

.bashrcで環境変数$DISPLAYの設定をします。
$ echo 'export DISPLAY=localhost:0.0' >> ~/.bashrc
$ source ~/.bashrc
0.0の部分は、VcXsrvのアイコンにマウスオーバーすることで確認できますが、ほとんどの場合は0.0になっているはずです。
Windows側でVcXsrvが常駐していることを確認したら、動作確認をしましょう。X11appsがインストールされていますので、
$ xeyes &
でxeyesの目玉のGUIアプリケーションがWindowsで開かれるはずです。
09.xeyes.png

正常にxeyesのウィンドウがVcXsrvでWindowsに表示されていることが確認できたら、JetBrainsのページからLinux版RubyMineをダウンロードしましょう。
https://www.jetbrains.com/ruby/download/#section=linux
[DOWNLOAD]をクリックした次の画面でダウンロードをキャンセルし、[direct link]のURLをコピーしてBash側でwgetするのが簡単です。
ダウンロードが完了したら、任意のフォルダにサクッと展開しておしまいです。
$ tar zxvf RubyMine-2017.1.1.tar.gz
起動用のシェルスクリプトを実行すればRubyMineが立ち上がってきます。
$ RubyMine-2017.1.1/bin/rubymine.sh &
10.rubymine_activate.png
アクティベーションの画面が表示されますので、お手持ちの認証情報を入力の上、初期設定を行えば、無事RubyMineが起動してくれます。
12.welcome_to_rybymine.png
ここまで読んでいただいた方であれば、JetBrainsのAll Products PackサブスクリプションあるいはRubyMine単独のライセンスを持っておらず、Emacsやvi、あるいはAtomやSublimeTextのようなエディタでRuby開発をされているような方はいらっしゃらないとは思いますが、もし万が一お持ちで無い場合は、JetBrains様あるいはサムライズム様で購入できますので、今すぐにお買い求めください。

サンプルRailsアプリケーションの作成

RubyMineの機能でプロジェクトを作成することも可能ですが、ここは分かりやすくgemでRailsのインストールとRailsアプリの作成をしてみます。
bashにて、以下のようにコマンドを実行します。
$ gem update --system
$ gem install bundler rails
必要なパッケージが正しくインストールされていれば、しばらく待った後に、
Done installing documentation for i18n, thread_safe, tzinfo, concurrent-ruby, activesupport, rack, rack-test, mini_portile2, nokogiri, loofah, rails-html-sanitizer, rails-dom-testing, builder, erubis, actionview, actionpack, activemodel, arel, activerecord, globalid, activejob, mime-types-data, mime-types, mail, actionmailer, nio4r, websocket-extensions, websocket-driver, actioncable, thor, method_source, railties, sprockets, sprockets-rails, rails after 94 seconds
36 gems installed

みたいな感じで表示されるはずです。
Windowsではあれほど苦しめられた数々のnative extensionや悪名高いnokogiriも何の苦も無くインストールが出来たかと思います。
では、Railsアプリの雛形を作ってみましょう。
$ rails new sample
とrailsコマンドを実行します。いくつかのnative extensionがインストールされるため、少しだけ時間がかかりますが、問題無くsampleアプリケーションが作成されるでしょう。
RubyMineで作成されたsampleフォルダを指定して開けば、無事Railsアプリケーションとしてプロジェクトを開くことが出来ます。
15.project_opened.png
警告ツールチップに

External file changes sync may be slow
File watcher gave up to operate

とWarningが表示されていますが、おそらくBash on Ubuntu on Windowsではファイル更新チェックまわりのAPIの対応が完全では無いのではないかと考えられます。
とはいえ、この状態でもデバッグ実行は出来ますので、デバッグのアイコンをクリックして動かしてみましょう。
なお、Bashでifconfigを実行してみるとわかりやすいですが、ネットワークはWindowsと共用のような状態になるため、Windows側ブラウザからローカルループバックでアクセスすることももちろん可能です。
17.Open_Browser.png
やったぜ。

参考にさせていただいたページなど