🍣

Windowsホスト上のRubymineからWSL上のレポジトリを開いてRspecを実行する

2022/08/21に公開

以前、WSL2を使って、Windowsホスト上のRubymineからRspecを実行するというエントリを投稿したのですが、そのエントリは、

  • Windowsファイルシステムに、Ruby on railsのソースを置き、
  • Windows上のRubymine上でRspecを実行する

というものでした。

本エントリでは、

  • WSL2上(Linux)ファイルシステム上にRuby on railsのソースを置き、
  • Windows上のRubymine上でRspecを実行する

という内容についてまとめています。

やりたいこと詳しく

Ruby on railsのプロジェクトについて、gitレポジトリをWSL2上に置き、Windows上のRubymineから当該プロジェクトファイルを編集できます。
それだけでなく、RspecをRubymine上で実行し、Rubymineの「実行」ペインに結果が表示されたり、個別のスペックを「実行」すればそのファイルだけspec実行できたりする機能を使いたい。
そのためにはどうすればよいか、ということを記載いたします。

公式サイト記載のイメージ画像

こちらのページ: テスト結果の表示と調査 | RubyMine

使用した各種バージョン

  • Windows 10 Home / バージョン: 21H1 / ビルド: 19043.1889
  • Docker Desktop for Windows 4.10.1 (82475)
  • Rubymine 2022.2.1(2022/08/21時点での最新版)

前提

  • RubymineにはJapanese Language Packを入れてあります。
  • WSL2用のLinuxとして、「Ubuntu-20.04」を入れて利用していると仮定します。
  • Rspecを実行したいソースファイルは、下記パスにあると仮定します。
    • /home/hogehoge/development/samplerails
  • /home/hogehoge/development/samplerails/docker-compose.ymlにてコンテナオーケストレーションしており、railsのコンテナ名は、「web」とします。

手順

  1. Windows上で、WSLパスをネットワークドライブに割り当てる
  2. Windows上のRubymineから、ネットワークドライブ上(WSL上)のソースを開く
  3. WSL2上で、WSL2上のソースにアクセスしてdockerコンテナを立ち上げる
  4. Rubymine上にていろいろ設定
  5. Rubymine上で、Rspecを実行

以下、順に説明いたします。

1. Windows上で、WSLパスをネットワークドライブに割り当てる

エクスプローラーの左側のファイルツリーにて、「PC」部分を右クリック→「ネットワークドライブの割り当てを開きます。

ここでは、「Z:」ドライブに、\\wsl$\Ubunut-20.04を割り当てます。

参考: WSLをネットワークドライブに割り当てて便利に使う方法 | ハングスタック

2. Windows上のRubymineから、ネットワークドライブ上(WSL上)のソースを開く

WSL2上で /home/hogehoge/development/samplerails のパスであれば、
Z:\home\hogehoge\development\samplerailsになります。
これをRubymineで開きます。

3. WSL2上で、WSL2上のソースにアクセスしてdockerコンテナを立ち上げる

Windows Terminal などから「Ubuntu-20.04」を立ち上げて、WSL2内のLinuxから、home/hogehoge/development/samplerailsにアクセスし、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-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 run

さらに、上記設定部分で、「パスマッピング」を設定します。

  • ローカル: Z:\home\hogehoge\development\samplerails
  • リモートは、上記ローカルに合わせて WSL2上のパスを指定します。

あとは、Rspecを実行すれば、底部のRunペインでRspecが実行されるはずです。

個別ファイルのRspec「実行」について

個別のspecファイルを「実行」して、当該ファイルだけRspecを実行したい場合は、下記設定が必要です。

Rubymine上にて、通常、右上にあるデバック部分にて、「実行構成の編集」をクリックします。

その後、上画像の右下あたりにある「構成テンプレートの編集」から、「Rspec」を選び、パスマッピングを上記と同様に設定します。
また、「docker-compose」の項目を「docker-compose run」にします。

これで、個別のspecファイルのタブ上で右クリック→実行で、当該ファイルだけRspecの実行を行い、結果が「実行」ペインに表示されるはずです。

トラブルシュート

Rspecの「実行」ペインが文字化けする

ヘルプ → カスタムVMオプションの編集を開き、下記を追記します。

-Dfile.encoding=UTF-8

再起動すれば直っているはずです。

参考: IntelliJ IDEAでのコンソールログの文字化け対応を行ってみた|ITエンジニアとして経験・学習したこと

Discussion