棚卸し (2024–04)

選択と集中

V
4 min readApr 21, 2024

定期的にやるやつ。前書いたのが 2022–09 なので 1 年 7 ヶ月でどうなったか。かなり久しぶりになった。

Erlang/OTP

OTP-27.0 がそろそろでる。maybe 文法が正式に採用された。また ~”abc” といった ~ を使って bitstring を表現できるようになった。

RabbitMQ の Raft ライブラリ Ra を採用したこともあり、分散 Erlang/OTP に突っ込んで行っている。実際うまくいき、大規模分散システムを実現できるようなミドルウェアができてきており、楽しい。

何年やっても Erlang は飽きないし本当に、自分が作りたい製品とマッチしている。

Go

OSS のミドルウェアや、サービスのバックエンドに利用している。Go はあまり自分には合っていないなと感じていたが、他のメンバーもそう感じていたようで今後 OSS ミドルウェア以外は TypeScript に置き換えていこうと考えている。

多分、自分がやりたいことと合わないだけなんだとおもう。sqlc が Go で書かれていたのが Go をバックエンドに採用した理由なので、TypeScript で sqlc が使えるようになった今、脱 Go をしていく。

そもそもサービスは Cloudflare Workers に Remix をのせる前提というのがある。

SQL

最近は ClickHouse や DuckDB を調査の調査をしている。TimescaleDB は悪くはないのだが、思った以上に性能が出ないことがわかった。そもそも PostgreSQL の拡張ということもあり、専用に開発されたミドルウェアとは戦えないというのがあるのだろう。ゆっくりと脱 TimescaleDB を進めていく予定。

TypeScirpt / Cloudflare Wokrers

検証サービスを Go から TypeScript (Remix) へ切り替えていく予定。sqlc-gen-typescript が出てきたのも大きく、さらに Cloudflare Workers 上から普通に PostgreSQL にアクセスできるようになったのも大きい。

実際 Cloudflare Workers を利用して、かなり安定して利用できたというのも大きい。

WebRTC

8 年以上やってきてるのに、やることが全然終わらない。最近はマルチコーデックを利用したサイマルキャストという 1 配信で H.264 と H.265 と AV1 を同時に配信したりという仕組みを実装したりしている。

それ以外にも細かい WebRTC はまだまだやることがあり、終わる気配が無い。全く飽きてない。楽しい。

Zig

0.12.0 がちょうどリリースされたり、 OpenSSL に QUIC が実装されたりと、自分の中での OpenSSL と Zig の組み合わせよる MOQT 実装がいけるのではないか?という気持ちになってきている。

OpenSSL の QUIC 実装をベースに libmoqtclient を Zig で実装するのがここ数年の目標にしていきたい。

Media over QUIC Transport (MOQT)

正直、MOQT が今すぐ必要になるタイミングはほとんどないと思う。ブラウザの対応もまだまだだし、libwebrtc と並ぶ実装を作るだけでも相当しんどい。結局 libwebrtc 上でやっていることをほぼ全て実現するには相応の時間がかかる。

ただ、将来的に WebRTC から置き換わっていくことは決まっているので、ゆっくり対応していくという戦略をとる。

サーバーは Erlang で実装し、クライアントは Zig でという方針。

E2E テスト

E2E テストにリソースを投資できるくらいにはなってきたので、pytest や Playwright を使った E2E テストを増やして行っている。

さらに Property Based Testing を E2E に導入していきたいと考えており、楽しみ。テストランナーはとにかく pytest があまりにも優秀でスゴイ。

ドキュメント

Sphinx からの移行を検討したりしていたが、結局 Sphinx が万能なので移行先はあきらめた。全文検索は Meilisearch だが、まだまだ改善の余地はある。Sphinx 内のサンプルコードを E2E テスト導入したりもしている。

ドキュメント 6 割、Erlang での開発が 2割、テスト 1 割、その他雑務 1 割という感じ。とにかくドキュメントを頑張っている。

Zig はちまちま暇な時間を見つけて勉強している程度。焦らずやる。

--

--