棚卸し (2024–09)
定期的にやるやつ。前書いたのが 2024–06 なので 3ヶ月でどうなったか。
Erlang/OTP
自社製品が Raft ベースの分散システムになった。ついに Erlang/OTP の真価が発揮されるときが来たかという気持ち。無事安定して稼働している。
最近はより使いやすい仕様を整理して実装したり、新しい事をやっている。Erlang/OTP + kTLS がうまく利用できないかを調べたりしてる。
Erlang/OTP で QUIC 実装をちまちまやってる。何度も書き直している。
何年やっても Erlang は飽きないし本当に、自分が作っていきたいパッケージミドルウェアソフトウェアにマッチしている。
TypeScirpt
Remix (や React) とは一旦距離を置いて、自社製品のブラウザ向け WebRTC SDK の整備をずっとやってる。
圧縮ライブラリの依存を削除したり、Rollup から Vite へ完全に移行したり、Playwirght を利用した E2E テストを書いたりと、かなり TypeScript に時間を費やしてる。E2E テストに PBT をうまく導入していきたいところ。
さらに DuckDB-Wasm を利用してブラウザ側での可視化にもチャレンジしたりしている。
MOQT (Media over QUIC Transport) でもブラウザ向けの SDK は TypeScript で書くことになると思うので、いい機会だからしっかり TypeScript を学んでいる。
Python
自社製品の E2E テストが pytest ベースということもあり、Python をよく書いている。
自社製品の Python SDK の中身は C++ ゴリゴリなのだが、サンプルやテストは Python でかく必要がある。 rye (uv) や ruff や mypy 、そして VS Code のおかげでかなり楽できてる。
何より pytest 本当に素晴らしい。
Raft
無事 Raft 化した WebRTC SFU がリリースできて、自社サービスとしても安定して動いており、スケールアウトの偉大さを実感している。
焦らず利用している Raft ライブラリの知識を増やして行くくらい。
WebRTC
8 年以上やってきてるのに、やることが全然終わらない。色々と細かいところを修正している。
WebRTC はまだまだやることがあり、終わる気配が無い。全く飽きてない。楽しい。 Twitch との仕事もとても楽しくやれている。
Media over QUIC Transport (MOQT)
正直、MOQT が今すぐ必要になるタイミングはほとんどないと考えている。ビジネス利用までの距離が遠すぎる。MOQT で騒いでる人たちはそもそも OBS と YouTube Live と Twitch が MOQT 採用していない事に皆気付くべき。
WebRTC RtpTransport が思った以上に早く来てしまったこともあり、まだまだ WebRTC 時代が続きそう。
とはいえ QUIC (HTTP/3 や WebTransport や MOQT) のサーバー自前実装はやっていく。もちろんフル Erlang/OTP で書いている。
ネイティブクライアントは Google の公開している libmoqt (C++) に乗っかっていくので、自分は手を出さない。libmoqt の何がイイって Chrome で利用される QUIC 実装と同じなのが良い、互換性で苦労しなくて良い。
Rust
自社の C++ で書かれている OSS を Rust 化していくが、自分は一歩引いたところから見ていく。今の自分に必要なスキルは Rust ではない。
DuckDB
大量の統計情報を処理する際、コストをかなり抑えられる DuckDB を商用環境に突っ込むためがっつり調査している。特に S3 互換オブジェクトストレージにログを Fluent Bit で保存しておき、それを DuckDB で処理するという構成がかなり良い。
Linode の S3 オブジェクトストレージは 1 TB で月 20 ドル、Egress の転送量は 1 TB で月 5 ドル。安い。
ブラウザ側での DuckDB-Wasm は OPFS にまだ対応していないので、これからというところだが、対応すると色々化ける。
E2E テスト
E2E テストにリソースを投資できるくらいにはなってきたので、pytest や Playwright を使った E2E テストを増やして行っている。pytest が万能なので、うまくコマンドライン系の E2E テストも開発していきたい。
さらに PBT を E2E テストに導入していきたいと考えており、楽しみ。テストランナーはとにかく pytest がとにかく便利。
ドキュメント
Sphinx (reStructuredText) でもりもり書いてる。
まとめ
Erlang/OTP と TypeScript と Python な日々になってきている。そしてそれは嫌ではない。とくに TypeScript は Promise を完全に理解した気になっている。
また、ログ周りの可視化という長年の課題に取り組めたのは嬉しい。顧客向けは DuckDB-Wasm + S3 互換オブジェクトストレージ、社内向けは VictoriaLogs + Grafana という構成にする予定。ログの送信は全て Fluent Bit を使っていく予定。
可視化はとにかくコストが高い割にメリットが少ない分野だが、今後は積極的に取り組んでいきたい。