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
Rubyの安定版を保守する意義 / Why we maintain stable versio...
Search
usa
July 17, 2020
Programming
0
98
Rubyの安定版を保守する意義 / Why we maintain stable versions of Ruby?
2020年7月17日 Ruby Association Activity Report
Rubyアソシエーションの「Ruby安定版保守事業」について、担当者からその内容と目的を紹介したものです。
usa
July 17, 2020
Tweet
Share
More Decks by usa
See All by usa
WindowsにおけるRubyのエンコーディングの話 Ruby3版/Ruby's encoding on Windows at Ruby3
unak
0
340
PIXIV TECH FES. short session / What kind of contribution to OSS is really pleased?
unak
0
2k
Internal of the image processing required on the developing of web applications
unak
5
4.9k
Schrödinger's branch, or Ruby is dead every year
unak
0
670
talk about IO
unak
4
1.8k
Other Decks in Programming
See All in Programming
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
6
1.7k
受け取る人から提供する人になるということ
little_rubyist
0
250
ヤプリ新卒SREの オンボーディング
masaki12
0
130
最新TCAキャッチアップ
0si43
0
190
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
LLM生成文章の精度評価自動化とプロンプトチューニングの効率化について
layerx
PRO
2
190
「今のプロジェクトいろいろ大変なんですよ、app/services とかもあって……」/After Kaigi on Rails 2024 LT Night
junk0612
5
2.2k
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
Jakarta EE meets AI
ivargrimstad
0
670
CSC509 Lecture 12
javiergs
PRO
0
160
[Do iOS '24] Ship your app on a Friday...and enjoy your weekend!
polpielladev
0
110
Jakarta EE meets AI
ivargrimstad
0
220
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
10 Git Anti Patterns You Should be Aware of
lemiorhan
655
59k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Unsuck your backbone
ammeep
668
57k
Six Lessons from altMBA
skipperchong
27
3.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Automating Front-end Workflow
addyosmani
1366
200k
Bash Introduction
62gerente
608
210k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Transcript
Rubyの安定版を 保守する意義 pixiv Inc. NAKAMURA Usaku 2020.7.17
2 自己紹介 • ピクシブ株式会社 ◦ 技術開発本部配信技術部マネージャ ◦ • Rubyコミッタ ◦
Windows担当 ◦ 安定版リリースマネージャ usa @unak
Rubyの開発プロセス 3 • master (trunk) ◦ 開発陣が日々いじっているところ • 毎年クリスマスにここから新しいブランチが生えて新バージョンがリリースされる ◦
2018年12月25日 ruby_2_6 2.6.0 ◦ 2019年12月25日 ruby_2_7 2.7.0 ◦ 2020年12月XX日 ruby_3_0 3.0.0 ……? • ここ数年はリリースマネージャは成瀬さん
Rubyの開発プロセス 4 • つまり毎年新しいブランチが増える ◦ この、masterではないブランチとそこからのリリースが「安定版」 • ここ数年は、基本的に3本の安定版を維持している ◦ 新しいブランチが生えたら一番古いものは
EoL ◦ なので「Rubyは毎年死ぬ」
安定版ブランチ ruby_2_7 (2019年12月~) • 最新リリースは Ruby 2.7.1 • リリースマネージャはnagachikaさん ◦
ここ数年は1本目のブランチはnagachikaさんが見てくれている 5
安定版ブランチ ruby_2_6 (2018年12月~) • 最新リリースは Ruby 2.6.6 • リリースマネージャはusa •
Ruby安定版保守事業の対象 6
安定版ブランチ ruby_2_5 (2017年12月~2021年3月(予定)) • 最新リリースは Ruby 2.5.8 • リリースマネージャはusa •
セキュリティメンテナンスブランチ ◦ 単なるバグの修正も入れない ◦ 原則としてセキュリティ問題であると判断された変更のみバックポート 7
安定版ブランチ • 2019年12月:masterからruby_2_7ブランチが切られてRuby 2.7.0がリリース • 2020年3月末:ruby_2_4ブランチがEoL • 2020年4月:ruby_2_7の担当が成瀬さんからnagachikaさんに引き継ぎ ruby_2_6の担当がnagachikaさんからusaに引き継ぎ
ruby_2_5がセキュリティメンテナンスフェーズに移行 (担当usaのまま) • ここ数年はだいたいこんな感じ • なので、常に3本の安定版ブランチが維持されている (12月~3月は4本) 8
安定版ブランチ Q: なんで3本なの? A: マンパワーの限界だから • Ruby安定版保守事業が始まる前はmaster以外は1, 2本の維持が限界だった • nagachikaさんを始めとする関係各位のご協力と、
Ruby安定版保守事業のおかげで3本 の安定版ブランチを維持し続けられるようになった 9
Ruby安定版保守事業 • 3本の安定版ブランチのうち、2番目のもの(現在はruby_2_6)が対象 ◦ 加えて緊急セキュリティ対応があるので、必要が生じれば 1番目のブランチ(現在は ruby_2_7)を触る可能性もなくはないが、今のところ起きてない • 2012年10月に事業スタート ◦
ruby_1_9_3 (当時の2番目のブランチ) ◦ 当初からusaが担当 ◦ 公募なのでusaじゃなくても応募できます 10
Ruby安定版保守事業 なんで2番目のブランチが対象? • 「誰もやりたがらない方」を事業とする ◦ 古いブランチほど誰もやりたがらない • 毎年新しいブランチが生えるということは、 2番目は2年目に入っている ◦
つまり、2番目を1年間保守すれば、Rubyの各安定版が最低2年間強は維持されるこ とが保証できる 11
Ruby安定版保守事業 • 1番目(現ruby_2_7) ◦ masterからのパッチは分岐から間がないのでだいたいそのままあたる ◦ 単なるバグだけでなく、仕様的変更もままある • 2番目(現ruby_2_6) ◦
masterからのパッチは簡単にはあたらなくなってくる (体感で50%くらい) ▪ 場合によっては同じ趣旨の変更の再実装もなくはない ◦ 基本的にはバグ対応のバックポートのみなので面白味はあまりない • 3番目(現ruby_2_5) ◦ masterからのパッチはほぼあたらない ◦ そもそもセキュリティ対応の頻度自体が極めて低い 12
安定版の保守が必要な理由 • Rubyの開発者は最新of最新にしか興味がない • Rubyの利用者はリリースされたものしか使わない • 利用者の期待は「バグ修正だと思ってバージョンアップしたら仕様変更が紛れ込んでいて 自分のコードが正しく動かなくなった」がないこと • 開発者と利用者の間のギャップを埋めるには、開発版
(master)とリリース用ブランチを分 離しておくしかない ◦ ……ということを、過去の経験から学んだ 13
安定版の保守が必要な理由 • Rubyの開発者はRubyの進化(というか進化させること)に興味がある • RubyのユーザーはRubyの進化に興味がない……わけでもないが、基本的には自分のプロ ダクトが中心。Rubyはそれを実現するための道具に過ぎない • つまり、あんまりころころRubyが変わるのは割と迷惑 • 使ってるバージョンのRubyがすぐに保守されなくなるのも困る
◦ 2番目を安定版保守事業で支えているのは少しでも長く維持するため 14
安定版の保守が必要な裏の理由 • masterに新機能をぶちこむため ◦ 互換性はとても大事、わかる ◦ でも、言語を進化させていくためには、時として互換性の破壊も必要 ◦ 毎年互換性が破壊されるとユーザーはついてこれない •
安定版があると、ユーザーは毎年互換性破壊を伴いうる Rubyのバージョン切り替えを強い られることがなくなる ◦ 1年ごと or 2年ごと or 3年ごと を自分のペースで選べる • それが担保されていれば、安心して masterで互換性を破壊できる……かも? 15
安定版保守の課題 • 本当は1番目のブランチも事業としてやるべきかもしれない ◦ 今はnagachikaさんに負担をかけていて申し訳なさがある 16
安定版保守の課題 • もうちょっと長い期間の保守が必要かも ◦ 今は3年ちょい維持されているが、全部とは言わないが 5年あるいは7年とかいうスパ ンで維持されるブランチもあった方がいいかも ◦ 例えば、LTS(Long Time
Support)バージョンのようなブランチを時々作るとか 17
安定版保守の課題 • 古いバージョンの存在がユーザーの新機能の利用を阻害しうる ◦ アプリケーション開発者は、自分が使う Rubyバージョンに合わせたコードを書けばい いのであまり問題はない ◦ ライブラリ開発者は、基本的に今生きている全ての Rubyバージョンで動くように書く必
要がある ▪ 「面倒だから古いバージョンで動かなくてもいいか」 • 前方互換性がない変更をmasterに入れにくくなる ▪ 「面倒だから新しいバージョンで動かなくてもいいか」 • ユーザーが古いバージョンにとどまってしまう • コミュニティ分断 (c.f. Ruby 1.8→1.9、Python2→Python3) 18
まとめ • Ruby安定版保守事業は、ユーザーのためであると同時に、 Rubyの開発を促進するために 行われている • 事業の対象外のところで大きな貢献をしてくれている人たちのおかげで成り立っている • 課題はあるので、今後発展的に解決していけるといいな 19