追記(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の情報を取得する際に失敗するという問題がありました。この問題を回避するために以下の設定を行いました。
対応:[システム環境設定]-[セキュリティーとプライバシー]-[デベロッパツール]から[+]を押し、プログラムの登録ダイアログを表示します。
画面右上の検索窓からRubyMineを選択(複数ある場合は一番新しくてファイルサイズの大きいもの)を指定します。RubyMineを起動中の場合、RubyMineを終了させる通知が表示されるので従います。
サンプルプロジェクトのダウンロード
Welcome画面から「Check out from Version Control」を選択します。
URL欄にチュートリアルに記載のあるURLhttps://github.com/JetBrains/sample_rails_app.gitを指定します。
ダウンロードが完了すると、RubyMineは前回のチュートリアル同様、RubyMineが自動的にローカルのRakeを呼ぼうとしてエラーになるかもしれませんが無視します。
##Gemfileの変更
チュートリアルの指示通りで問題ありません。ただし、docker-compose buildを後で再度実行したくないので、ここで先に変更しています。
- [shift]x2 でSearch Everywhereをダイアログを呼びだし、
「gemf」と入力し、GemFileを選択し、開き'debase'と'ruby-debug-ide'のコメントを解除します。
##config/database.ymlの変更
チュートリアルの指示通りで問題ありません。
- [shift]x2 でSearch Everywhereをダイアログを呼びだし、
- 「database」と入力し、config/database.ymlを選択し、開きます。
- #developmentセクションでsqlite3の指定をコメントアウトし、postgresqlの方をコメントを外して有効にします。(コメントアウト・コメント外しの両方とも、範囲選択して[command]+[/]でできます)
##docker-compose upの実行(Railsアプリの起動)
RubyMineで使用するリモートインタープリターを設定するためには、インタープリターが実行されているリモート環境にアクセスする必要があります。Docker ComposeでRailsアプリが含まれる一連のサービスを実行します。
実行方法はチュートリアルの指示通りで問題ありません。docker-compose.ymlファイルの緑二重矢印をクリックします。
または、RubyMineのターミナルから以下のコマンドを実行します。
- docker-compose up -d
##リモートインタープリターの指定
Docker Composeで実行中のRailsアプリのRubyをリモートインタープリターとして指定します。
チュートリアルの指示通りで問題ありません。docker composeのエラーが出る場合は、前述の「RubyMineのセキュリティ登録」の設定に問題がある場合があります。
RubyMineの場合
- [shift]x2 でSearch Everywhereをダイアログを呼びだし、「Ruby SDK」と入力し
(または、
[RubyMine]-[Preferences..]-[Languages & Frameworks]-[Ruby SDK & Gems]から)
インタープリター設定ダイアログ表示し、[+]ボタンをクリックします。
IntelliJ IDEA + Rubyプラグインの場合
[File]-[Project Structure...]-[Project Settings]-[Project]のProject SDKの[New...]ボタン、または、
[File]-[Project Structure...]-[Project Settings]-[Modules]のRuby SDK and Gemsの[+]ボタンから、リモートインタープリタの指定が可能です。
##Railsアプリで使用するDBの初期化(Run AnythingでRakeタスクを簡単実行)
チュートリアルの(注意書きも含めた)指示通りで問題ありません。
このステップでは、RubyMineの[control]x2(Run Anything機能)を用いてコンテナ上でrakeコマンドを実行します。
リモートインタープリタ設定が正しく終わっていると、
- [control]x2でRun Anythingダイアログを表示します。
- [rake]と入力し、表宇される[rake --tasks]を選択し、実行します。
これにより、以降のrakeコマンドがコンテナに対して実行されるようになります。
##Railアプリの実行とデバッグ
落とし穴:RubyMineでRailsアプリをデバッグ実行した場合、http://localhost:3000 に初回アクセス時にpublic/packsが生成されず、エラーになる
対応:
RubyMineでRailsアプリをノーマル実行したあと、デバッグ実行する。
実行設定の確認
- 画面上部Run/Debug構成で[Development:<プロジェクト名>]を選択します。
Railsアプリのノーマル実行
このステップは前述の落とし穴を回避するために実行するものです。
- Run(再生)ボタンをクリックし、Railsアプリを実行します。
- ブラウザで http://localhost:3000 にアクセスします。
Railsアプリのデバッグ実行
チュートリアルの指示通りで問題ありません。同じようにブレークポイントを設定し、デバッグ実行します。
- [shift]x2 でSearch Everywhereをダイアログを呼びだし、[uc]と入力し[users_controller.rb]を選択します。
#まとめ
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を確認してみると、コンテナ起動時に何が起きるか把握できてトラブルシューティングに役立つと思います。