When working with JavaScript, I found myself moving from ViM, to Atom, to Brackets, and finally to VSCode. While VSCode is still my go-to for all JavaScript awesomeness, and then starting to use it for Ruby I thought I had an overall winner. While you will find me nose-deep in VSCode working with Ruby alone, once I dived into Rails there simply was not enough support. Looking at the various IDEs available, I decided to give the RubyMine trial a shot even though I was already someone not fond of the Idea IDE for other languages. After a week of working with RubyMine I knew this was what I was looking for.

rubymine tab complete

One of the biggest issues of the Idea-based IDEs is just how bloated they are, but there are times when the features simply outweigh this sacrifice. One of the biggest benefits, especially for those fairly new to Ruby/Rails is having the code completion and hinting features. Tab completion for Rails routes based on your code, Ruby and Rails methods based on the object type, even snippets built into tab completion for any required modules are just a few examples of this power.



This is definitely a feature that can make or break the perspective of an IDE. For me finding almost no Rails support with VSCode really made me reach back out to other IDEs. Once I starting working with RubyMine I felt overwhelmed with its ability being one of the more bloated IDEs out there. Even so it was refreshing to find such an IDE that allowed me to setup multiple profiles for debugging the actual Rails app while it is running, as well as setting an entirely different profile for my Rspec and Capybara tests. I do have to mention that jumping into this feature was pretty confusing due to the amount of capability, as well as how it’s debugger interacts with these processes; setting up a Rspec profile took a few hours of my time Google’ing others having issues only to get debugging to work at all with my rails_helper especially when the default behavior hides the .rspec file. Once I was able to get Rspec testing running,

I have been more than happy with the functionality, as well as being able to create profiles based on per-file, per-folder testing, as well as a default profile for all other tests. With the Rails debugging documentation being unclear on how to setup a working Rails setup, it’s hard to get debugging working with a single command when you have several other services to start at the same time (e.g. Sidekiq, ElasticSearch, Redis, etc). Just when you feel you know what to do, something else from the functionality trips up the startup, making it a light rubix cube of a setup.

In summary it is great feature overall, but one with a very steep learning curve.

Quick Navigation

rubymine quick nav

Sometimes it isn’t easy to jump into a new project that’s already written to start familiarizing yourself with the structure, and finding files alone can be a chore in itself. RubyMine’s built-in quick navigation not only makes for easy to traverse code, but also easy to find code. One of the features I use every single day is the Search Everywhere feature, that not only allows me to find files with a single keyword, but also pick a single folder and look to see what files exist there. Even better, when you are working on a single file, you can quickly look in the current folder for the containing files, switch to parent folder, and traverse the entire scaffold very quickly.

rubymine quick search everywhere
Search Everywhere for Anything!

What about those functions you find used, but have no idea where it resides? With a single keystroke you can move to the containing file of that method or function, find all uses of that method, function, or even CSS class, and move to those areas. To top things off even more, with each rails controller you will find an icon next to each method, and clicking on that icon will send you straight to the view, no more moving back and forth between the controller and view folders. Too cool!



JavaScript Ability

Coming from a JavaScript background, and wanting to incorporation technologies like React, and Node.js with Rails, it

is expected to need to use another IDE for JavaScript when working with Rails. I say this because Idea likes to separate functionality with their individual applications (excluding the Idea suite), where you are limited to the language the app is specifically made for. Needless to say it was incredibly surprising to see that RubyMine had fully-functional JavaScript features available. This includes Webpack, Node.js, and Bower support for all of your JS dependencies, but also ES6, ES7, React, and Flow syntax support. You also have the ability to use linters of all kind, including ClojureLinter which leads me to believe there is Clojure support in RubyMine as well.

Color Config

RubyMine Color SchemesWhile the color profile may not seem like anything of any importance, if you are a closet artist like myself, color means everything when writing code. It’s sad to say that with such a feature-rich application that there is a huge lack of color themes. I’m sure there are people sharing theirs to import, but there is also a lack of a built-in repository to share such themes. Even without having great themes at your fingertips there is a fully-customizable settings for syntax coloring, making it incredibly easy to create your own theme, something the lightweight Electron IDEs lack. While I cannot truly say if there are options to change the colors of the UI itself, there seems to be options for everything else in the app, so you can at least make 95% of what you see full of vibrant colors.


SDK Support

It is very rare to me to find IDEs that support multiple versions of SDKs when it’s needed, like with Node.js and nvm when testing multiple versions of Ruby Environment VersionNode code. I expected the same with RubyMine, but quickly found myself faced with an IDE that automatically detected rvm, but also rbenv which is what I used for Ruby versions. Without any setup the project and debugging profiles all offer the available SDKs choosing the default version based on the project folder’s version setting.

Built-In Database Tools

RubyMine Diagrams
You can even show a single table relation with the DB diagrams.

Just when I thought I had everything I needed, and feeling I was going to rely on the Rails console, and the database client I quickly found myself with fully functional relational database tools and diagrams. The day I jumped into a monolithic Rails app I was overwhelmed, and knew going through each and every table to compare relations was going to be an ordeal. Luckily the developers had several tricks up their sleeves.


RubyMine Quick Documentation
Quick Document Table Output

The first important feature is the ability to choose a table, and instantly see the table layout via the Quick Documentation. Then there is the database diagram feature, that allows you to see all relationships for tables, and models in a easily printable flow chart. Lastly is the built-in SQL tools that allow you to query, alter, and update your database and records; think of it as a bigger and better MySQL Tools/Workbench, or PHP*Admin with so many more helpful features.



Support and Settings

Besides all of the awesome features found in the IDE, it is surprising that there is not more support, at least for RubyMine. Most all of the issues and questions I had lead me down a rabbit-hole of posts for older versions, and while there is a community, getting actual support from support reps seems to be quite hard to obtain. Even so, the product is great, and if you have an open-source project that you maintain, you can actually obtain a license for the entire Idea suite for free. Even if you do not have an open-source project, the annual plan is quite affordable, and the price goes down each year for recurring members.


In Conclusion….

Even though I am huge advocate for IDEs like Atom, and VSCode, and even swore I wouldn’t use monolithic IDEs again after going through so many in the past, when it comes to Ruby on Rails programming RubyMine is by far my IDE of choice. At this time VSCode and Atom really lack a lot of functionality needed for RoR, and what seems like little focus in the Ruby/Rails community there simply isn’t another choice without sacrificing a lot of functionality.