← すべての投稿に戻る

By Roxチーム

Rox v2026.7.0-rc リリース

Rox v2026.7.0-rc をプレリリースしました(rc.1 に続き、デッキのモバイル操作を改善した rc.2 まで進めています)。今回の目玉は 時系列チャート統計サブシステム で、あわせてデッキの操作性改善、そしてセルフホスター向けのコンテナ/Kubernetes 対応を行っています。

プレリリース(RC)です。機能はひととおり揃ってテスト済みですが、本番投入前にステージングでの確認をおすすめします。

時系列チャート統計サブシステム(TimescaleDB 任意対応)

これまで Rox の統計は「その場で COUNT(*) する」リアルタイム集計だけで、履歴が残りませんでした。そのため「日別の投稿数推移」「ユーザーの増加」「フェデレーション活動の時系列」といった、Misskey のチャートに相当するものがありませんでした。

v2026.7.0 では、定期的にメトリクスのスナップショットを記録し、時系列として返す仕組みを追加しました。

  • Misskey 互換のエンドポイント: GET /api/charts/{users,notes,active-users,federation,drive}span=hour|daylimituntil
  • Admin ダッシュボード: サマリーカードと、依存ライブラリを足さない自前の軽量 SVG グラフで時系列を表示
  • 収集ジョブ: 1 時間ごとに各メトリクスをスナップショット

有効化は選択式(既定はオフ)

「軽くてどこでも動く」という Rox の方針に合わせ、この機能は オプトイン です。

# 既定はオフ。オンにすると収集とチャート API が有効化されます
CHARTS_ENABLED=true
# auto: timescaledb 拡張があれば自動採用、なければ素の PostgreSQL にフォールバック
CHARTS_BACKEND=auto

CHARTS_ENABLED=false(既定)のときは、収集ジョブも動かず API も無効で、従来と完全に同じ挙動です。

TimescaleDB は「4 つ目の DB」ではない

ポイントは、TimescaleDB を新しい DB_TYPE として足していないことです。TimescaleDB は PostgreSQL 拡張なので、DB_TYPE=postgres のまま動きます。

本サブシステムは chart_snapshots という 1 つの「長形式」テーブルを両バックエンド共通の読み取りモデルとして使い、TimescaleDB が検出された場合のみ、そのテーブルを hypertable 化し、圧縮(30 日)・保持(400 日)ポリシーを自動適用します。CHARTS_BACKEND=auto なら、拡張の有無を起動時に検出して自動で切り替わります。小規模インスタンスは素の PostgreSQL のまま、大規模運用者は TimescaleDB で効率化、という住み分けができます。

Docker Compose には任意の timescaledb プロファイルも用意しました。

デッキの操作性を改善

表示時に一瞬右へスライドする不具合を修正(rc.1)

デッキ(マルチカラム表示)を開いた瞬間に、内容が一瞬右へスライドして戻る現象がありました。横スクロールコンテナの scroll-smooth により、マウント時のスクロール位置補正がアニメーション化されていたのが原因です。横スクロールを即時に変更し、解消しました。

モバイルの横スワイプをネイティブ scroll-snap カルーセルへ刷新(rc.2)

モバイルのデッキは、これまで現在のカラム 1 枚を指でドラッグして指を離すと切り替わる、自前のタッチ処理でした。隣のカラムが指に追従して出てこないため、やや不自然な切り替わりになっていました。

rc.2 では、これを ブラウザネイティブの CSS scroll-snap カルーセルへ置き換えました。指追従・慣性・スナップ、そして「カラム内の縦スクロール」と「カラム間の横スワイプ」の軸ロックまで、すべてブラウザに任せています。横方向のオーバースクロールでブラウザの「戻る/進む」が誤発火しないようにもしています。結果として、ネイティブアプリのような滑らかな操作感になりました。

セルフホスター向け: コンテナイメージと Kubernetes 対応

今回から、バックエンド/フロントエンドの コンテナイメージを GHCR に公開しています(ghcr.io/love-rox/rox-backend, ghcr.io/love-rox/rox-frontend)。さらに、すぐ使える K3S / Kubernetes マニフェスト一式deploy/k8s/rox/ に同梱しました(namespace、クラスタ内 TimescaleDB、Dragonfly、nginx、マイグレーション用 init コンテナ付きバックエンド)。

実際に私たち自身の公式インスタンス(rox.love-rox.cc)も、この構成で ベアメタルから K3S + クラスタ内 TimescaleDB へ移行しました。新しいバージョンが出たら自動で更新が流れる運用にしています。これらのデプロイ追加は任意で、従来のインストール方法には影響しません。

アップグレードの注意

  • DB マイグレーション 0014 を含みますrc.1)。chart_snapshots テーブルの追加です。更新時は bun run db:migrate を実行してください。rc.1 → rc.2 では新規マイグレーションはありません。
  • 破壊的変更はありません。チャート機能は既定でオフです。
git pull origin main
bun install --frozen-lockfile
bun run db:migrate    # マイグレーション 0014 を適用
bun run build

おわりに

RC 段階なので、チャートまわりや新しいモバイルスワイプの感触など、フィードバックを歓迎します。安定版 v2026.7.0 に向けて仕上げていきます。

ご質問やフィードバックは GitHub Issues にてお待ちしております。

愛がロックする。Rox。 🚀