BunのRustによる書き直しは驚異的な偉業だ

MMaximilian Schwarzmüller
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00BUNがSIGからRustに移植されました。
00:00:02皆さんもすでにお聞き及びかと思いますが、
00:00:04ここには掘り下げるべき多くの要素があります。
00:00:06先週は多くの騒動がありましたが、
00:00:08非常に興味深い出来事も進行しています。
00:00:10BUN、SIG、Rustのどれに興味があるかにかかわらず、
00:00:14これは本当に興味深い話です。
00:00:15また、AIがどのように活用されたのか、
00:00:18そしてそれが我々の業界の今後のプロジェクトに
00:00:20どのような意味を持つのかについてもです。
00:00:22さて、少し余談になりますが、
00:00:24私は個人的にBUNをかなり気に入っています。
00:00:26私のプロジェクトのほとんどで使っている
00:00:29デフォルトのJavaScriptランタイムです。
00:00:30そして幸運な偶然として、
00:00:32先週、BUNに関する新しいコースを公開したばかりです。
00:00:35このコースはRust版でも、
00:00:37もちろんSIG版でも同じように動作します。
00:00:39ですから、BUNをもっと深く掘り下げて、
00:00:41それが提供するあらゆるコアAPIを学びたいなら、
00:00:44ぜひどうぞ。多くの機能が標準で組み込まれている点が、
00:00:46BUNの最大の強みの1つですから。
00:00:48好まない人もいますが、私は大好きです。
00:00:50もし詳しく学びたいのなら、
00:00:51そのコースが役立つかもしれません。
00:00:53では、今回の移植の全体的なタイムラインを
00:00:54詳しく見ていきましょうか。
00:00:58実際に起こったのは2か月前のことです。
00:01:01ブログ投稿がリリースされたのは7月の先週ですが、
00:01:04移植自体は5月に行われました。
00:01:08それは5月初旬、公式BUN GitHubリポジトリで
00:01:10「CloudFaserPort」ブランチが発見されたことから始まりました。
00:01:13そのブランチには移植に関するMDファイル、つまり
00:01:15SIGのコードをRustコードに変換する方法や、
00:01:18移植方法、翻訳テーブルなど、
00:01:21一般的な指示が書かれたマークダウンファイルが含まれていました。
00:01:23このファイルがどのように作成されたかについては、
00:01:27もちろんAIが関与していたのですが、
00:01:28それについては少し後でまた触れることにしましょう。
00:01:30これが発見されたことで、
00:01:32当然ながらHacker NewsやXで議論が巻き起こりました。
00:01:34興奮する人もいれば、
00:01:36非常に批判的な人もいました。
00:01:40しかし、その時点ではまだ多くのことが不明でした。
00:01:43明らかなのは、Rustをめぐってかなりの分極化があることです。
00:01:46私のようにRustを愛する人もいれば、
00:01:47嫌う人もいます。
00:01:52何もかもをRustで書き換えるべきだという考えを
00:01:55嫌う人もいます。
00:01:57よく「XYZというプログラムをRustで書き換えてほしい」
00:01:58という声を目にしますが、それが煩わしいと感じるのも理解できます。
00:02:00ですから当然、そこには大きな分極化がありました。
00:02:03しかし、移植はまだ完了していませんでした。
00:02:06事態が動いたのは5月の後半です。
00:02:085月14日、正式なプルリクエストが公開され、
00:02:09その後マージされました。
00:02:11これによってBUNのコードベース全体が
00:02:15SIGからRustへ移行されたのです。
00:02:16お分かりのように、非常に巨大なプルリクエストでした。
00:02:22100万行以上のコードが追加されました。
00:02:24SIGコードの削除は別の段階で行われました。
00:02:28つまり、単なる差し替えではないのです。
00:02:30ご覧の通り、約7,000コミットにも及ぶ
00:02:32非常に大きな変更でした。
00:02:35当然ながら、このコードは人間によるレビューを受けていません。
00:02:39少なくとも完全には受けていません。
00:02:40AIによってレビューされました。
00:02:42テストは通過していましたが、人間によるレビューはありませんでした。
00:02:44AIがどのように使われたかについては、すぐにまた触れます。
00:02:46これが公開、あるいはマージされたことで、
00:02:51さらなる議論が巻き起こりました。
00:02:52前述の通り、人間のレビューを経ていません。
00:02:54あのような期間では、もちろん不可能です。
00:02:59しかし、コミュニティがこれに飛びつき、
00:03:02中身を分析し始めました。
00:03:06そして最初となるブログ記事や声明が
00:03:08BUNTINEからリリースされました。
00:03:10「unsafe(アンセーフ)」の使用についてです。
00:03:14このプルリクエスト後に持ち上がった大きな批判は、
00:03:17中のRustコードが慣用的でないというものでした。
00:03:19最初から作り直す際に書くべき、
00:03:23あるいは書くべきであるRustコードではなかったのです。
00:03:25むしろ、SIGからRustへの「翻訳」に近いものでした。
00:03:29そのため、Rustのベストプラクティスや
00:03:32パターンが完全には使われていませんでした。
00:03:37特に、かなりの量のunsafeが使われていました。
00:03:41unsafeを理解するには、
00:03:44Rustがどのようにメモリを管理しているかを
00:03:46理解する必要があります。
00:03:50それはRustの最大の強みの1つであり、
00:03:54他の言語とはかなり異なるからです。
00:03:55ほとんどの言語にはガベージコレクターがあります。
00:03:58これは、プログラム内のどこでも
00:04:00値が使われなくなった時点を検出し、
00:04:03メモリを解放するプロセスです。便利ですが、
00:04:05余分なリソースを消費します。
00:04:08あるいは、自分でやらなければなりません。
00:04:10例えばCのような言語では、
00:04:14手動でメモリを割り当て、解放する必要があります。
00:04:16SIGでも同じです。
00:04:19メモリを割り当てることはできますが、
00:04:21必要なくなった時に「free(解放)」を呼び出すか、
00:04:24解放しなければなりません。
00:04:26便利な「defer」を使うこともできます。
00:04:28これは基本的には、実際に実行される前に
00:04:31呼び出しを予約するものです。
00:04:33遅延実行され、そのスコープが終了する時に
00:04:37自動的に呼び出されます。
00:04:40値が必要なくなる状況はいろいろありますから、
00:04:43これは便利です。
00:04:47しかしそれでも、手動でメモリを片付ける場合、
00:04:49足元をすくわれるような状況がたくさんあります。
00:04:52よりきめ細やかな制御ができ、非常に有用で効率的ですが、
00:04:55複雑なプログラムでは解放を忘れやすく、
00:04:58結果としてメモリリークを引き起こしたり、
00:05:00二重に解放してエラーを起こしたりする可能性があります。
00:05:04その点でトレードオフがあるのです。
00:05:05Rustには異なるアプローチがあります。
00:05:07Rustには「所有権」というコンセプトがあり、
00:05:09すべての値に唯一の所有者が存在し、
00:05:11それはスコープに結びついています。
00:05:15スコープがあれば、例えば波括弧や関数で
00:05:16スコープを作ることもできます。
00:05:19JavaScriptのコンセプトをご存知かもしれません。
00:05:20値がスコープ内で作成されると、
00:05:23そのスコープが所有権を持ちます。
00:05:25スコープが終われば、自動的に解放されます。
00:05:27手動で解放する必要がないため、非常に便利です。
00:05:30また、ガベージコレクターもありません。
00:05:32その代わりに、明確なルールが存在します。
00:05:36値をあちこちで使い回す必要があるような、
00:05:38より複雑なプログラムでは、
00:05:39複雑さを招くこともあります。
00:05:41Rustでも可能ですが、
00:05:43JavaScriptでその概念をご存知かもしれません。
00:05:46しかしもちろん、
00:05:47unsafeキーワードを使わない限り、
00:05:49メモリの安全性が保証されます。
00:05:51それを使えば、unsafeスコープを作成できます。
00:05:53その中では、ルールは適用されなくなります。
00:05:55メモリを適切に管理するのは、あなたの仕事です。
00:05:58なぜそんなことをするのでしょうか?
00:06:00例えば、C言語のライブラリを読み込む場合、
00:06:02Rustでもそれは可能です。
00:06:05Cのコードを少し混ぜたり、
00:06:07Cのメソッドや関数を呼び出したりできます。
00:06:08Cは本来unsafeなので、
00:06:11そうしたCコードにアクセスする箇所もunsafeになります。
00:06:14ですので、そうしたコードとやり取りするにはその機能が必要なのです。
00:06:19声明で指摘されていたことの1つですが、
00:06:22コードベース内のunsafeな使用の多くは、
00:06:24実際にはCライブラリの呼び出しなどに関連していました。
00:06:26それは今後も変わりません。
00:06:28しかし、改善してunsafeを減らせる箇所も
00:06:29特定されており、
00:06:31今後のプルリクエストで取り組んでいくと述べていました。
00:06:33実際に今も行われています。
00:06:34ですので、この最初の移植は
00:06:37出発点のようなものと考えられます。
00:06:40時間が経つにつれて洗練されていったのです。
00:06:44この巨大なプルリクエストには、
00:06:48すでにテストが通っていたことにも触れておくべきでしょう。
00:06:52安定していましたし、テストは通っていました。
00:06:54しかしコードの品質は、最初からRustで書かれていた
00:06:56ものに期待されるようなレベルではなかったでしょう。
00:07:00それが目的ではなかったからです。
00:07:04それが5月21日のことでした。
00:07:07その後、沈黙が続きました。
00:07:08このバージョンのBUNはまだリリースされていません。
00:07:10私がこれを記録している時点では、まだ公開されていません。
00:07:13今BUNをインストールしても、
00:07:14まだSIG版です。
00:07:15しかし、それもいつ変わってもおかしくありません。
00:07:18そして7月8日、
00:07:20公式ブログ投稿がリリースされました。
00:07:22この移植に関する興味深い詳細が
00:07:24たくさん書かれています。
00:07:26読む価値があります。
00:07:28学べることがたくさんあるので、
00:07:30下にリンクを貼っておきます。
00:07:32この移植全体が、秘密でもなんでもなく、
00:07:35AIの助けを借りて行われました。
00:07:37BUNがAnthropicの傘下にあることを
00:07:40覚えておく価値はあります。
00:07:43ですので、彼らは全トークンを無料で利用できましたし、
00:07:45特に一般公開前の「Fable 5」もそうです。
00:07:46この移植はFable 5で行われました。
00:07:49ところで、もし今Cloud Codeをインストールしようとしているなら、
00:07:50Rust版のBUN 1.4はまだリリースされていませんが、
00:07:52Cloud Codeはすでに、いわば未リリースの
00:07:54BUNバージョン上で動いているのです。
00:07:56これについては
00:07:58言及しておく必要があるでしょう。
00:07:59初期のプルリクエストは
00:08:02安定してテストも通っていましたが、
00:08:04理想的なRustの品質ではなく、
00:08:06それは目的ではなかったのです。
00:08:07それが5月21日。
00:08:08それから沈黙がありました。
00:08:11このバージョンのBUNはリリースされておらず、
00:08:13AIの力を借りて行われました。
00:08:15BUNはAnthropic社の傘下にある点も忘れてはなりません。
00:08:18そのため、彼らは全てのトークンを自由に利用でき、
00:08:22特にFable 5に関しては、
00:08:24一般公開前からアクセス可能でした。
00:08:26この移植作業はFable 5を使用して行われたのです。
00:08:29ちなみに、今Cloud Codeをインストールすると、
00:08:32Rust版であるBUN 1.4はまだ未リリースにもかかわらず、
00:08:36Cloud Codeはすでにその上で動作しています。
00:08:39いわば未公開バージョンのBUN上で動いている状態で、
00:08:42それがRust版なのです。
00:08:44そういうことですね。
00:08:45とにかく、この移植はCloud Codeを使い、
00:08:48Fable 5をベースに、当然無料トークンで実行されました。
00:08:52BUNはAnthropicの一部ですから、実質的には無料です。
00:08:54この点は非常に重要です。
00:08:56というのも、あのブログ記事によると、
00:08:58全てのトークンを合算した場合、
00:09:03あるいは、消費した全てのトークンを、
00:09:04通常のAPI価格で計算してみると、
00:09:08この移植全体で約16万ドルかかった計算になります。
00:09:13驚くべき金額ですが、実際のところ、
00:09:18このプロジェクトの規模を考えると、
00:09:20BUNはSIGコードで53万5,000行もあったわけで、
00:09:26その規模と、
00:09:28人間がこれらをRustに移植するのにかかる時間を考えると、
00:09:3216万ドルというのは必ずしも悪くない金額かもしれません。
00:09:36場所にもよりますが。
00:09:38とはいえ、オープンソースプロジェクトで
00:09:43これを実現できるものはなく、
00:09:44多くの企業でもこれだけの費用を
00:09:47移植作業に費やすことは難しいか、望まないでしょう。
00:09:50これが可能なのはBUNがAnthropicの一部だからです。
00:09:54もちろん、これはAnthropicにとっても優れたマーケティング戦略でもあります。
00:09:58それが主目的ではなかったかもしれませんが、
00:09:59真意は私にはわかりません。
00:10:03しかし、
00:10:04素晴らしいマーケティングであることは確かです。
00:10:06こういった背景は重要です。
00:10:08ともあれ、そのブログ記事には、
00:10:10Jaredがどのように移植作業を行ったのか、
00:10:14あるいは、どうやって移植を成功させたのかが書かれています。
00:10:18すべては「porting.md」というファイルから始まりました。
00:10:21彼はClaudeとの3時間にわたる議論の中でこれを作成しました。
00:10:25ブログ記事でも触れられていますが、
00:10:26彼はそこで、Claude Codeや
00:10:28Anthropicのモデルと共に、
00:10:32SIGコードをRustコードに翻訳するために、
00:10:35どのような「porting.md」が必要かを、
00:10:37議論を重ねながら決定していったのです。
00:10:40反復を経て納得のいくものができると、
00:10:44まずは3つのファイルでテストを行いました。
00:10:46その結果に満足した後、
00:10:48BUNのコードベース全体に対してClaudeを投入したのです。
00:10:53このブログ記事によれば、
00:10:54単にClaudeをプロンプトして
00:10:57BUNをRustに書き換えさせたわけではありません。
00:11:00入念なシステムを構築したのです。
00:11:03メインのエージェントが、
00:11:07当然サブエージェントも起動し、
00:11:09「porting.md」に従って移植を行いました。
00:11:13さらに、作業完了後にレビューを行う
00:11:162つのアドバーサリアル(敵対的)レビューエージェントと、
00:11:19フィードバックを提供するエージェント、
00:11:21そしてそれを適用するフィクサーエージェントまで用意しました。
00:11:24これらをループ内で実行し、
00:11:25当然ながら複数の作業ツリーに分散させることで、
00:11:30コードベース全体を処理して
00:11:33作業を進めていったのです。
00:11:35ブログ記事によると、
00:11:35彼は11日間で、
00:11:38Claude Codeの50の動的ワークフローを使用して、
00:11:40多数のサブエージェントを起動しながら、
00:11:43BUNをRustで書き直しました。
00:11:46記事内には素晴らしい図表もあります。
00:11:48全体として、ブログ記事には、
00:11:49理解を助けるための素晴らしいグラフィックがあり、
00:11:51それらを見ると、
00:11:53いつ、どれだけのコミットが作成され、
00:11:56プッシュされたのかがよくわかります。
00:11:58すべてはClaude Codeのループと、
00:12:00多数のサブエージェント、
00:12:04そしてメインエージェント、レビューエージェント、
00:12:05フィクサーエージェントという明確なプロセスによって実現しました。
00:12:08さらに、別の独立したパスとして、
00:12:10すべてのテストを機能させるための作業も行われました。
00:12:15これには独自の課題がありました。
00:12:20テストスイートがあまりにも巨大で複雑なため、
00:12:22インフラ上の制限に直面したのです。
00:12:25一部のテストは多くのメモリを消費するため、
00:12:29並行して多くのテストを実行するのは無理がありました。
00:12:31しかし最終的には、それらもAIの力を借りて解決しました。
00:12:33テストを実行し、コードを修正し、
00:12:34再度テストを実行する、といった具合です。
00:12:39多くのループ、エージェントとサブエージェントが関与し、
00:12:42当然ながら、大量のトークンが消費されました。
00:12:4316万5,000ドル分のトークンです。
00:12:47繰り返しになりますが、
00:12:49さらに詳しく知りたい方は、ブログ記事をご参照ください。
00:12:53詳細な技術的プロセスを知りたい方にはおすすめです。
00:12:55移植に至る道のりが記録された素晴らしい記事です。
00:12:57要約すれば、この11日間の移植作業は、
00:12:5950のワークフローに分散された数多くのエージェントとサブエージェントによって、
00:13:03API価格で16万5,000ドルを費やして実現したのです。
00:13:08最後に、ブログ記事によると、
00:13:12Bun 1.4は、前バージョンのSIG版にあったさまざまなバグを修正し、
00:13:17メモリ効率が向上し、サイズも小さくなりました。
00:13:24SIGの作者であるAndrew Kelly氏の反応によると、
00:13:29これらの改善の一部は、SIGでも実現可能だった可能性があるとのことです。
00:13:35ブログ記事は編集されたようで、非常に興味深いですね。
00:13:38当初に比べると、怒りに満ちたトーンはかなり抑えられています。
00:13:43初版は個人攻撃が満載でした。
00:13:47個人攻撃の意図はないと言いつつも、内容は攻撃的でした。
00:13:53最新版もまだかなり刺激的ですが、下部にリンクを貼っておきます。
00:13:57結論から言うと、初版を読むと明らかにわかりますが、
00:14:00SIGの作者であるAndrewと、
00:14:03Bunの作者であるJaredは、
00:14:05もう親友にはなれないでしょう。
00:14:11彼はBunがSIGを(資金的にも)支援してくれたことに感謝しつつも、
00:14:14Bunのコードが適切なSIGで書かれていれば、
00:14:16今回の移植自体が必要なかったはずだと激怒しています。
00:14:21Bunのリポジトリのコード品質は高くなく、
00:14:26それが多くの問題を引き起こしたと彼は主張しています。
00:14:31真実かどうかはさておき、
00:14:41Bunほどの規模のプロジェクトであれば、
00:14:44開発スピードを優先する中で、
00:14:48コード品質がSIGの作者の基準を満たしていなかったというのは、
00:14:53十分にあり得ることだと思います。
00:14:56とはいえ、ほとんどのソフトウェアプロジェクトが
00:15:01必ずしも最高のコード品質を備えているわけではありません。
00:15:06どう解釈するかは人それぞれでしょう。
00:15:12個人的には、怒りに任せたブログ記事の反応は、
00:15:15議論としては少し弱いと感じます。
00:15:18ただし、いくつか妥当な点もあります。
00:15:21例えば、Jaredがブログで述べているように、
00:15:24SIGからRustへの移植は検証されたと言いますが、
00:15:29レビューエージェントだけでなく、
00:15:33既存のテストスイートを機能させることでも検証されました。
00:15:35Andrew氏が指摘するように、
00:15:40同じテストスイートを用いて、
00:15:46SIG版も十分に優れていたと証明できたはずだ、というのは、
00:15:48もっともな議論です。
00:15:51いずれにせよ、両者が親友になることはないでしょう。
00:15:56私自身、SIGとRustのどちらがBunにとって優れているか、
00:16:00意見はありません。
00:16:04ただ、AIを活用する時代において、
00:16:09Rustのメモリモデルとコンパイル時のチェックは、
00:16:17大きなアドバンテージになり得ます。
00:16:23今回の移植は、AIの活用例として非常に印象的でした。
00:16:30もちろん、多くの企業や個人が真似できるコストではありませんが、
00:16:38AIでこれだけのことができるというのは驚きです。
00:16:41単なる「バイブ・コーディング」や
00:16:45デタラメなプロンプトではなく、
00:16:48明確なプロセスと設計思想が背景にあります。
00:16:52技術的な詳細を掘り下げるとそれがよくわかります。
00:16:56繰り返しますが、これは一度きりのプロンプトでできたものではありません。
00:16:59コードベースの移植は、AIにとって非常に適した用途です。
00:17:05AIがゼロからコードを書くのには苦労することもありますが、
00:17:08既存のコードの翻訳であれば、比較検討材料が豊富です。
00:17:13まさにそれが今回証明されたことです。
00:17:17興味深いテイクアウェイは、
00:17:21これまで不可能だと思われていた規模のプロジェクトでも、
00:17:27適切な組織や企業であれば取り組めるようになったという点です。
00:17:32レガシーソフトウェアの刷新にAIを活用するのは
00:17:36素晴らしいユースケースになるでしょう。
00:17:40BUN 1.4がまだリリース前であることは留意が必要ですが、
00:17:43すぐにすべてが崩壊して元に戻すことになる、
00:17:47といったことはまずないと考えています。
00:17:53すでにCloud Code CLIなどのアーリーアダプターにより、
00:17:57プロダクション環境で利用されています。
00:17:59AIによって広範にテストとレビューが重ねられてきました。
00:18:04結果としてこれはうまくいくだろうと確信しています。
00:18:08非常に印象的な成果であり、AIの活用事例としても秀逸です。
00:18:12皆さん自身はこの件についてどう思われますか?
00:18:13ぜひ意見を聞かせてください。
00:18:18感想をお待ちしております。
00:18:19動画をご視聴いただきありがとうございました。
00:18:26また次回お会いしましょう。
00:18:30さて、もちろんBUN 1.4はまだリリースされていません。
00:18:32すべてがクラッシュして1か月以内に元に戻すことになるのか、見守る必要があります。
00:18:36完全に否定はできませんが、個人的にはそうはならないと考えています。
00:18:40Cloud Code CLIのように、一部のアーリーアダプターによってすでに本番環境で使用されています。
00:18:47人間のレビューではなく、もちろんAIによるものですが、広範囲にわたるテストとレビューが行われています。
00:18:54しかし、これがうまくいくと確信していますし、非常に印象的な偉業であり、AIの素晴らしい活用事例だと感じています。
00:19:03ですが、いつものように、これらについて皆さんがどう思うかもぜひ聞かせてください。

