Ractor.shareable_lambda の呼び出し方を標準ブロック構文へ統一
Action Mailbox のコールバックで使用されている ActiveSupport::Ractors.shareable_lambda が、非推奨的な &-> 構文から標準的なブロック構文へ置き換えられ、可読性が向上しました。
背景
この PR では、Ractor 共有可能なラムダを生成するユーティリティの呼び出し方が、コードベースに入り込んだ非標準的な書き方 (shareable_lambda(&->(args){ … })) になっていた点が指摘されました。非標準構文は読者にとって直感的でなく、意図が見えにくいという問題があります。コードレビューで「このパターンは入ってしまったので、今後は続かせない」とのコメントがあり、コードベースの一貫性を保つために修正が行われました。結果として、既存の挙動は変わらず、可読性と保守性だけが改善されました。
技術的な変更
変更点は actionmailbox/lib/action_mailbox/callbacks.rb の TERMINATOR 定義だけです。具体的には、ActiveSupport::Ractors.shareable_lambda に対して &-> で proc を作成して渡す形から、直接ブロックを渡す形へ変更されました。
@@
- TERMINATOR = ActiveSupport::Ractors.shareable_lambda(&->(mailbox, chain) do
- chain.call
- mailbox.finished_processing?
- end)
+ TERMINATOR = ActiveSupport::Ractors.shareable_lambda do |mailbox, chain|
+ chain.call
+ mailbox.finished_processing?
+ end
変更前は &->(mailbox, chain) { … } という構文で匿名関数を生成し、shareable_lambda に渡していました。変更後は同等のロジックを ブロックリテラル として直接 shareable_lambda に渡すだけで、余計な proc ラップが排除されました。この差分は 2 行の削除と 2 行の追加に過ぎず、メソッドシグネチャや戻り値に影響はありません。
設計判断
今回の修正は API の拡張ではなく、呼び出し側の記法統一 を目的としています。shareable_lambda は既にブロックを受け取る仕様であるため、&-> を用いたラップは冗長です。コードベース全体で同様のパターンが散在していた場合、統一された記法に揃えることで新規参入者がコードを読んだときの理解コストが低減します。加えて、非標準構文の残存は将来的なリファクタリングやツールチェーンの警告対象になる可能性があるため、早期に除去する判断は妥当です。
まとめ
ActiveSupport::Ractors.shareable_lambda の呼び出しを shareable_lambda { |args| … } 形式に統一することで、振る舞いを変えることなくコードの可読性と保守性が向上しました。この変更は Action Mailbox のコールバックロジックに限定されているため、他のコンポーネントへの影響はありませんが、Rails コア全体での記法統一の一歩となります。