Rox v2026.10.0 / v2026.10.1 リリース
Rox v2026.10.0 と、それに続くパッチリリース v2026.10.1 をリリースしました!🎉
v2026.7.0 から約 3 か月ぶりの安定版です。今回は新機能より「足回り」の更新が中心で、ランタイムと依存パッケージの刷新、セキュリティ対応、そしてキャッシュ/配信キューまわりの重要な不具合修正が入っています。v2026.10.0 で Dragonfly へ実際に接続するようになったことで別の問題が見つかったため、すぐに v2026.10.1 で修正しました。これから更新する方は v2026.10.1 をご利用ください。
IMPORTANT
セルフホストしている方は、更新をデプロイする前に Dragonfly の起動オプションを見直してください。--default_lua_flags=allow-undeclared-keys を追加し、--cache_mode=true を外す必要があります。詳しくは記事末尾の「アップデート方法」をご覧ください。
主な変更点
🐛 Dragonfly のキャッシュと配信キューが動くように (v2026.10.0, #273 / #274)
今回いちばん大事な修正です。
docker/compose.yml と K8s の Secret では接続先を DRAGONFLY_URL で渡していましたが、バックエンドのキャッシュアダプターと ActivityPub 配信キューは REDIS_URL しか読んでいませんでした。そのため接続に失敗して localhost:6379 へ静かにフォールバックし、キャッシュとキュー経由の配信が実質的に無効になっていました。
REDIS_URLが未設定のときはDRAGONFLY_URLを読むように- Redis / Dragonfly への接続失敗を
debugではなくwarnで記録するように - BullMQ の Lua スクリプトは宣言していないキーにもアクセスするため、Dragonfly の既定設定では
script tried accessing undeclared keyで失敗します。同梱の compose / K8s マニフェストに--default_lua_flags=allow-undeclared-keysを追加しました
🔌 接続の安定性とジョブ ID の修正 (v2026.10.1, #281 / #284)
キャッシュとキューが実際に Dragonfly を使うようになったことで、これまで隠れていた問題が表に出ました。v2026.10.1 でまとめて修正しています。
- 再接続をあきらめない: 以前は約 0.6 秒で再接続をやめていたため、Dragonfly が再起動するとプロセスを再起動するまで配信ワーカーが止まったままでした。再接続の間隔を少しずつ延ばしながら(上限 5 秒)接続し直し続けるようにしました
- 起動時の接続待ち: 最初の接続エラーでキューとキャッシュが無効になっていたのを、最大 15 秒まで接続を待つようにしました。アプリの起動自体は待たないので、起動は遅くなりません
- ログ: 接続が切れたときに
warn、復帰したときにinfoをそれぞれ 1 回だけ出します - ジョブ ID の衝突を解消: 32 ビットのハッシュをやめて SHA-256 の先頭 128 ビットにしました。別々の配信が同じ ID になって捨てられることも、BullMQ が拒否する数字だけの ID ができることもなくなります。すでにキューに入っているジョブには影響しません
- compose の見直し:
--cache_mode=trueを外し、メモリが上限に達しても BullMQ のキーが追い出されないようにしました(キャッシュはすべて TTL 付きなので、消えずにたまり続けることはありません)。また backend は Dragonfly が healthy になってから起動します .env.example:REDIS_URLをコメントアウトしました。例をコピーした.envが compose のDRAGONFLY_URLより優先されてしまうのを防ぐためです- セキュリティ: 起動時のエラーメッセージで、Redis URL に含まれる認証情報を伏せるようにしました
公式インスタンス(rox.love-rox.cc)で、キャッシュとキューが Dragonfly を使っていること、bull:activitypub-delivery:* キーが作られていることを確認しています。
🧰 Bun 1.4.3 への移行 (v2026.10.0, #272)
ランタイムを Bun 1.3.14 → 1.4.3 に更新しました。CI、Dockerfile(oven/bun:1.4)、型定義(bun-types / @types/bun)をまとめて揃えています。
📦 主要依存パッケージのメジャー更新 (v2026.10.0, #272)
| パッケージ | 変更内容 |
|---|---|
| Sentry 10 → 11 | sendDefaultPii が廃止され、v11 は既定ですべてを収集するようになりました。Rox では dataCollection でヘッダー・Cookie・リクエストボディなどの収集を明示的に無効化しています |
| jotai 2 → 3 | atomFamily を jotai-family へ移行 |
| BullMQ 6 / ioredis 6 | RESP2 の挙動を保つため protocol: 2 を指定 |
| @simplewebauthn 14 | コード変更なし(新規登録では ML-DSA-44 が優先されるように)。v2026.10.1 で不要になった @simplewebauthn/types を削除 |
| vite-plus 1.1 | vitest 5 を同梱 |
| katex 0.19 | セキュリティアドバイザリへの対応 |
このほか waku 1.0.0-rc.3、React 19.3、vite 8.3、Lingui 6.9、hono 4.13、zod 4.6 などのマイナー/パッチ更新も入っています。
🔒 セキュリティ警告を 32 件 → 2 件に (v2026.10.0, #272)
bun audit の指摘を 32 件(critical 2 / high 21)から 2 件(high 1 / moderate 1) まで減らしました。残っている 2 件はどちらも開発時のみ使う依存(@lingui/cli 経由の braces、drizzle-kit 経由の古い esbuild)で、現時点で上流に修正がないものです。本番の実行コードには含まれません。
⚙️ 開発環境・CI の整備
- GitHub Actions を最新版に更新し、イメージビルド用のワークフローは SHA で固定 (#272)
format:checkを CI で必須化 (#272 / #275)- auto-tag で作られたタグに対してリリースが二重に作られないように (#278 / #279 / #282 / #285)
- devcontainer の Node.js を 20 から 24 (Active LTS) へ (#280 / #283)
バージョン情報
| コンポーネント | バージョン |
|---|---|
| Rox (Project) | 2026.10.1 |
| Hono Rox (Backend) | 1.10.1 |
| Waku Rox (Frontend) | 1.10.1 |
| Shared | 1.10.1 |
アップデート方法
- DB マイグレーションはありません
- Dragonfly の起動オプションを先に更新してください。 順番を逆にすると、新しいバックエンドがキューに Dragonfly を使い始めた時点で BullMQ のジョブが
script tried accessing undeclared keyで失敗します --cache_mode=trueを付けている場合は外してください。付けたままだと、メモリが上限に達したときに配信待ちのジョブが消えることがあります
# docker compose の例
dragonfly:
image: docker.dragonflydb.io/dragonflydb/dragonfly:latest
command: >
dragonfly
--default_lua_flags=allow-undeclared-keys
同梱の docker/compose.yml と deploy/k8s にはすでに反映済みです。独自の構成で動かしている場合は手動で変更してください。K8s では Dragonfly の StatefulSet を先に適用してから、バックエンドのイメージを更新してください。
.env.example をコピーして .env を作った場合は、REDIS_URL=redis://localhost:6379 が残っていないか確認してください。残っていると compose の DRAGONFLY_URL より優先され、キャッシュとキューが Dragonfly に接続できません。
git pull origin main
bun install --frozen-lockfile
bun run build
コンテナ運用の場合は ghcr.io/love-rox/rox-backend:v2026.10.1 / ghcr.io/love-rox/rox-frontend:v2026.10.1 タグをご利用いただけます。
更新後は、バックエンドのログに Redis / Dragonfly 関連の warn が出続けていないことと、Dragonfly に bull:activitypub-delivery:* キーが作られていることを確認してください。
おわりに
地味なリリースですが、キャッシュと配信キューがようやく本来の構成どおりに、しかも Dragonfly の再起動にも耐える形で動くようになりました。連合先への配信が安定し、負荷も下がるはずです。
ご質問やフィードバックは GitHub Issues にてお待ちしております。
愛がロックする。Rox。 🚀