Wakotech Blog

ポエム

WindowsにRails開発環境を立てる(Vagrant+rails-dev-box+RubyMine)

__2016/3/8追記__
結構アクセスあるみたいなので追記しますが、あらかじめ言っておくとUnixネイティブ程には追いつけないです。
特にjavascriptの差分ビルド関連が遅かったりするので、可能である限りおすすめしません。私はあきらめました。

動機

  • デスクトップマシンのWindowsは持ち運ぶMacbookと違い常に電源やディスプレイが刺さっており、配線準備をせず起動できるため
  • Macbookよりマシンスペックが高いため
  • 録画したアニメを見ながら作業ができるため
  • KrileStarryEyesが使えるため

これからやることの概要

  • VirtualBoxVagrantとRubyMineをインストール
    • RubyMineはJetBrain社の有償IDE。30日間無料で試用可能
    • 学生ライセンスで無料で使用可能。学生は今すぐ登録しよう!
    • 試用期間が過ぎていて学生でない方は、他のエディタ+プラグイン等で対応ができるかと思いますが、ここでは触れません
  • Windowsにまともなターミナルとgitを導入(cmder+git bashでOK)
  • rails-dev-boxからclone
  • $ vagrant up
  • Ubuntu14.04イメージがダウンロードされるのでそれを待つ(モバイル回線非推奨)
  • RubyMineからVagrantをリモートサーバとして設定
  • Windows向けですがMacでも同様の環境を再現することはできます

手順

VagrantVirtualBox、RubyMineのインストール

それぞれダウンロードしてインストール

WindowsUnixライクなターミナルエミュレータとgitを導入

既に使用している方は大丈夫です。
私のおススメはcmder(導入参考リンク: 開発者がSurfacePro3を買ったらまずやること - Qiita)
git for Windowsはcmderのgit bashに付属しているのでこの方法が楽です。
個別に入れる場合はこちら: Redirecting Git for Windows' homepage...

rails-dev-boxからgit cloneし、OSイメージをダウンロード

rails-dev-boxからcloneします

$ git clone https://github.com/rails/rails-dev-box.git

cloneされたディレクトリに移動して、仮想マシンを立ち上げます
その際にOSイメージがダウンロードされるので少し時間がかかります(モバイル回線非推奨)

$ vagrant up

この時点で3000番ポートにはアクセスできることが確認できます
railsプロジェクトがある場合はホスト側(Windows)からlocalhost:3000でアクセスできるのが確認できます
~~インストール済のpythonの以下のコマンドを叩くことでも確認ができます~~
rubyの以下のコマンドでもサーバを建てることができます

$ ruby -run -e httpd . -p 3000

※Rails4.2を使用している場合、通常のrails serverコマンドではWebrickが従来の0.0.0.0ではなく127.0.0.1で起動しポートフォワードされないため、-b 0.0.0.0とオプションで指定する必要があります

RubyMineから接続する

RubyMineを起動し、新規プロジェクトを作成します
作成後にVagrantfileを指定するため、作成場所はどこでも問題ありません。RubyMineProjects下に置くのが良いでしょう
プロジェクト作成後は以下の手順でVagrant内と接続します

  1. File>Settings>Languages&Frameworks>Ruby SDK and GemsからRuby処理系側の+ボタンを押し、New remoteを選択
  2. Configure Remote Ruby Interpreter画面が開かれるので、Vagrantにチェックを入れ、Vagrant Instance FolderにはVagrantfileのあるディレクトリを、Ruby interpriter pathは/user/bin/rubyのままでOKを押します。するとVagrant内と接続をしてRubyを読みに行きます。鍵の発行をしていなかった場合ここで発行を促されるかもしれません
  3. File>Settings>Build, Execution, Deployment>Developmentから+ボタンを押し、リモートサーバを追加します。TypeはSFTPを選択し、hostは127.0.0.1、Portは2222、UsernameとPasswordはともにvagrantを入力し、Root pathがAutodetectで成功すれば成功なので、OKで閉じます。この際、Mappingからサーバ側のプロジェクトルートを設定することで同期範囲を限定することができます
  4. Tools>Deployment>BrowseRemoteHostで、Vagrant内のファイルが確認できます。Alt+1でProjectメニューを表示し、右クリック>Deployment>Download from [サーバ名]を選択し、サーバ内容をローカルに複製します
  5. 通常のリモート開発と同様の環境を再現することができました。syncすることで手元の編集事項がサーバに反映されたり、サーバでたたいたコマンドの変更結果を手元に反映させたりできます。

(自動同期については後日追記します)

※参考: RubyMine and Vagrant - YouTube

Vagrantの共有ディレクトリとの違いについて

Vagrantのディレクトリ共有設定は同一のディレクトリをホスト(Windows)とゲスト(Linux)の双方から見るため、ファイル操作に不整合が出る恐れがあるとのことです
また.git以下は片方のOSに対応した形でファイルが存在するため、気持ち悪い構造になっています
ruby/railsコマンドと同様、基本的にLinuxファイルシステムsshから操作し、IDEによるソースコード編集等のみホスト側で行う、というのが不整合が出ない形になるのではないでしょうか

RubyMineでの開発

RubyMineは非常に多機能で、調べながらでもまだまだすべての機能をつかいこなせていません
RubyMineAdventCalendar2014という非常に便利な情報源があるのでそちらを参考にすると良いです
またRubyMine内臓のshellからvagrant sshすることで、さながらローカルで開発しているのと同様の環境で開発できます(上で説明したcmderを使うよりも便利)

総括

以上の簡単な手順で十分使いやすい開発環境を整えることができます
ただしrubyのバージョン管理がrbenvでない等、実用に問題が出る可能性があります
rails-dev-boxは継続して更新されていますが、構築が合わない場合や他の言語の開発環境も必要な場合はAnsible等を使うのが良いかと思います
Ansibleを用いた環境構築についてもまた近々書きたいと思います