LoginSignup
21
18

More than 3 years have passed since last update.

RubyMine (IntelliJ) 2019.3 でDocker Compose環境でのRails 6アプリのデバッグを試してみた

Last updated at Posted at 2019-12-31

追記(20200614)

公式のYoutube ChannelでRubyMineのDocker Compose環境をセットアップするためのビデオ(英語)が公開されています。
https://blog.jetbrains.com/ruby/2020/06/video-tutorial-rubymine-and-docker-compose/

はじめに

前回RubyMine 2019.1.2でdocker compose環境でのRailsアプリのデバッグを試してみたを書いてからしばらくたちました。
RubyMine 2019.3になって久々にRubyMineの公式チュートリアルリモートインタープリターとしてDocker Composeを使用する試してみたところ、以前と比較して、ハマりどころが適切にガイドされるようになり改善が見られた一方、
- サンプルアプリがRails 6になった
- macOSがCatalinaになった
等の影響で、新たなハマりポイントがありました。(色々報告したところ2019.3リリースの時点より改善されましたが、一部残っている)同じような問題に遭遇するかもしれない方のためにシェアしたいと思います。

テスト環境

  • OS:macOS 10.15.2
  • RubyMine: 2019.3.1
  • Docker Desktop(for Mac)] 2.1.0.5 Engine:19.03.5 Compose: 1.24.1

チュートリアル手順

公式チュートリアルの内容を実行する上で、(私が経験した)ハマりどころと対応策を見ていきます。
以下の内容はチュートリアルを同じですが、手早くデバッグできることを確認したいので、マニュアルとは手順が多少異なっている箇所があります。また、以下のほとんどはRubyMineで試していますが、リモートインタプリタの設定以外はIntelliJ IDEA Ultimateでも同じようにデバッグが可能です。

RubyMineのセキュリティ登録

落とし穴:(すべての環境で設定が必要かは不明ですが)macOS Catalinaから様々なセキュリティが強化されたため、追加設定が必要なケースがあるようです。
具体的には後述するリモートインタープリターの設定を行う際に、設定ダイアログからdocker-composeの情報を取得する際に失敗するという問題がありました。この問題を回避するために以下の設定を行いました。
対応:[システム環境設定]-[セキュリティーとプライバシー]-[デベロッパツール]から[+]を押し、プログラムの登録ダイアログを表示します。
スクリーンショット 2019-12-24 2.18.16.png

画面右上の検索窓からRubyMineを選択(複数ある場合は一番新しくてファイルサイズの大きいもの)を指定します。RubyMineを起動中の場合、RubyMineを終了させる通知が表示されるので従います。
スクリーンショット 2019-12-24 1.58.37.png

サンプルプロジェクトのダウンロード

Welcome画面から「Check out from Version Control」を選択します。
スクリーンショット 2019-12-24 1.04.32.png
URL欄にチュートリアルに記載のあるURLhttps://github.com/JetBrains/sample_rails_app.gitを指定します。
スクリーンショット 2019-12-14 17.18.15.png

ダウンロードが完了すると、RubyMineは前回のチュートリアル同様、RubyMineが自動的にローカルのRakeを呼ぼうとしてエラーになるかもしれませんが無視します。
スクリーンショット 2019-12-14 17.22.37.png

Gemfileの変更

チュートリアルの指示通りで問題ありません。ただし、docker-compose buildを後で再度実行したくないので、ここで先に変更しています。
- [shift]x2 でSearch Everywhereをダイアログを呼びだし、
「gemf」と入力し、GemFileを選択し、開き'debase'と'ruby-debug-ide'のコメントを解除します。
スクリーンショット 2019-12-24 1.22.32.png

config/database.ymlの変更

チュートリアルの指示通りで問題ありません。
- [shift]x2 でSearch Everywhereをダイアログを呼びだし、
- 「database」と入力し、config/database.ymlを選択し、開きます。
- #developmentセクションでsqlite3の指定をコメントアウトし、postgresqlの方をコメントを外して有効にします。(コメントアウト・コメント外しの両方とも、範囲選択して[command]+[/]でできます)
スクリーンショット 2019-12-24 1.26.59.png

docker-compose upの実行(Railsアプリの起動)

RubyMineで使用するリモートインタープリターを設定するためには、インタープリターが実行されているリモート環境にアクセスする必要があります。Docker ComposeでRailsアプリが含まれる一連のサービスを実行します。
実行方法はチュートリアルの指示通りで問題ありません。docker-compose.ymlファイルの緑二重矢印をクリックします。
または、RubyMineのターミナルから以下のコマンドを実行します。
- docker-compose up -d
スクリーンショット 2019-12-24 1.50.42.png

リモートインタープリターの指定

Docker Composeで実行中のRailsアプリのRubyをリモートインタープリターとして指定します。
チュートリアルの指示通りで問題ありません。docker composeのエラーが出る場合は、前述の「RubyMineのセキュリティ登録」の設定に問題がある場合があります。
RubyMineの場合
- [shift]x2 でSearch Everywhereをダイアログを呼びだし、「Ruby SDK」と入力し
(または、
[RubyMine]-[Preferences..]-[Languages & Frameworks]-[Ruby SDK & Gems]から)
インタープリター設定ダイアログ表示し、[+]ボタンをクリックします。
スクリーンショット 2019-12-14 17.26.05.png
[New remote...]を選択します。
スクリーンショット 2019-12-14 17.27.12.png
[Docker Compose]を選択します。[Service]プルダウンから、Railアプリが実行されている[web]を選択します。
スクリーンショット 2019-12-14 17.27.36.png
- 新しく追加されたリモートインタープリターを選択します。
スクリーンショット 2019-12-14 17.29.28.png
RubyMineがリモートインタープリターのファイル群に対してIndexing処理を開始します。完了までしばらく時間がかかります。
スクリーンショット 2019-12-14 17.30.25.png

