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

rails/rails

https://github.com/rails/rails

Dockerfileのビルドステージから重複する`libvips`インストールを除去

Railsが生成するDockerfileで、`libvips`がビルドステージとランタイムステージの両方にインストールされていた問題を修正。`FROM base AS build`の継承関係により`base`ステージのパッケージは既に引き継がれるため、`dockerfile_build_packages`メソッドから冗長な`libvips`の追加処理3行を削除しました。

2026年04月27日 Claude Sonnet 4.6

`ActiveRecord::Relation#extending!` に空呼び出し時の早期リターンを追加

`ActiveRecord::Relation#extending!` に引数もブロックも渡されない場合の早期リターンが追加されました。これにより `merge_multi_values` 側の手動な集合差演算とガードロジックが不要となり、1行のシンプルな呼び出しに集約されています。最適化ロジックをメソッド本体に集約することで、すべての呼び出し元が自動的に恩恵を受ける設計となっています。

2026年04月27日 Claude Sonnet 4.6

`from`句でUnionにエイリアスを指定できるよう修正

`ActiveRecord::Relation#from`にArel Unionノードを渡した際、エイリアスの第2引数が無視されていたバグが修正されました。`build_from`メソッドに`Arel::Nodes::Union`/`UnionAll`/`Intersect`/`Except`を処理する新ブランチが追加され、`SomeModel.from(union, :some_models)`が正しく動作するようになります。

2026年04月26日 Claude Sonnet 4.6

`alias_attribute`の重複エントリ蓄積によるO(N²)劣化を修正

`ActiveModel::AttributeMethods#alias_attribute`が重複チェックなしにエイリアス名を追記し続ける問題を、`<<`を`|=`に置き換える1行の修正で解消しました。Rails 7.1で導入された自動エイリアス登録と永続ストレージの組み合わせにより、`table_name`を繰り返し変更するクラスでクエリコストがO(N²)で増大するリグレッションが修正されます。

2026年04月26日 Claude Sonnet 4.6

複合主キーモデルで `find_signed` が `ArgumentError` を発生させるバグを修正

複合主キー(CPK)モデルで `find_signed` を呼び出すと `ArgumentError` が発生するバグが修正されました。`signed_id.rb` で `find_by(primary_key => id)` を `find_by(primary_key => [id])` に変更する1行の修正で、`find_signed` が `find_signed!` や `find` と一貫した動作をするようになります。同種のバグは2024年9月に `token_for.rb` で既に修正されており、今回はその修正が `signed_id.rb` に適用されました。

2026年04月26日 Claude Sonnet 4.6

PostgreSQL の最低サポートバージョンを 10.0 に引き上げ

PostgreSQL 18 のキャンセルリクエストキーのフォーマット変更への対応を契機に、Rails の PostgreSQL アダプターが要求する最低バージョンが 9.3 から 10.0 に引き上げられました。pg gem v1.6 との互換性確保に加え、バージョン条件分岐の削除や `supports_pgcrypto_uuid?` の非推奨化によってアダプターのコードが整理されています。

2026年04月22日 Claude Sonnet 4.6

`CurrentAttributes#clear_all` でのHash反復中追加エラーを修正

`ActiveSupport::CurrentAttributes.clear_all` の実行中に `resets` コールバックが別のサブクラスを初期化すると発生していた `RuntimeError: can't add a new key into hash during iteration` を修正。`current_instances.each_value` を `current_instances.values.each` に変更し、反復前にHashのスナップショットを取ることで解決しています。

2026年04月19日 Claude Sonnet 4.6

ffmpegのstdin接続を遮断してTTOUシグナルによるRailsハングを修正

ActiveStorageのビデオプレビュー生成時にffmpegがstdinを通じて制御端末を操作しようとすることで発生するSIGTTOUシグナルによるRailsハングを修正。`IO.popen`に`in: IO::NULL`を追加してstdinをnullデバイスに接続することで、ffmpegによる端末設定の試みを防ぎます。overmanなどのプロセスマネージャ環境で発現していた問題が解消されます。

2026年04月19日 Claude Sonnet 4.6

ネストした`with_connection`がstickyリースを誤ってクリアするバグを修正

`lease_connection`でstickyリースを取得済みの`with_connection`ブロック内で、`with_connection(prevent_permanent_checkout: true)`をネストすると外側のリースが誤って解放されるバグを修正。`ensure`節の`&& !sticky_was`ガード条件を削除することで、`prevent_permanent_checkout`が指定された場合は常に外側のstickyフラグが復元されるようになりました。

2026年04月19日 Claude Sonnet 4.6

`add_column`でPKに`null: true`を指定すると`ArgumentError`を発生させるように変更

`add_column`でプライマリキーに`null: true`を指定した際、これまで黙って`null: false`に上書きされていた挙動を改め、`ArgumentError`を発生させるようになりました。また、SQLite3アダプターの`copy_table`でPKの`null`値が誤って引き渡されていたバグも合わせて修正されています。

2026年04月18日 Claude Sonnet 4.6

`ActiveRecord::Relation`のextensionsマージ処理を最適化

`ActiveRecord::Relation`のマージ処理において、extensionsの差集合演算の前に`other.extensions.empty?`による早期リターンを追加しました。Relationにextensionが付与されることは稀であるにもかかわらず毎回実行されていたこの演算がテストスイート全体のCPU時間の約4.9%を占めていたことがプロファイリングで判明し、ガード節の追加によってホットパスのアロケーションを排除しています。

