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

rails/bootsnap

https://github.com/rails/bootsnap

手動セットアップ時のデフォルト設定ファイル読み込みを廃止

Bootsnap 1.24.5では、手動セットアップ時にデフォルトで設定ファイルを読み込む挙動を廃止しました。HomebrewのようなCLIアプリケーションが別アプリケーションのBootsnap設定を誤って読み込む問題を解消するための変更で、通常のフレームワーク統合経由の利用には影響しません。

2026年05月22日 Claude Sonnet 4.6

`config/bootsnap.rb` の自動読み込みをオプトイン方式に変更

HomebrewがRailsプロジェクトのディレクトリで `brew` コマンドを実行すると、ユーザーの `config/bootsnap.rb` をHomebrewのBootsnapが誤って読み込んでクラッシュする問題が発生していました。本PRでは `Bootsnap.setup` に `config_path:` キーワード引数(デフォルト `nil`)を追加し、設定ファイルの読み込みを呼び出し元が明示的に指定する方式(オプトイン)に変更しました。`default_setup` 経由のRailsアプリには影響なく、直接 `setup` を呼ぶ外部ツールはカレントディレクトリに依存しなくなります。

2026年05月22日 Claude Sonnet 4.6

`RubyVM::ISeq.compile_option` 変更時のカスタムコンパイラオプション同期を修正

Bootsnapのカスタムコンパイラが `RubyVM::InstructionSequence.compile_option` の実行時変更に追従しない問題を修正。`Compiler` クラスに `update_options` メソッドを追加し、グローバルな `compile_option` を信頼の源泉として扱う設計に統一することで、キャッシュキーの整合性を保てるようになりました。

2026年05月13日 Claude Sonnet 4.6

カバレッジ計測中でも `enable_frozen_string_literal` が動作するように

Ruby 4.0.4以降で `Coverage` モジュールが有効な状態でも `Bootsnap.enable_frozen_string_literal` が正しく動作するよう修正されました。カバレッジ検出ロジックを `load_iseq` から `fetch` メソッドに移動し、コンパイラの種別とRubyバージョンに応じた3通りの分岐を実装しています。旧バージョンのRubyでは警告を一度だけ出力しフォールバックする形で互換性が維持されます。

2026年05月13日 Claude Sonnet 4.6

Coverage「suspended」状態でのISeqダンプエラーを修正

Ruby 4.0.4でCoverageのsuspended状態チェックが実効化されたことで、Bootsnapが誤ってISeqキャッシュをスキップする問題を修正。`Coverage.running?`を`Coverage.state != :idle`に置き換え、「中断中」と「停止中」を正しく区別できるようにした。Ruby 3.1未満との互換性はクラス定義時のバージョン分岐で対応している。

2026年05月13日 Claude Sonnet 4.6

rubocop-performance 導入による正規表現マッチングとArray生成の慣用的な書き換え

bootsnap に rubocop-performance を導入し、正規表現の `=~` を `match?` や `include?` へ、`N.times.map` を `Array.new(N)` へ書き換えました。マッチデータが不要な用途でのグローバル変数への副作用排除と中間Enumeratorのアロケーション削減が主な改善点で、コードベース全体の記述スタイルが統一されます。

2026年05月12日 Claude Sonnet 4.6

キャッシュキーを64バイトから32バイトへ縮小し、パディングによる不安定性を解消

Bootsnapのキャッシュファイルヘッダーが64バイトから32バイトに削減され、未初期化パディングバイトに起因するビルドの非再現性問題が解消されました。`version`・`ruby_platform`・`compile_option`・`ruby_revision` の4フィールドを `ruby_version_digest` に統合し、パディングが発生しない構造体設計に刷新することで、`bootsnap precompile` の出力がバイト単位で決定論的になります。

2026年05月07日 Claude Sonnet 4.6

Bootsnap 1.24.3 リリース:UTF-8パース修正の完成

Bootsnap 1.24.3がリリースされました。`LANG`環境変数が未設定または`C`に設定された環境でRubyファイルをUTF-8としてパースできなかった問題に対する1.24.2のワークアラウンドをさらに改善するパッチリリースです。

2026年05月05日 Claude Sonnet 4.6

Ruby Bug #22023 ワークアラウンドのエンコーディング修正

LANG環境変数が未設定またはCに設定された環境で、File.readがASCIIエンコーディングを使用してRubyソースファイルのパースに失敗する問題を修正。compile_file_prismメソッドでFile.readにencoding: Encoding::UTF_8を明示指定することで、環境に依存せず常にUTF-8でソースファイルを読み込むよう変更された。

2026年05月05日 Claude Sonnet 4.6

Bootsnapがファイルを誤って旧パーサーで読み込むRubyバグに対処

