ベータ機能

データベース機能は現在ベータ版です。一部のデータは不完全または不正確な場合があります。

楽曲統計ちほー更新履歴
v2026.4

パフォーマンス改善、オンボーディング、そして中国リージョンベータ

4月アップデート(遅延):大幅なパフォーマンス改善、新しいオンボーディング体験、OG画像の刷新、中国リージョンのベータ版公開、ストレージ改善、そしてエイプリルフールフラグが復活。


AI による翻訳

この記事は AI を使用して翻訳されました。翻訳は完全ではない可能性があります。もし間違いを見つけた場合は、修正のご協力をお願いします!

4月のアップデート:待った甲斐がありました

いつもより少し時間がかかってしまいました。お待たせして申し訳ありません!でも、その分かなり大きなアップデートになっています。数字で裏付けられた意味のあるパフォーマンス改善、より快適な初回体験、サイトの健全性を保つためのバックエンド作業、そして中国リージョンサポートの初公開ベータをお届けします。

パフォーマンス改善

tomomai を速くするために裏側でたくさんの作業をしてきましたが、その成果が出始めています。以下は改善前後の Largest Contentful Paint (LCP) の数値です:

リージョン改善前改善後
日本808 ms432 ms
香港3,180 ms780 ms
中国3,208 ms2,522 ms

日本と香港では劇的な改善が見られました。中国はまだ理想よりも遅い状況です。これは Cloudflare R2 バケットへの接続速度が中国本土のトラフィックに最適化されていないことが原因です。中国向けのアセット専用 CDN を検討中で、次回のアップデートで他リージョンの数値に近づける予定です。

では、具体的に何が変わったのでしょうか?

CJK フォントのサブセット化

これが最大の改善ポイントでした。以前は、日本語・繁体字中国語・簡体字中国語で tomomai を表示するたびに、言語ごとに 4〜7 MB にもなる巨大なフォントファイルをまるごとダウンロードしていました。fonttools を使ったフォントパイプラインを再構築し、各 Noto Sans CJK フォント(JP/TC/SC)を 20 の unicode-range チャンクに分割しました。ブラウザは実際に画面に表示される文字の範囲だけを取得するようになり、不要な何千もの文字のために帯域を無駄にすることはなくなりました。

また、CJK フォントのプリロードも廃止しました。プリロードされるのは Inter(ラテン文字)のみになり、CJK フォントはロケールに応じてオンデマンドで読み込まれます。

バンドルの最適化

フォント改善に加えて、ネットワーク面でもいくつかの改善を行いました:

  • タブの動的ロード:重めのダッシュボードタブ(Stats、Recommendations、Export、History、Events、Recents、Developer、Albums)は、そのタブに切り替えたときにはじめてコードを読み込むようになりました。初期ページロード時にすべてを取得することはなくなりました。
  • ツリーシェイキングlucide-reactrechartsdate-fns、およびいくつかの Radix UI パッケージに optimizePackageImports を追加し、実際に使用されているアイコンやコンポーネントのみがバンドルされるようになりました。
  • バンドルアナライザー@next/bundle-analyzer を組み込みました(ANALYZE=true で有効化)。今後もこの改善を継続的に追っていけます。

新しい OG 画像

Discord や Twitter など、リンクプレビューが表示されるサービスで tomomai のリンクをシェアすると、空白のカードではなく、きちんとした画像が表示されるようになりました。

サイトの主要なすべてのセクションにカスタム Open Graph 画像を追加しました:

楽曲詳細 OG 画像

楽曲詳細 - ジャケット、楽曲名、アーティスト、難易度

プレイヤープロフィール OG 画像

プレイヤープロフィール - 表示名、レーティング、アイコン、リージョン

ホームページ OG 画像

ホームページ

データベース OG 画像

データベーストップ

OG 画像レンダラーは、レンダリング時に Google Fonts から取得する代わりに、ローカルにバンドルされたフォントを使用するようになりました。生成が高速になり、外部サービスに依存しなくなっています。

新機能:オンボーディングダイアログ

新規ユーザーがダッシュボードに突然放り込まれることはなくなりました。新しいオンボーディングフローは、3ステップのアニメーション付きダイアログです:

  1. ユーザー名の設定:リアルタイムの使用可否チェックと自動提案付きで tomomai のユーザー名を決めます。ここからプロフィールを公開するかどうかも設定できます。
  2. リージョンの選択:テーマ付きカードからリージョンを選びます。
  3. 完了:これで使い始めることができます。
オンボーディング ステップ 1 - ユーザー名

ステップ 1:ユーザー名の設定

オンボーディング ステップ 2 - リージョン

ステップ 2:リージョンの選択

従来の1フィールドのみのユーザー名ダイアログはなくなりました。すでにアカウントをお持ちの方には影響はありません。

テクニカル

中国リージョンベータ

中国リージョンのサポートをベータ版として公開します。CN ユーザーは、以下の2つの方法で tomomai を maimai DX データと連携できるようになります:

  • LXNS(落雪咖啡屋 maimai DX 查分器):OAuth ベースの連携で、パスワードの取り扱いは不要です。プレイヤープロフィールとスコアを同期します。最近のプレイデータとイベントデータはこのソースでは対応していません。
  • 独自の HTTP プロキシ:ネイティブの maimai アカウントを直接使用したいプレイヤー向けです。

CN サポートを適切に実装するには、バックエンドで大規模な構造変更が必要でした。メインのデータ取得コードは 2,100 行にも及ぶモノリスへと成長していました。リージョンごとに複数の取得戦略を適切にサポートするため、ドメイン別(player、songs、recents、albums、events)に整理された src/lib/maimai/ パッケージに整理し、それぞれに取得・解析・永続化の各モジュールを持つ構成にリファクタリングしました。これにより、新しいデータソースの追加と保守が大幅に容易になっています。

CN リージョンはベータ版であり、まだ粗削りな部分があるかもしれません。Discord でのフィードバックをお待ちしています。

ストレージ:プレイヤーアイコンを R2 へ移行

サイトの成長(2025年10月の月間約83スナップショットから2026年4月には月間2,190件超へ)に伴い、データベースのストレージ管理がますます重要になっています。

大きな効果があった改善のひとつが、プレイヤーのアバターアイコンをデータベース外に移動することでした。以前は base64 エンコードされた画像データとして Postgres に直接保存されており、1行あたり平均 36 KB で、同じアイコンがすべてのスナップショットに重複して保存されていました。アイコンを R2 オブジェクトストレージに移行することで(コンテンツアドレス指定により、同一のアイコンは一度だけ保存されます)、約 315 MB をデータベースから解放できます。本番環境でのマイグレーション完了後、データベースの合計容量は約 1,167 MB から約 850 MB に削減される見込みです。

これはあくまで第一歩であり、ユーザーベースの拡大に伴うストレージの増加に対応するためのプランも用意しています。

エイプリルフール 2026

4月1日の tomomai ai 体験に気づいた方はいますか?見逃してしまった方、もう一度体験したい方のために、エイプリルフールモードが切り替え可能なフラグとしていつでも有効にできるようになりました。フラグのオーバーライドから手動で有効にできるので、来年まで待つ必要はありません。


変更点についての議論や感想は Discord まで:https://discord.gg/jZqQHr3UDq

tomomai の翻訳にご協力いただける方はこちら:https://crowdin.com/project/tomomai

これからも tomomai をよろしくお願いします!

パフォーマンス改善、オンボーディング、そして中国リージョンベータ | tomomai