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
3
320
Ruby4.0でリリースされるNameSpaceの機能を整理する
katakyo
November 20, 2025
Tweet
Share
More Decks by katakyo
See All by katakyo
Kaigi on RailsでKaigi Effectを得た話
katakyo
0
17
もう並列実行は怖くない ~コネクション枯渇解消のための実践的アプローチ~
katakyo
3
5.4k
Codex CLIに入門してみる
katakyo
0
24
Claude Codeを使いこなすための実践Tips集
katakyo
1
310
Ruby で始める自作 MCP サーバー入門
katakyo
0
270
マイベストのREST APIをGraphQLに置き換えた話
katakyo
0
180
ジュニアエンジニアから脱却するために業務以外で意識していること
katakyo
1
280
新卒エンジニアの半期の振り返り
katakyo
0
1.3k
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Raft: Consensus for Rubyists
vanstee
140
7.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
670
Typedesign – Prime Four
hannesfritz
42
2.9k
Unsuck your backbone
ammeep
671
58k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
24
1.6k
Site-Speed That Sticks
csswizardry
13
970
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
ご清聴ありがとうございました