Key Takeaway

BunのRustへの全面移植は、AIエージェントのループによる自動化と16万5,000ドル分の演算リソースを活用することで、人間による大規模コードベース移行の限界を押し広げた実証例である。

Highlights

  • JavaScriptランタイム「Bun」のコードベースは、SIGからRustへ完全に移植された。

  • 100万行を超えるコード変更を含む約7,000回のコミットが、AIを主体として行われた。

  • 移植作業にはAnthropicの「Claude Code」と「Fable 5」モデルが使用され、推定16万5,000ドルのAPIコストを要した。

  • 移植プロセスは、専用プロンプト「porting.md」に従うメインエージェントと、レビューや修正を行うサブエージェントのループによって自動化された。

  • Bun 1.4(Rust版)は、既存のバグ修正に加え、メモリ効率の向上とバイナリサイズの縮小を実現している。

Timeline

BunのRust移植のタイムラインと背景

  • 移植プロジェクトは5月初旬にGitHubリポジトリ内の専用ブランチで開始された。
  • 5月14日に正式なプルリクエストが公開され、コードベース全体がSIGからRustへ変換された。
  • Rust版への移行において、メモリ管理の自動化を目的としたunsafeキーワードが頻用された。

5月上旬に開始された移植は、SIGコードをRustへ翻訳するためのマークダウンファイルを作成することから始まった。その後、5月中旬に100万行を超える変更を加えるプルリクエストがマージされた。Rust独自の所有権モデルではなく、C言語のライブラリ呼び出しなどに適応するため、初期段階では意図的に多くのunsafeスコープが使用された。

