WSL2を使って、Windowsホスト上のRubymineからRspecを実行する
Railsの開発時にJetbrainsのIDE「Rubymine」が便利で長年使っています。
また、dockerを利用することで、ホストマシンの環境を汚さないで作業できますし、またミドルウェアやRailsのアップデート時にもコンテナを入れ替えるだけで環境変更できるなど便利な時代になりました。
dockerを使うとなると、Linuxコンテナ(LXC)がネイティブに利用できるLinuxが最も躓くことなく使えます。macOSだとDocker for macをそのまま使うと遅いし、WindowsはWSL2がでたけど、なんかRubymineからRspec実行するとエラーでるし、みたいな感じだったため、結局はLinuxデスクトップ上で開発していました。
本記事では、Windows 10にてWSL2を用いて、Windowsホスト上のRubymineで、Windowsファイルシステム上の開発ソースを修正しながら、WSL2内のdockerコンテナの中にあるrubyおよびrspec gemにてRspecを実行するにはどうすれば良いかについてまとめたものです。
たまたまやる機会があったもののすぐ忘れそうなので、メモしておきます。
ターミナルではなく、Rubymine上でRspecを実行したい
普通にターミナルからコマンドラインで実行することはもちろんWSL2で出来ます。
そうではなく、IDEであるRubymine上で実行して結果ウインドウに表示し、specごとに該当ソースに飛ぶことが出来たりする機能を使いたいなということになります。
こちらのページ: テスト結果の表示と調査 | RubyMine
使用した各種バージョン
- Windows 10 Home / バージョン: 21H2 / ビルド: 19044.1586
- Docker Desktop for Windows 3.5.2 (66501)
- Rubymine 2021.3.3 (2022/04/07時点での最新版)
前提
- RubymineにはJapanese Language Packを入れてあります。
- WSL2用のLinuxとして、「Ubuntu-20.04」を入れて利用していると仮定します。
- Rspecを実行したいソースファイルは、下記パスにあると仮定します。
- C:\Users\hogehoge\development\sample-rails
- C:\Users\hogehoge\development\sample-rails\docker-compose.ymlにてコンテナオーケストレーションしており、railsのコンテナ名は、「web」とします。
手順
というほどでもないですが、下記手順で出来ました。
- Windows上のRubymineを利用
- Windowsファイルシステム内のソースを開く
- WSL2上からWindwosファイルシステムのソースにアクセスしてdockerコンテナを立ち上げる
- Rubymine上にていろいろ設定
- Rubymine上で、Rspecを実行
順に説明します。
つまり、本エントリは、
- Windowsファイルシステムに、Ruby on railsのソースを置き、
- Windows上のRubymine上でRspecを実行する
というものです。
一方で、
- WSL2上(Linux)ファイルシステム上にRuby on railsのソースを置き、
- Windows上のRubymine上でRspecを実行する
という内容を別途まとめています。(Windowsホスト上のRubymineからWSL上のレポジトリを開いてRspecを実行する)
1. Windows上のRubymineを利用
普通にWindows上にRubymineをダウンロード・インストールして起動します。
公式サイト: RubyMine:JetBrainsによるRuby on Rails IDE
2. Windowsファイルシステム内のソースを開く
Rspecを実行したいソースファイル群につき、Windowsのファイルシステム上に配置して、そちらをRubymineより開きます。
例で言うと「C:\Users\hogehoge\development\sample-rails」を開きます。
3. WSL2上からWindowsファイルシステムのソースにアクセスしてdockerコンテナを立ち上げる
Windows TerminalかWSL2で利用している「Ubuntu-20.04」を立ち上げて、WSL2内のLinuxからWindowsのソースファイルにアクセスします。
例示パスを前提にすると、Linux上では下記コマンドになります。
cd /mnt/c/Users/hogehoge/development/sample-rails
dockerコンテナを立ち上げます。
こちらでは、docker-compose を利用していると仮定します。docker-composeのバージョンなどでコマンドラインは変化しますが、お使いのバージョンに合わせたコマンドで起動してください。
以下はコマンド実行例です。
# docker-compose でコンテナ達をサービスとして起動
docker-compose up -d
# 以下は適宜
# bundle install (/path/to/app は適宜書き換えてください。)
docker-compose exec web /path/to/app/bin/bundle install
# dev serverの起動 (/path/to/app は適宜書き換えてください。)
docker-compose exec web /path/to/app/bin/bundle exec rails s -b 0.0.0.0
4. Rubymine上にていろいろ設定
Rubymine上では、下記設定を行う必要があります。
- dockerへのアクセス
- remote環境としてのdocker内のコンテナへのアクセス
それぞれ解説します。
4-1. Rubymine設定: docker
設定 > ビルド、実行、デプロイ > Docker を開きます。
上記で、「Windows用Docker」を選択します。
右下に「接続完了」と表示されればOKです。
4-2. Rubymine設定: remote環境としてのdocker内のコンテナへのアクセス
設定 > 言語&フレームワーク > Ruby SDK および Gem を開きます。
上記で、「+」ボタン > 新規リモート.. を選択します。
開いたウインドウで、「Docker Compose」を選択し(「WSL」ではない)、サービス部分で、Railsのコンテナである「web」を選択し、OKとします。
しばらく読み込みに時間がかかりますが、正常に読み込めたら、ウインドウが閉じて、元のウインドウに戻り、左ペインに「Remote: rubyX.X.X-pXXX(docker-compose://~)」のようなものが追加されると思いますので、そちらをクリックして選択状態にします。
右ペインに「rspec」gemが読み込まれていることを確認できればOKです。
これで設定ウインドウからの設定は完了です。
5. Rubymine上で、Rspecを実行
Rspecの実行については、実行の構成の設定が必要です。
ひとまず、ここでは、Rspecディレクトリ以下のspecすべてについてRspecを実行する構成を例として設定を行います。
Rubymine上にて、通常、右上にあるデバック部分にて、「実行構成の編集」をクリックします。
実行構成ウインドウが開いたら、左上の「+」ボタン > Rspecを選択します。
設定を下記のようにします。
項目 | 値 |
---|---|
名前 | Rspec All(任意の名前でいいです) |
モード | フォルダー内のすべてのスペック |
スペックフォルダー | ソース内の rspec フォルダルートパスを指定 |
ファイル名のマスク | **/*_spec.rb |
Ruby SDK | 有効なものを指定(上記で設定したリモートSDKを指定) |
docker-compose | docker-compose exec |
あとは、Rspecを実行すれば、底部のRunペインでRspecが実行されるはずです。
注意
シェルスクリプトファイルなどの改行コードは、LFにする
毎回docker-compose up -d
や、docker compose exec web bundler install
とかするのがめんどくさいので、シェルスクリプトにていろいろな操作をしているのですが、改行コードがCR+LFだとエラーが出ることがあります。
LFに統一するように、git config --global core.autocrlf true
しておくなりしておいた方が良いかと思います。
トラブルシュート
/bin/bundlerを実行すると「/usr/bin/env: ‘ruby\r’: No such file or directory」がでる場合
docker-compose exec web bundler /path/to/app/bin/bundler install
などしたときに、「/usr/bin/env: ‘ruby\r’: No such file or directory」のようなエラーが出るときがあります。「ruby\r」となっていることからも予測できるように、これは、「/path/to/app/bundler」 ファイルの改行コードが、CR+LFになっているとこのエラーが起きるようです。こちらもLFに変換すると解消します。
Discussion