DiffDaily Deep & Concise - OSS変更の定点観測
トップに戻る

rails/jbuilder

https://github.com/rails/jbuilder

ActiveModelオブジェクトに追加ローカル変数を渡すとドロップされる不具合を修正

v2.15.0で発生したリグレッションを修正するPRです。`json.partial! @post, highlighted: true` のようにActiveModelオブジェクトと追加ローカル変数を組み合わせた呼び出しで、ローカル変数がサイレントにドロップされていた問題を1行の変更(`args.one?` チェックの復元)で解消しています。

2026年05月27日 Claude Sonnet 4.6

インラインパーシャルでのオブジェクトレンダリング時にローカル変数が消失するバグを修正

Jbuilderのインラインパーシャルでオブジェクトをレンダリングするとカスタムローカル変数が無視されるバグを修正。`_set_inline_partial`が`options[:locals]`を早期に上書きしていた問題を解消するため、ローカル変数の組み立て責務を`_render_partial_with_options`に一元化し、中間メソッド`_render_partial`も削除された。

2026年05月15日 Claude Sonnet 4.6

`_map_collection` の中間配列アロケーションを削減する最適化

`_map_collection` の実装を配列減算(`- [BLANK]`)から破壊的な `Array#delete` に変更し、中間オブジェクトのアロケーション数を3から1に削減。ベンチマーク上でスループット約1.14倍の向上とメモリアロケーション半減を確認。`filter_map` 案が逆に1.61倍遅いという結果も示されており、Ruby配列操作のコスト特性を再確認できる変更です。

2026年05月15日 Claude Sonnet 4.6

Rack バージョンに応じて HTTP 422 のシンボルを切り替えるスキャフォールド生成

Rack v3.1.0 で HTTP 422 のシンボルが `:unprocessable_entity` から `:unprocessable_content` に変更されたことを受け、jbuilder のスキャフォールドジェネレーターが実行時に Rack バージョンを検出して適切なシンボルを動的に選択するようになりました。actionpack への依存を追加せず、`Rack::Utils::SYMBOL_TO_STATUS_CODE.key(422)` のリバースルックアップで Rack 自身の定義を参照する方式が採用されています。

2026年05月15日 Claude Sonnet 4.6

`set!` と `array!` のメモリ割り当てとホットスポットを削減する最適化

`set!` と `array!` の内部実装を最適化し、メモリ割り当て削減とスループット向上を実現。スプラットの二重発生を防ぐプライベートメソッドの導入、`BasicObject` 環境での `::Kernel.block_given?` をブロック直接参照に置き換え、誤ったセマンティクスを持つ `args.one?` ガードの削除という3点の改善を組み合わせています。

2026年05月15日 Claude Sonnet 4.6

`method_missing` が誤って公開されていたバグを修正

`alias_method` がアクセス修飾子を無視するRubyの仕様により、Jbuilderの `method_missing` が意図せず公開メソッドになっていた問題を修正しました。`alias_method :method_missing, :set!` の直後に `private :method_missing` を明示的に追加することで正しい可視性が保証され、`method_missing` をキーとして使う DSL 呼び出しが正しく機能するようになります。

2026年05月15日 Claude Sonnet 4.6

CI設定からRuby 3.2とRails mainブランチの組み合わせを除外

JbuilderのCIからRuby 3.2とRails mainブランチの組み合わせを除外。Rails本体が#56511でRuby 3.2サポートを終了したことに伴う調整で、テストマトリクスの除外リストに追加されました。

2026年02月10日 Claude Sonnet 4.5

キャッシュヒット時のKeyFormatterパフォーマンスを最適化

JbuilderのKeyFormatterにcheck-lock-checkパターンを導入し、キャッシュヒット時のミューテックスロックを回避。format()メソッドが2.33倍高速化され、実際のjson.set!呼び出しでも1.29倍の改善を達成。

2026年01月23日 Claude Sonnet 4.5

© 2026 DiffDaily - Powered by AI

タケユー・ウェブ