AI による翻訳
この記事は AI を使用して翻訳されました。翻訳は完全ではない可能性があります。もし間違いを見つけた場合は、修正のご協力をお願いします!
4月のアップデート:待った甲斐がありました
いつもより少し時間がかかってしまいました。お待たせして申し訳ありません!でも、その分かなり大きなアップデートになっています。数字で裏付けられた意味のあるパフォーマンス改善、より快適な初回体験、サイトの健全性を保つためのバックエンド作業、そして中国リージョンサポートの初公開ベータをお届けします。
パフォーマンス改善
tomomai を速くするために裏側でたくさんの作業をしてきましたが、その成果が出始めています。以下は改善前後の Largest Contentful Paint (LCP) の数値です:
| リージョン | 改善前 | 改善後 |
|---|---|---|
| 日本 | 808 ms | 432 ms |
| 香港 | 3,180 ms | 780 ms |
| 中国 | 3,208 ms | 2,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-react、recharts、date-fns、およびいくつかの Radix UI パッケージにoptimizePackageImportsを追加し、実際に使用されているアイコンやコンポーネントのみがバンドルされるようになりました。 - バンドルアナライザー:
@next/bundle-analyzerを組み込みました(ANALYZE=trueで有効化)。今後もこの改善を継続的に追っていけます。
新しい OG 画像
Discord や Twitter など、リンクプレビューが表示されるサービスで tomomai のリンクをシェアすると、空白のカードではなく、きちんとした画像が表示されるようになりました。
サイトの主要なすべてのセクションにカスタム Open Graph 画像を追加しました:

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

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

ホームページ

データベーストップ
OG 画像レンダラーは、レンダリング時に Google Fonts から取得する代わりに、ローカルにバンドルされたフォントを使用するようになりました。生成が高速になり、外部サービスに依存しなくなっています。
新機能:オンボーディングダイアログ
新規ユーザーがダッシュボードに突然放り込まれることはなくなりました。新しいオンボーディングフローは、3ステップのアニメーション付きダイアログです:
- ユーザー名の設定:リアルタイムの使用可否チェックと自動提案付きで tomomai のユーザー名を決めます。ここからプロフィールを公開するかどうかも設定できます。
- リージョンの選択:テーマ付きカードからリージョンを選びます。
- 完了:これで使い始めることができます。

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

ステップ 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 をよろしくお願いします!