棚卸し (2024–06)
定期的にやるやつ。前書いたのが 2024–04 なので 2 ヶ月でどうなったか。
Erlang/OTP
OTP-27.0 がでた。maybe 文法が正式に採用されて maybe を積極的に使って行っている。また ~”abc” といった ~ を使って bitstring を表現できるようになった、これはまだテストコードでのみ採用している。
RabbitMQ の Raft ライブラリ Ra 採用して自社製品を分散システム化したこともあり、Erlang/OTP で分散をがっつりやっていっている。
何年やっても Erlang は飽きないし本当に、自分が作っていきたいパッケージミドルウェアソフトウェアにマッチしている。
TypeScirpt (Remix)
Cloudflare から離脱を決めたので、今後は Node.js (or Bun) を利用していくつもりでいる。焦らず移行していく。BFF (backend for frontend) としての Remix だったが、バックエンドも Remix で行けるか検討していく。
NGINX + PM2 Plus + Node.js (or Bun) + TypeScript + sqlc + Remix という構成をとれればと思っている。NGINX UNIT と PM2 Plus で悩んだが一旦 PM2 で行くつもり。
TypeScript はどうせブラウザ周りで使っていく必要があるので、最低限書けるのを維持はしておきたい。
Raft
今後数年はWebRTC と MOQT をやりつつ Raft をしっかりとやっていく事になると考えてる。分散ミドルウェアは本当に面白い。
リアルタイムコミュニケーションを実現するミドルウェアと Raft による分散システムは本当に相性がいい。ステートフルかつパッケージ製品というのを顧客が気軽にスケールアウトできるようにするには、分散システムを採用するしかない。
とにかく簡単に利用できる分散メディアサーバーを作っていきたい。
WebRTC
8 年以上やってきてるのに、やることが全然終わらない。マルチコーデックサイマルキャストという複数画質を複数コーデックでというわけわからない仕組みを追加したりしている。
それ以外にも細かい WebRTC はまだまだやることがあり、終わる気配が無い。全く飽きてない。楽しい。 Twitch との仕事もとても楽しい。
Media over QUIC Transport (MOQT)
正直、MOQT が今すぐ必要になるタイミングはほとんどないと考えている。WebRTC RtpTransport が思った以上に早く来てしまったこともあり、まだまだ WebRTC 時代が続きそう。
とはいえ QUIC (HTTP/3 や WebTransport 含む) のサーバー自前実装はやっていく。もちろんフル Erlang で書く。
Rust
自社の C++ で書かれている OSS を Rust 化していくが、自分は読めれば充分程度で行くつもりでいる。
SQL
ClickHouse や DuckDB を調査の調査をしているが、ほぼ書いていない。
sqlc の Rust 版で DuckDB と ClickHouse に対応したツールを作りたいなと思っているが、良いビジネスモデルが思いつかない。
E2E テスト
E2E テストにリソースを投資できるくらいにはなってきたので、pytest や Playwright を使った E2E テストを増やして行っている。
さらに Property Based Testing を E2E に導入していきたいと考えており、楽しみ。テストランナーはとにかく pytest があまりにも優秀でスゴイ。
ドキュメント
Sphinx + Meilisearch で一旦落ち着いている。Markdown がうらやましいなと思うときはあるが reStructuredText に慣れている自分としては Markdown はツライ。ただ、脱 Sphinx は当面先になりそう。
ドキュメント 5 割、Erlang での開発が 3 割、テスト 1 割、その他雑務 1 割という感じ。とにかくドキュメントを頑張っている。
そしてこつこつ Raft に絞って分散合意システムを学んでいる。さらにライブラリに関しては Ra に絞っている。独自で何かというのは考えていない。
まだまだやることが山盛りだし、技術も複雑になってきて本当に楽しい。