2026年04月17日 Claude Sonnet 4.6

`reset_counters` が文字列IDを受け取ると0にリセットされるバグを修正

`reset_counters` に文字列型のIDを渡すと、カウンターが正しい値ではなく0にリセットされるバグが修正されました。`type_for_attribute` で主キーの型を取得し `cast` でIDを適切な型に変換することで、文字列IDでも正確なカウントが設定されるようになります。通常の主キーと複合主キー(CPK)の両方で対応しています。

2026年04月17日 Claude Sonnet 4.6

PWAスキャフォールドにオフラインフォールバックページを追加

RailsのPWAスキャフォールドにオフラインフォールバックページが追加されました。`app/views/pwa/offline.html.erb`(ダークモード対応・外部依存ゼロ)、`Rails::PwaController#offline` アクション、コメントアウト済みルート、およびCache APIを使ったService Workerサンプルが一式提供され、manifest・Service Worker・オフラインページという標準的なPWAの3要素がスキャフォールドで揃います。

2026年04月17日 Claude Sonnet 4.6

`IO.copy_stream` が `Buffer#write` の戻り値不正とデータ破損を引き起こすバグを修正

`IO.copy_stream` と Rails のレスポンスストリームを組み合わせた際に発生する `TypeError` と、サイレントなデータ破損の2つのバグが修正されました。`Buffer#write` が `Array#push` の戻り値(配列)をそのまま返していた問題と、文字列を参照のままエンキューしていた問題を、`string.bytesize` の返却と `string.frozen?` によるガード付き `dup` で解消しています。

2026年04月16日 Claude Sonnet 4.6

AIエージェント向け読み取り専用DBクエリコマンド `rails query` の追加

AIエージェントや自動化ツールが本番DBへ安全にアクセスするための `bin/rails query` コマンドが追加されました。読み取り専用の強制(レプリカ接続 / `while_preventing_writes`)、JSON形式での構造化出力、ページネーション、スキーマ・モデル・EXPLAINのサブコマンドを標準で提供します。エラー時も含めすべての出力がJSONに統一されており、`ActiveSupport::Notifications` による計装フックで監査ログとの連携も考慮されています。

2026年04月16日 Claude Sonnet 4.6

Active Storage のセキュリティ警告を強化:「推測困難」から「認証なしで公開」へ

Active Storage のリダイレクト・プロキシコントローラとガイドの警告文が更新されました。「生成されたURLは推測困難」という誤解を招く表現が削除され、「URLを知っている者はアプリケーションの認証状態に関わらずファイルにアクセスできる」という実態を正確に伝える表現に改められています。動作変更は伴わず、Cloudflare クローラーヒント機能による情報漏洩事例を背景に、開発者が適切なアクセス制御を選択できるよう警告が強化されました。

2026年04月16日 Claude Sonnet 4.6

静的CSSおよびHTMLファイルのContent-TypeにUTF-8チャーセットを追加

`ActionDispatch::Static` が配信する静的CSSおよびHTMLファイルの `Content-Type` ヘッダーに `; charset=utf-8` が付与されるようになりました。CSSの仕様上はUTF-8がデフォルトですが、Chromeには `<link>` タグ経由のスタイルシート読み込み時にエンコーディング検出が正しく機能しないバグがあり、非ASCII文字が文字化けする問題が解消されます。対象は `text/css` と `text/html` の2タイプに限定されており、Propshaftにも同様の対応PRが並行して提出されています。

2026年04月15日 Claude Sonnet 4.6

Active Storage のリダイレクト・プロキシモードにおけるセキュリティ警告の強化

Active Storage のリダイレクトモード・プロキシモードに関するセキュリティ警告が刷新されました。「URLが推測困難」という表現が与えていた誤った安心感を排除し、「URLを知る者は誰でもアクセスできる」という事実を明示する記述へと変更されています。アクセス制御が必要なファイルには Authenticated Controllers の使用を促す姿勢も明確化されました。

2026年04月11日 Claude Sonnet 4.6

ParameterFilterの正規表現フィルタをハッシュルックアップで最適化

ParameterFilterのアンカー付き完全一致正規表現(`/^email$/` や `/\Atoken\z/` など)を、初期化時にリテラル文字列として抽出し、ハッシュに格納するよう変更しました。照合がO(1)のハッシュルックアップになり、フィルタがすべて完全一致パターンの場合は最大4.5倍の高速化が得られます。既存の部分一致パターンや大文字小文字を区別しないパターンへの後方互換性は維持されています。

2026年04月10日 Claude Sonnet 4.6

インテグレーションテストに `query:` と `body:` キーワード引数を追加し、GET+JSON問題を修正

インテグレーションテストの `process` メソッドに `query:` と `body:` キーワード引数が追加され、GETリクエストを内部でPOSTに変換していた `X-Http-Method-Override` ハックが廃止されました。`Rack::MethodOverride` を除外するAPIオンリーアプリで `GET + params: + as: :json` がルーティングエラーを引き起こしていた問題が根本的に解消されます。

2026年04月09日 Claude Sonnet 4.6
前へ 1 … 8 9 10 11 12 21 次へ

© 2026 DiffDaily - Powered by AI

タケユー・ウェブ