自社の今後は新しくこんな技術を使っていこうと思っているという話を書く。現時点では製品には採用しておらず、これから採用していく予定の技術。
前提
- 主力製品は Erlang/OTP を利用した音声や映像をリアルタイムに配信するミドルウェア
- 主力サービスは Cloudflare Workers / Remix / TimescaleDB / sqlc などを利用した主力製品ミドルウェアのクラウド版
Rust
もともと今度性能を求められる野を開発する場合は Zig を検討していたが、Zig が思っていたより中長期的な開発戦略をとることに変化したことや、自分たちが作りたい製品が Erlang の分散機能を利用した仕組みということもあり、Rust に切り替えることにした。
Rust は社員にチョットデキル人材がいるというのが大きい。とはいえ一人だけで来ても意味がないので別の社員にメインの仕事として Rust を学んででいる。半年くらいかけてじっくり学んで貰いたい。
Rust で作りたいのは Erlang/OTP の分散機能の仕組みに参加できるような Rust アプリ。つまり CPU バウンドな処理を Erlang VM や NIF (C 拡張) で行わず、Erlang VM と連携する Rust アプリに任せてしまうという仕組みだ。
簡単に言えば Erlang アプリのクラスターに、Rust アプリを参加可能にしてしまう。
偶然チョットデキル社員が Erlang の分散機能を Rust で実装してしまっている。それも 7 年前に。
これで Rust で音声や映像の合成や変換をリアルタイムに行い HLS/MPEG-DASH を出力する仕組みを開発する予定だ。適材適所。
ブラウザ外 WebAssembly
ブラウザでの WebAssembly は普通に利用しているが、ブラウザ外にも手を出していこうと考えている。
これは SDK やアプリのプラグイン機能としての WebAssembly を試していきたいというのがある。
どうしても音声や映像をリアルタイムで扱う場合はいろいろな追加機能が必要になるため、それらをプラグイン化したりしたい。例えば音声コーデックを Wasm 化しておいて、必要になったらダウンロードして使うとかでもイイと思う。
C++ SDK と wasmtime-cpp を組み合わせたり Go と wasmtime-go を組み合わせたり、色々していきたい。iOS / Android で wasmruntime が動けば面白いのだが。
Cloudflare D1 や DO
Cloudflare Workers だけ動くウェブミーティングアプリを開発していきたいと考えている。気軽に安全に利用できるアプリ。
そこでのアプリ向けのデータベースには D1 を採用したい。sqlc-gen-ts-d1 が想像以上によくできているので気軽に使えるはず。
DO はロックを取るための仕組みとして便利なので、うまく使っていきたい。
sqldef
現在はマイグレーションツールとして go-migrate を利用しているが、結果的に SQL スキーマの差分メンテナンスがあまりにもツライので、 sqldef を利用する事で、楽になりたい。
pg-schema-diff も使いたいが SQLite でも利用したいので sqldef が無難そうという認識。
Electron
Cloudflare Workers だけで動くウェブミーティングアプリのデスクトップ版として Electron 版を OSS として公開したい。
WebRTC をデスクトップで利用する場合は Electron がほぼほぼ最適解になる。Cloudflare Workers でのアプリは Remix なので Remix をそのまま Eleectron にもってこれると嬉しそう。