IntelliJ IDEA + Rubyプラグインの場合
[File]-[Project Structure...]-[Project Settings]-[Project]のProject SDKの[New...]ボタン、または、
IJ_project_settings.png
[File]-[Project Structure...]-[Project Settings]-[Modules]のRuby SDK and Gemsの[+]ボタンから、リモートインタープリタの指定が可能です。
IJ_module_settings.png

Railsアプリで使用するDBの初期化(Run AnythingでRakeタスクを簡単実行)

チュートリアルの(注意書きも含めた)指示通りで問題ありません。
このステップでは、RubyMineの[control]x2(Run Anything機能)を用いてコンテナ上でrakeコマンドを実行します。
リモートインタープリタ設定が正しく終わっていると、
- [control]x2でRun Anythingダイアログを表示します。
- [rake]と入力し、表宇される[rake --tasks]を選択し、実行します。
これにより、以降のrakeコマンドがコンテナに対して実行されるようになります。
スクリーンショット 2019-12-14 17.32.14.png
- [control]x2でRun Anythingダイアログを表示します。
- 「db:c」を入力します
- [rake db:create]を選択します。
スクリーンショット 2019-12-14 17.32.52.png
- 以下のダイアログが表示されるので[OK]を選択します。
スクリーンショット 2019-12-14 17.33.05.png
- [control]x2でRun Anythingダイアログを表示します。
- 「db:m」を入力します
- [rake db:migrate]を選択します。
スクリーンショット 2019-12-14 17.33.36.png
- 以下のダイアログが表示されるので[OK]を選択します。
スクリーンショット 2019-12-14 17.33.49.png
以上で、Railsアプリを実行するために必要なDBの準備ができました。

Railアプリの実行とデバッグ

落とし穴:RubyMineでRailsアプリをデバッグ実行した場合、http://localhost:3000 に初回アクセス時にpublic/packsが生成されず、エラーになる
対応:
RubyMineでRailsアプリをノーマル実行したあと、デバッグ実行する。

実行設定の確認

  • 画面上部Run/Debug構成で[Development:<プロジェクト名>]を選択します。 RunConfig.png
  • docker composeの設定でdocker-compose upが選択されていることを確認します。
  • [OK]をクリックします。 RunConfigDockerCOmpose.png

Railsアプリのノーマル実行

このステップは前述の落とし穴を回避するために実行するものです。
- Run(再生)ボタンをクリックし、Railsアプリを実行します。
- ブラウザで http://localhost:3000 にアクセスします。
RunDevelopmenet.png
- 表示まで暫く時間がかかるかもしれません。画面下部のRunツールウィンドウWebpackerが実行されているのが確認できます。
WebpackerCompiling.png
- ブラウザで以下の画面が表示され、Railsアプリが起動できていることを確認します。
SampleAppRunning.png

Railsアプリのデバッグ実行

チュートリアルの指示通りで問題ありません。同じようにブレークポイントを設定し、デバッグ実行します。
- [shift]x2 でSearch Everywhereをダイアログを呼びだし、[uc]と入力し[users_controller.rb]を選択します。
findUserController.png
- createメソッドにbreakpointをセットします。
setbreakpoint.png
- 虫のアイコンでデバッグ実行を開始します。
RunDebug.png
- 以下のようなダイアログが表示されるので[Stop and Rerun]を選択します
DebugConfirm.png
- http://localhost:3000 にアクセスします。[Sign up now]ボタンをクリックしすると、Sign up画面が表示されます。適当に情報を入力し[Create my account]ボタンをクリックします。
signup.png
- RubyMineのブレークポイントで止まれば成功です🎉
breakpoint.png

まとめ

RubyMine 2019.3でDocker Compose環境でRails6アプリのデバッグを行うチュートリアルをmacOSで試しながら、自分がハマったポイントを紹介しました。

結局Docker Compose環境でデバッグするために何が必要なのか?

チュートリアルの手順はそれなりに長いのですが、この文書を書いている現在(2019年12月24日)においては、チュートリアルでは結局何が必要なの明示的には言及されていないと思います。
私の理解では、必要なことは
- デバッグ用Gemのリモート(コンテナ)環境へのインストール
- Docker Compose用リモートインタープリターの設定
かと思います。それ以外はローカルにインストールされたRuby/Railsアプリと同じような手順でデバッグ開始可能なようです。
一方で、
- 本記事で紹介したmacOS環境におけるセキュリティ設定、デバッグ実行だとWebpackerが実行されない
- Docker Composeのvolumeの設定とyarn installやbundle install、docker-compose buildが実行されるタイミングを気にしないと、思ったとおりに設定されない状態に陥りやすい
がハマリポイントになる可能性があると思います。ご自身のRailsアプリでnodeやgemのインストールがうまく行かない場合は、チュートリアルが動作するかを確認してみたり、チュートリアルに含まれるDockerfileやdocoker-compose.ymlをご自身の環境と比較してみたり、[Services]ツールウィンドウからコンテナのFilesを確認してみると、コンテナ起動時に何が起きるか把握できてトラブルシューティングに役立つと思います。
docker_files.png

21
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
18