Bootsnap 1.24.2では、`RubyVM::InstructionSequence.compile_file`に存在する2つのRubyバグを回避するワークアラウンドが追加されました。このバグによりファイルがPrismではなく旧Rubyパーサーで読み込まれ、パターンマッチング構文で問題が発生していました(Ruby Bug #22023参照)。

2026年05月05日 Claude Sonnet 4.6

Ruby Bug #22023 のワークアラウンド:`compile_file` が Prism を使わない問題への対処

Ruby の `+PRISM` ビルドで `RubyVM::InstructionSequence.compile_file` が Prism ではなく `parse.y` を使うバグ(Bug #22023)により、Bootsnap 経由で有効な Alternative Pattern 構文が `SyntaxError` になっていた問題に対処。ランタイムでのカナリアファイルを用いたバグ検出と、`compile_file` および `compile_file_prism` の二段階パッチ適用で透過的に解決しています。

2026年05月05日 Claude Sonnet 4.6

Bootsnap 1.24.1:`BOOTSNAP_READONLY`モード時のソースファイルエンコーディング修正

Bootsnap 1.24.1 がリリースされ、`BOOTSNAP_READONLY` 環境変数が設定されている場合にRubyソースファイルのエンコーディングが `ASCII-8BIT` になる不具合が修正されました。純粋なASCII範囲を超える文字を含むソースファイルを扱う環境でのアップデートが推奨されます。

2026年04月29日 Claude Sonnet 4.6

`BOOTSNAP_READONLY`時にRubyソースのエンコーディングが崩れるバグを修正

bootsnap 1.24.0で導入された、`BOOTSNAP_READONLY=1`環境でRubyソースのエンコーディングが`ASCII-8BIT`に変化してしまうバグが修正されました。`ISeq.compile`がソース文字列のエンコーディングをそのまま使用する挙動に対し、`force_encoding(Encoding.default_external)`を呼び出すことでコンパイル前にエンコーディングを正しく設定するよう修正されています。

2026年04月29日 Claude Sonnet 4.6

Bootsnapにカスタムコンパイラフックを追加:ファイルごとにRubyコンパイラを切り替え可能に

`Bootsnap::CompileCache::ISeq.compiler_selector` にProcを設定することで、Rubyファイルの読み込みごとにコンパイラを動的に選択できるフックAPIが追加されました。アプリケーションコードのみ `frozen_string_literal: true` を有効化するといったパスベースの細粒度なコンパイルオプション制御が可能になります。合わせて `config/bootsnap.rb` を読み込むコンフィグファイル機構と、便利メソッド `Bootsnap.enable_frozen_string_literal` も導入されています。

2026年04月26日 Claude Sonnet 4.6

readdir()のエラーハンドリングを追加

bs_rb_scan_dir()にreaddir()のエラーハンドリングを追加。ストリーム終端とエラーを区別するため、whileループを無限ループ形式に変更し、readdir()呼び出し直前にerrnoをリセットする実装に。

2026年02月05日 Claude Sonnet 4.5

PathScannerのバンドルパス判定とコード統合の改善

PathScannerの`native_call`で相対パスと絶対パスの`BUNDLE_PATH`を比較していたバグを修正。`ruby_call`と`native_call`の共通処理を`prepare_scan`ヘルパーに抽出し、両実装の動作差異を最小化しました。

2026年02月04日 Claude Sonnet 4.5

PathScanner.native_callに絶対パス形式の除外ディレクトリサポートを追加

PathScanner.native_callが絶対パス形式での除外ディレクトリ指定に対応。partitionによる事前分類と条件分岐の階層化により、不要な絶対パス構築を避けつつ、シンボリックリンクループなどの問題を確実に回避できるようになりました。

2026年02月03日 Claude Sonnet 4.5

Ruby 2.7を最小サポートバージョンに設定

bootsnap 1.23.0で最小サポートバージョンがRuby 2.7に引き上げられました。`File.absolute_path?`メソッドの利用を目的とし、gemspec、CI、Rubocopの設定を更新。Ruby 2.6サポートのための回避コードを削除し、コードベースの保守性を向上させています。

2026年02月03日 Claude Sonnet 4.5

[rails/bootsnap] Rakeのcleanタスクでbootsnap cacheを削除可能に

bootsnap利用者がRakeの標準cleanタスクでキャッシュを削除できるよう、lib/bootsnap/rake.rbを追加。Rakefileにrequire "bootsnap/rake"を追加することで、rake cleanでtmp/cache/bootsnap配下が削除可能に。opt-in設計で既存環境への影響なし。

2026年01月20日 Claude Sonnet 4.5

[rails/bootsnap] opendir失敗時のerrno=0クラッシュを根本から修正

bootsnapのC拡張において、opendir失敗時にerrno=0によるクラッシュが発生していた問題を根本から修正。rb_ary_new呼び出しがGCをトリガーし、ファイナライザーがerrnoをリセットしていたことが原因。配列初期化をopendir後に移動することで、errnoの上書きを防ぎ、応急処置コードとフォールバック処理を削除した。

2026年01月16日 Claude Sonnet 4.5
1 2 次へ

© 2026 DiffDaily - Powered by AI

タケユー・ウェブ