AIを活用した開発プロセスとコスト

  • 移植作業はAnthropicのClaude Codeおよび一般公開前のFable 5モデルによって実行された。
  • プロジェクトにはメイン、敵対的レビュー、修正の各役割を持つエージェントが導入された。
  • 合計11日間で、50の動的ワークフローを通じて移植が完遂された。
  • 消費されたトークンをAPI価格で換算すると、総額は約16万5,000ドルに達する。

単一のプロンプトではなく、コード移植のための専用システムが構築された。メインエージェントがサブエージェントを指揮し、テストと修正をループさせることで、巨大なコードベースを効率的に処理した。Anthropic傘下であるBunは、この計算資源を実質無料で利用し、開発スピードを劇的に加速させた。

移植に対する評価と今後の展望

  • SIGの作者であるAndrew Kelly氏は、移植されたコードの品質や設計上の判断を批判している。
  • Bun 1.4はすでにCloud Code CLIなどのアーリーアダプターにより本番環境で稼働している。
  • レガシーソフトウェアの刷新におけるAIの有用性がこのプロジェクトで証明された。

SIGの作者からは、コード品質に関する厳しい指摘がなされたが、実用面ではバグ修正やパフォーマンス向上が報告されている。AIによる自動翻訳と広範なテストスイートの組み合わせは、大規模なリファクタリングにおいて人間には困難な速度での移行を可能にした。Bun 1.4の本格リリースを控え、プロダクション環境での信頼性が実証されつつある。

Community Posts

View all posts