Sabitlenmiş Tweet
yo_waka
23.2K posts

yo_waka
@yo_waka
匠のあそび社( https://t.co/SboQNy5H2q )をやってる 甘いものが好きなSoftware Engineerです
Katılım Aralık 2007
762 Takip Edilen1.2K Takipçiler
yo_waka retweetledi

Stripeが、自社の2500万行(現在は4200万行)規模のRubyコードベース全体に、自動フォーマッタ「rubyfmt」を一晩で適用した経緯を公開。RubyにはGoのgofmtのような「ゼロ設定・高速・強制的に統一する」タイプのフォーマッタが長年存在せず、巨大コードベースではPRレビュー時のスタイル議論やrubocop調整が大きな負担になっていたという。
rubyfmtは2018年に個人OSSとして始まり、最初はRuby製だったが、100ms以内で動かすという目標のためにRustへ移植。さらにRuby VM内部のparse treeをRust側から直接たどるという、かなり異様な実装に進化していく。Rubyのripper parserが返す内部データをJSON経由でRustに渡していたが、最終的にはRubyオブジェクト(VALUE)を直接serdeでデシリアライズするところまで到達したという話がかなり濃い。
Stripeでは以前prettier-rubyも試したが、大規模ファイルでクラッシュし、速度面も問題だった。そこでDeveloper Productivityチームがrubyfmtを本格採用。まずはファイル単位で段階的に適用し、ripper tree比較や巨大テストスイートで安全性を検証。その後、土曜日を選んで「全コードベース一括フォーマット」を実施した。
面白いのは、導入後の感想が「誰も話題にしなくなった」という点。特にGoやPythonなど他言語出身エンジニアにとって、Ruby特有の「どう書くべきか分からない問題」が消え、レビューでの細かなフォーマット指摘も激減。開発体験そのものを変えたという。
また最近は、Ruby公式の新parser「Prism」への移行も進み、Ruby VMをリンクせずにparse tree生成が可能になったことで、バイナリサイズ削減とさらなる高速化も実現したとのこと。
・巨大モノレポでは「コードを書く」より「コードの見た目を揃える」コストが無視できなくなる
・gofmt文化をRubyにも持ち込みたかった、という思想が一貫している
・Rust + Ruby VM + serde + parser internalsという、かなり変態的な実装話でもある
・「誰も話題にしないほど自然に定着した」がDeveloper Productivity系ツールの理想形かもしれない
stripe.dev/blog/formattin…
日本語
yo_waka retweetledi

ワイもそう思うのでなにとぞ・・ "円安に行き過ぎだ。130円程度がよいところではないか" news.yahoo.co.jp/articles/4d855…
日本語
