Launching IRB from your RubyGem
When developing a RubyGem, it is often helpful to launch an IRB console preloaded with your library. There are a few ways you can do this.
First you can call IRB directly with the path to your gem:
# If using bundler bundle exec irb -r./lib/my_gem.rb # Without irb -r./lib/my_gem.rb
This works great, and before Bundler, I always shipped a
task that ran a similar command.
If you are using Bundler you can do this easier with the
command. Behind the scenes it does pretty much the same thing, but it also
sets up Bundler so you have access to dependencies.
For most purposes,
bundle console is all you need. However, if you need to
add some custom behavior, such as console-only methods, you will need to
script this yourself.
I do this in some private projects to make it easier for debugging. For example, I am working on a CLI script that connects to multiple databases depending on the arguments given. In production this never happens at the same time. In development though, it is pretty useful to access multiple databases at once. Instead of copying and pasting the connection commands every time, I can package this in a console script.
In another project, there are some convenience methods that make it easier to work with the library in the console, but aren’t necessarily something that makes sense as a public API.
To illustrate, lets assume you have a gem called MyGem (using Bundler).
Create a file
lib/my_gem/console.rb that contains the following:
require "bundler/setup" require "my_gem" require "irb" puts "Loading MyGem" # Connect to the DBs MyGem.connect_to_db :one MyGem.connect_to_db :two # This method will be available in the console def say_hello puts "Say hello" end IRB.start
Next create a file in
require File.expand_path("../../lib/my_gem/console", __FILE__)
Now when you want to run MyGem in the console, simply run
and it will require the library, connect to the DBs, and define the