4 min read

棚卸し (2025-12)

定期的にやるやつ。2018 年くらいからだらだら書いてる。前回は 2025-07 だったのであれから 5 ヶ月。

棚卸し (2025-07)
定期的にやるやつ。2018 年くらいからだらだら書いてる。 Erlang/OTP 淡々と書いてる。今年はレガシーな機能削減がメインなのでコードを削除したりする方が多い。Raft を利用した分散システムになってからは、色々気を遣うことが多くなったが、それでも何も悩まずに書けていてとても良い。 最近は QUIC / WebTransport をちまちまと書いたりもしているが、これが主力になるのはあと 5 年はかかるので、それまでにノウハウはためておきたい。 TypeScript もうほぼ自分では書かず Claude Code で書いている。明らかに自分よりもよくわかっている。ただすぐデグレするのでレビューは徹底してるし、テストも徹底してる。古いコードは 1 から書き直した方が良い。 Python pytest がメイン。テストツールやら検証ツールやらツール系が Claude Code で気軽に作れるのは本当に便利。LLM 関連を他の人に任せたので最近はツールより。 WebRTC まだまだやることが山盛りで、WebTransport なんてやってる暇は全然ないなと思

Erlang/OTP

今年は主力製品から古い機能を廃止するという年だったので、削除したコードの方が多いと思う。とにかく細かい機能を沢山追加した年だった。

来年は廃止はひと段落したので、既存機能を整理したり、DTLS 1.3 に対応したり QUIC を書いたりと、もう少しプロトコルよりを頑張りたいところ。

TypeScript

React / Zustand から Preact / Signals への切り替えを進めている。React の依存の多さに疲れてきたというのが正直なところ。自分の扱う規模であれば Preact / Signals / preact-iso で十分と判断した。

Bootstrap を Tailwind CSS に置き換えたりもしたい。また Lint を強めにするため Biome から Oxc に切り替えたりもしている。

Vitest より Playwright がメインなので、もう少し Vitest を使い込みたい。

Python

nanobind と scikit-build-core と cmake の組み合わせで沢山自分が欲しい OSS を作った。

  • libdatachannel-py
  • blend2d-py
  • libwebm-py
  • mp4-py
  • webcodecs-py
  • raw-player
  • uvc-py
  • portaudio-py

Python は遅くてスケールアップしないという課題を抱えていたため、ツール類はあまり作らなかったのだが、nanobind による (C/C++) 実装と Python 3.13 から入った no-GIL (Free Threading) を使う事でまぁまぁ早くてスケールアップできるようになったので、積極的に使うようにしている。

pytest が本当に便利で pytest-benchmark も愛用している。

来年も Python を利用した調査、解析、検証、テスト向けのツールを作り込んでいきたい。DuckDB も Python 使うと便利なので、とにかく Python (というなの を頑張りたい。

C++ から Rust へと以降はしているが、PyO3 などは採用しないことにした。もし Python から Rust ライブラリを使う時は C API 経由で nanobind で利用するというのが現在の方針。

pyroute2

IPRoute2 を時前で読んでくれる便利ライブラリ。スポンサーをしている。

GitHub Actions 上で pyroute2 と pytest を組み合わせて、実際にネットワーク帯域を不安定にするテストなどを実現している。これにより輻輳制御のテストが本当に楽になった。

今後はマルチパス QUIC のテストで特定経路を不安定にするなどでも利用していきたい。

Rust

プロトタイプ開発をメインにコツコツとやっている。こんな物が作りたいというのを設計書を書いて、テストを書いて、コードを書くという繰り返し。

プロダクションレベルのコードは無理なので沢山失敗するのを目的に頑張っている。

WebRTC

覚えることは無限にあるので、コツコツ勉強はしている。DTLS 1.3 に Chrome が対応したりして、大変だなという気持ち。

とはいえ会社としては libwebrtc への貢献もしっかりできており、libdatachannel 等へも貢献しているので、まずは貢献して色々やっていくというスタンス。

とにかく libwebrtc へ丁寧に追従していくを心がけたい。

DuckDB / DuckDB-Wasm / DuckDB-FTS

DuckDB Foundation のスポンサーをした。また自社の解析でも使っているし、ツールでも DuckDB を採用したりしている。

ドキュメントツールのオフライン日本語全文検索とかも作ってみたりした。来年はこれを本番運用まで持っていきたい。

DuckDB は本当に便利で、色々なことがこれで解決するのはありがたい。

QUIC / WebTransport / MOQT

MOQT を Python (client/relay) と Rust (client/server) と TypeScript (client) で実装している。

Python は msquic と nghttp3 を組み合わせて実装。Rust はシンプルに tokio-quiche を利用して、WebTransport 部分は時前で実装。

nghttp3 (や nghttp2) の作者にアドバイザーとして時雨堂に参加して貰い、QUIC や HTTP/3 や WebTransport については頼りっきり。詳しい人が居るの本当に助かる。

Python で作ってる理由は nanobind + Free Threading で最低限動くのであれば扱いやすい方が良いだろうと言う考えと、pytest ベースで色々テストできる環境を用意したいから。 実際 Python ベースで MOQT Client と MOQT RelayServer は対応済みで、普通にブラウザからも動作している。

性能面では特にネガティブなことは今のところは出ていない。とにかく msquic と nghttp3 が良くできすぎている。

Rust 版と TypeScript 版も作っていて相互運用をしてテストしていきたい。Erlang/OTP 版も Cowboy が WebTransport over HTTP/3 に対応しているのでやっていく予定。

時雨堂としては Python / Rust / TypeScript / Erlang/OTP の 4 種類をしっかり作り込んで、その後 iOS/Andorid へ移行する。

マルチパス QUIC

MOQT とは別に マルチパス QUIC の実現に向けて開発を進めている。マルチパス QUIC は WebRTC ではできなかった機能の一つなので、なんとか実現したい。

msquic を fork して書き換えてる。nanobind を利用して薄い Python バインディングを作成し、pytest + pyroute2 を使って GitHub Acitons でマルチパスの検証をできるようになった。

色々検証してレポートを上げていきたい。

Claude Code

Max プランで利用している。5 並列くらいで作業したりしている。コードレビューしたり資料を解説して貰って勉強したり、色々なことで利用している。

Claude Code Action

社内は Sonnet / Haiku でのレビューを徹底している。!haiku と !sonnet で利用できる用になっているので、バンバンレビューを依頼する用、メンバーにお願いしている。


組み込みは 2026 年にということで手を付けるのをやめた。来年がんばる。

テスト環境の整備を目的に 1 年くらいやってきたが、かなり良い結果が出たと思う。実際 2026 年 6 月にリリースした主力製品は 2026 年 12 月リリースまで一度もバグフィックスリリースをしなくてよかった。

Python では 1080p 120fps の生映像を再生できるライブラリや、uvc から取得した映像をポインタで他のライブラリに渡せるライブラリなど、欲しいものをとにかく作った。そして全て no-GIL (Free Threading) 対応にした。

来年は WebRTC と MOQT を色々な言語で色々な視点でやっていきたい。特にテスト。E2E テスト、PBT や Fuzzing 、そしてそれらの可視化、自動改善や自動デプロイによる自動ネットワーク障害テスト、やりたいことが沢山ありすぎるので、全部やっていきたい。