Slide 1

Slide 1 text

libsyncrpcってなに? 2025-06-06 TSKaigi 2025事後勉強会 —— まだまだ型りたい

Slide 2

Slide 2 text

発表者紹介 uhyo 株式会社カオナビ フロントエンドエキスパート 滑り込みでSwitch 2に当選して 昨日購入した。 2

Slide 3

Slide 3 text

TypeScript Native Preview TSKaigi当日(日本時間)に公開された。 どうやら本当に10倍速いぞ! 3

Slide 4

Slide 4 text

その中に気になる記述が…… Because so much TypeScript API usage today is synchronous, we wanted to make it possible to communicate with this process in a synchronous way. Node.js unfortunately doesn’t provide an easy way to communicate synchronously with a child process, so we developed a native Node.js module in Rust (which should make lots of people happy) called libsyncrpc. 4

Slide 5

Slide 5 text

その中に気になる記述が…… Because so much TypeScript API usage today is synchronous, we wanted to make it possible to communicate with this process in a synchronous way. Node.js unfortunately doesn’t provide an easy way to communicate synchronously with a child process, so we developed a native Node.js module in Rust (which should make lots of people happy) called libsyncrpc. 5

Slide 6

Slide 6 text

libsyncrpc 他のプロセスとの間のRPCを、 (Node.js側のJavaScriptコードから見て) 同期的に行うためのモジュール。 6

Slide 7

Slide 7 text

同期的 従来のTypeScript APIは同期的なAPIだった。 checker.getTypeAtLocation(node); これが急に非同期になると、エコシステムに 与える影響が大きすぎる。 7

Slide 8

Slide 8 text

注意 ネイティブ版TypeScriptは同期的なAPIを 提供しようとしているが、 完全に従来のAPIと互換性があるわけではない。 (むしろ、APIレベル互換性はさすがに無くなりそう) 8

Slide 9

Slide 9 text

パフォーマンス libsyncrpcを用いたAPI呼び出しのパフォーマンス はどうか? What we've found is fairly promising - while IPC overhead is not entirely negligible, it is small enough. What is the API story for this new codebase? https://github.com/microsoft/typescript-go/discussions/455 9

Slide 10

Slide 10 text

内部実装 Rustコードで普通の同期I/Oを実装して、 napi-rsでNode.jsアドオン化している。 わりと変哲の無い実装か。 10

Slide 11

Slide 11 text

まとめ TypeScript APIを使用しているライブラリは ネイティブ対応を迫られることになるが、 libsyncrpcのおかげで同期→非同期への変更 という大破壊は避けられる。 ……かもしれない 11