Ruby IDE: Review of RubyMine
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.
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.
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!
While 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.
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 Node 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
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.
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.
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.