Ruby: IRBとRailsコンソールで強化された機能: 2024年上半期(翻訳)
Rubyエコシステムの中核の一部であるIRB(Interactive-RuBy)は開発者にとって大きな価値のあるツールです。IRBは変更や改善を早いペースで繰り返しているので、最新の機能を常にキャッチアップしておくことで開発ワークフローを大幅に強化できます。
本記事では、2024年上半期の時点(v1.11.0
〜v1.14.0
)のIRBの重要な更新と、Railsコンソールで強化された機能を紹介します。
(v1.11.0
より前のIRBで行われた機能強化については私の過去記事↓でお読みいただけます)
原注
IRBのアップグレードは、Gemfileにgem "irb"
を明示的に追加する形でgemとしてインストールするだけでできます。
🔗 1: ヘルプコマンドとヘルプメッセージの改善
🔗 全般的な改善点
ヘルプ機能の良さは、使い勝手を左右する大事な決め手です。IRBのheop
コマンドが今回大幅に強化されました。
- 変更前の振る舞い
RubyのAPIドキュメントを探索するには、別途ri
コンソールを開く必要がありました。 -
最新の振る舞い
ユーザーからの要望を反映して、ri
コンソールを開かなくてもIRB自身でヘルプメッセージを表示できるようになりました。 -
APIドキュメント
IRBでshow_doc
を実行することでAPIドキュメントを検索できるようになりました。
訳注
Rubyをビルドするときに--disable-install-doc
オプションを渡していた場合は、show_doc
でドキュメントを検索できません。
🔗 コマンドを指定して詳細なヘルプを表示
新しいhelp コマンド名
機能を用いてツールの利用法を詳しく表示できるようになり、機能を探しやすくなりました。
🔗 実行例
irb(main):001> help edit
Usage: edit [FILE or constant or method signature]
Open a file in the editor specified in ENV["VISUAL"] or ENV["EDITOR"]
- If no arguments are provided, IRB will attempt to open the file the current context was defined in.
- If FILE is provided, IRB will open the file.
- If a constant or method signature is provided, IRB will attempt to locate the source file and open it.
Examples:
edit
edit foo.rb
edit Foo
edit Foo#bar
🔗 2: IRBの拡張API
IRB v1.13.0
から、IRBの機能を拡張できる新しいAPIが導入されました。自分のライブラリでこのAPIを用いることで、IRBセッションに新しいコマンドを追加したり、特定のニーズを満たすヘルパーメソッドを作成したりといったカスタマイズや拡張が行えます。
🔗 ヘルパーメソッドとコマンドについて
- ヘルパーメソッド
アプリケーションとやりとりするRubyオブジェクトを返すよう設計されています。
例:admin_user
メソッドは常にadminユーザーオブジェクトを返します。 -
コマンド
シェルコマンドと同様に、タスクを実行したり情報を表示したりします。
例: IRBのshow_source
コマンドやedit
コマンド
🔗 実際のAPI拡張例
Railsコンソール | - mission_control-jobs gem |
---|---|
app ヘルパー |
connect_to コマンド |
reload コマンド |
|jobs_help コマンド |
このAPIについて詳しくは、以下のドキュメントを参照してください。
参考: irb/EXTEND_IRB.md at master · ruby/irb
🔗 3: 新コマンド
🔗 disable_irb
コマンド
disable_irb
コマンドを実行すると、そのセッションでのbinding.irb
呼び出しを無効にします。これによって、特にループや頻繁に呼び出されるコードパスでのブレークポイントが使いやすくなります。
🔗 主な用途
以前のbinding.irb
のユーザーは、以下のいずれかの方法でブレークポイントを終了していました。
exit
: 現在のブレークポイントを終了するexit!
: プロセス全体を終了する
しかし、ループ内などで繰り返し実行されるコードパスでexit
コマンドを使うと面倒なことになる可能性がありました。
このdisable_irb
は、現在のブレークポイントを終了すると同時に、セッション内の以後のブレークポイントをすべて無効にします。これによって、プログラムで直ちに操作を再開できるようになります。
🔗 利用例
🔗 cd
コマンド
新しいcd
コマンドを使って、IRBセッション内でコンテキストを手軽に移動できるようになりました。
cd <オブジェクト名>
を実行することで<オブジェクト名>
を現在のコンテキストに切り替えることも、cd ..
で直前のコンテキストに戻ることも可能です。
ただし、Pry
のcd
コマンドのようなcd @x/@y
やcd -
などはサポートされていません。
🔗 利用例
# test.rb
class Foo
def bar
puts "bar"
end
end
f = Foo.new
binding.irb
🔗 cd
コマンドのヘルプメッセージ
Usage: cd ([target]|..)
IRB uses a stack of workspaces to keep track of context(s), with `pushws` and `popws` commands to manipulate the stack.
The `cd` command is an attempt to simplify the operation and will be subject to change.
When given:
- an object, cd will use that object as the new context by pushing it onto the workspace stack.
- "..", cd will leave the current context by popping the top workspace off the stack.
- no arguments, cd will move to the top workspace on the stack by popping off all workspaces.
Examples:
cd Foo
cd Foo.new
cd @ivar
cd ..
cd
🔗 4: 既存のコマンドの強化
🔗 show_source
コマンド
show_source
コマンドが大幅に更新され、さらに強力で使いやすくなりました。
🔗 強化された機能
- IRBセッション内で定義したメソッドも表示可能になった:
従来のshow_source
コマンドは、IRBセッション内で定義したメソッドを表示できませんでしたが、この制約が解消されました。
irb(main):001* class Foo
irb(main):002* def bar; end
irb(main):003> end
=> :bar
irb(main):004> show_source Foo#bar
From: (irb):2
def bar; end
=> nil
🔗 バグ修正
- トップレベル定数の扱い:
::Post
などのトップレベル定数に関連する問題を修正。 -
定数探索ロジックの改善:
信頼性と使いやすさを向上。 -
ヘルプメッセージの充実:
Usage: show_source [target] [-s]
-s Show the super method. You can stack it like `-ss` to show the super of the super, etc.
Examples:
show_source Foo
show_source Foo#bar
show_source Foo#bar -s
show_source Foo.baz
show_source Foo::BAR
🔗 irb:rdbg
セッション
irb:rdbg
セッションは、IRBに統合されたデバッグ機能を提供します。
🔗 バグ修正
- 履歴の保存や入力認識に関連する問題を修正、信頼性や使いやすさを向上。
🔗 直前に実行したコマンドの再実行
c
(continue)のような特定コマンドの実行後に改行のみを入力すると、そのコマンドを自動的に再実行します。この振る舞いはdebug
のREPLの振る舞いと同じなので、より快適に使えるようになります。
🔗 追加情報
RUBY_DEBUG_IRB_CONSOLE=1
環境変数を設定すると、debug
のデフォルトのコンソールがirb:rdbg
に置き換わります。これにより、ユーザーはIRBセッションのメリットを享受しながらdebugger
やbinding.break
を利用できるようになります。
irb:rdbg
について詳しくは、GitHubにあるIRBのREADMEを参照してください。
🔗 5: Railsコンソールの改善
🔗 Railsに適したプロンプト
Railsコンソールに、Rails固有のプロンプトが表示されるようになりました(訳注: これはRails 7.2.0から利用可能になる機能です)。
プロンプトの形式はアプリ名(環境名)>
です。
例: my-app(prod)>
この機能強化によって、作業しているアプリケーション名や環境名がひと目でわかるようになり、コンテキストの取り違えミスを減らせます。
🔗 ヘルプメッセージがIRBのヘルプシステムに統合された
RailsのコマンドやヘルパーメソッドがIRBのヘルプメッセージシステムに統合され、IRBセッションでの検索や利用が行いやすくなりました(訳注: これもRails 7.2.0から利用可能になる機能です)。
🔗 例
my-app(dev)> help
...
Rails console
reload! Reloads the Rails application.
Helper methods
conf Returns the current IRB context.
helper Gets helper methods available to ApplicationController.
controller Gets a new instance of ApplicationController.
new_session [Deprecated] Please use `app(true)` instead.
app Creates a new ActionDispatch::Integration::Session and memoizes it. Use `app(true)` to create a new instance.
...
🔗 まとめ
2024年の上半期はIRBに素晴らしい機能強化がいくつも導入されました。より直感的になったhelp
コマンドから強力な拡張APIまで、IRBはRuby開発者を楽にするために今も進化を繰り返しています。disable_irb
やcd
などのコマンドによって普段よく使うタスクがシンプルになり、show_source
コマンドやirb:rdbg
セッションによってデバッグがスムーズになりました。
Railsコンソールも負けずに強化されています。Rails固有のプロンプト形式が導入されたことで現在の環境がひと目でわかるようになり、RailsコマンドやヘルパーメソッドがIRBのヘルプシステムにより良い形で統合されたことで便利なコマンドを見つけやすくなりました。
最後に、これらの機能強化を可能にしてくれたコミュニティのコントリビュータの皆さんに心から感謝申し上げます。ぜひIRBの新機能を体験して、年末のさらなるIRBアップデートにもご期待ください。
概要
CC BY-NC-SA 4.0 Deedに基づいて翻訳・公開いたします。
原文公開日: 2024/07/17
CC BY-NC-SA 4.0 Deed | 表示 - 非営利 - 継承 4.0 国際 | Creative Commons
日本語タイトルは内容に即したものにしまた。
原文の目次は省略しました。