Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ruby4.0でリリースされるNameSpaceの機能を整理する
Search
katakyo
November 20, 2025
4
1.7k
Ruby4.0でリリースされるNameSpaceの機能を整理する
katakyo
November 20, 2025
Tweet
Share
More Decks by katakyo
See All by katakyo
Kaigi on RailsでKaigi Effectを得た話
katakyo
0
38
もう並列実行は怖くない ~コネクション枯渇解消のための実践的アプローチ~
katakyo
4
8.6k
Codex CLIに入門してみる
katakyo
0
47
Claude Codeを使いこなすための実践Tips集
katakyo
1
350
Ruby で始める自作 MCP サーバー入門
katakyo
0
340
マイベストのREST APIをGraphQLに置き換えた話
katakyo
0
200
ジュニアエンジニアから脱却するために業務以外で意識していること
katakyo
1
340
新卒エンジニアの半期の振り返り
katakyo
0
1.4k
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
58k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
How STYLIGHT went responsive
nonsquared
100
6k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
300
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.1k
Rails Girls Zürich Keynote
gr2m
96
14k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
250
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
91
Information Architects: The Missing Link in Design Systems
soysaucechin
0
840
Side Projects
sachag
455
43k
Transcript
November 20, 2025 Ruby4.0でリリースされる NameSpaceの機能を整理する Kashiwa.rb @katakyo
アジェンダ 1 はじめに 2 NameSpaceとは 3 新機能「Ruby Box」について 4 まとめ
01 はじめに
Ruby Kaigi 2024にて
Matz「NameSpaceができたら Rubyのバージョンを 4.0にあげる かも」
Ruby 4.0が今年の12月にリリース予定
02 NameSpaceとは
そもそもNameSpaceがなぜ必要か
https://speakerdeck.com/tagomoris/namespace-what-and-why
現在のRubyのNameSpace Application GemA GemB GemC DB:Client(v2) RubyのデフォルトのNameSpaceは全て⼀つのNameSpace(Rubyのプロセスで)動作する
問題1: 名前の衝突 複数のライブラリが同じ名前を使っている場合、もちろん 競合する 同じ種類(クラスorモジュール)だった場合はお互いを上書 きし、異なる種類だった場合にはふたつめを読み込んだ時 点で例外となる
問題2: ライブラリのバージョンの衝突 Application GemA GemB GemC DB:Client(v2) GemC DB:Client(v3) 衝
突 Rubyではどうがんばっても特定ライブラリの複数バージョンを1プロセス内には共存させら れない。これは、アプリケーションが依存する複数のライブラリ(A, B)が同じライブラリ(C) に依存するが、しかしそれぞれバージョン制約が異なる、という状況を解決できない
問題3: ライブラリグローバルが衝突する ライブラリに設定をクラス変数を⽤いて実装されると全 体のプロセスに影響を及ぼす可能性がある
• ライブラリ間での名前の衝突を避けること • 意図しないクラス定義の共有などを避けること • 複数バージョンのgemを1つのプロセスからロードすること NameSpaceが解決したいこと Application GemA GemB
GemC DB:Client(v2) GemC DB:Client(v3) Application Application NameSpaceA NameSpaceB
03 新機能「Ruby Box」について
Ruby 4.0でRuby Boxという 名前でリリースされます
2つのBox Ruby BoxはRoot BoxとUser Boxの2つのBoxのタイプがある 1. Root Box Rubyプロセス内の単⼀のボックス。Rubyのすべての組み込みクラスとモ ジュールはルートボックス内で定義される
2: User Box ユーザーが作成したプログラムや、ユーザープログラムからロードされた ライブラリを実⾏するために使⽤する
設定方法 デフォルトでRuby Boxは有効化されていないた め、環境変数で設定する必要があります Rubyのプロセス起動時にこの環境変数を読み込 む必要があります(RUBY_BOXは1以外は無効)
基本的な使い方 User Boxを作る時はRuby::Boxのインスタン スを作成し、ファイルやモジュールをロード して定義したBoxを経由してアクセスする
ライブラリー間の異なるバージョンを安全に共存できる Gemの異なるバージョンが衝突する課題も Ruby Box経由でGemをloadすることで異 なるバージョンが衝突することなく実⾏す ることができます
モンキーパッチの隔離が可能になる モンキーパッチとは何か • 既存のクラスを後から変更する技術 • Rubyの柔軟性を⽰す例(Stringクラスに独⾃メソッド を追加など) Ruby::Boxによる隔離のメリット • Box内のモンキーパッチはBox内に閉じ込められる
アプリケーションの保守性にも貢献する 以下のような活⽤⽅法ができそうです • マイクロサービス的な分離: ◦ 1つのプロセス内で独⽴したサブシステムを構築 • Gemの安全な更新 ◦ ⼀部のNamespaceだけバージョンアップして影響を確認
• テストの分離 ◦ テスト⽤のモックが本番コードに漏れない
まだまだ課題もある 公式のドキュメントには以下のような問題があるようです • bundle install が失敗する可能性がある • require 'active_support' が失敗することがある
• root namespace での名前空間検出が誤動作することがある • パフォーマンスが悪化する可能性がある
04 まとめ
まとめ 1 Ruby4.0ではRuby::BoxというNameSpaceの機能がリリースされる 2 3 既存のライブラリのバージョンや名前、グローバルな値の衝突を防ぐこと ができる まだ課題はあるが、うまく活用すれば保守性が上がりそう
参考文献 公式ドキュメント: https://docs.ruby-lang.org/en/master/box_md.html 実装者のtagomoris⽒のブログ: https://tagomoris.hatenablog.com/entry/2023/05/15/174652 PullRequest: https://github.com/ruby/ruby/pull/13226
ご清聴ありがとうございました