WH40K ロスタービルダー 開発ログ(2026年3月)
このサイトの WH40K ロスタービルダーについて、2026 年 3 月に行った主要な改修をまとめておきます。
機能追加というよりは「ちゃんと動くようにした」系の修正が多い回でした。
保存ロスターをどのブラウザ・端末でも見られるように
いちばん大きな変更はここです。
もともと「保存ロスター」は localStorage(ブラウザのローカルストレージ)に保存していたので、
Chrome で保存したロスターを Safari で開いても何も表示されない、という状態でした。
自分でも「スマホで確認しようとしたら空だった」という経験をしていたので、ずっと直したかった問題です。
今回、ロスター保存のデータを サーバー(PostgreSQL)に保存 するよう変更しました。
これでどのブラウザ・端末からでも「保存ロスター」ページで同じ一覧が表示されます。
内部的には以下の変更を行いました。
- ロスター保存 API(
POST /api/wh40k/rosters)を常に DB 保存に変更 - ロスター一覧 API(
GET /api/wh40k/rosters)がすべてのロスターを返すよう変更 - ロスター詳細ページ(
/wh40k/rosters/[id])の編集ボタンも別ブラウザから機能するよう修正 - DB スキーマに
detachmentカラムを追加
⚠️ 移行時に、過去にローカルのみに保存されていたロスターは引き継げていません。申し訳ありません。
デタッチメント別のバトルライン表示
WH40K 10版では、デタッチメントによって「バトルライン扱いになる」ユニットが存在します。
たとえばスペースマリーンなら、デタッチメントによって Intercessors 以外のユニットがバトルライン扱いになるケースがあります。
ビルダー上では正しくバトルラインとして表示できていたのですが、
保存ロスターの詳細ページでは反映されていないという問題がありました。
原因は、ロスター詳細ページの初期データを DB から取得する際に detachment フィールドを渡し忘れていたことです。
あわせて、DB に detachment が保存されていない古いロスターについては localStorage から補完するフォールバックも入れました。
公式 PDF をもとにした日本語正式対応
今回のアップデートで、日本語訳の根拠を公式 PDF に統一しました。
GW が公式に発行している日本語版 PDF(Munitorum Field Manual v4.0 など)を精読し、
英語名との対訳表を整理した上でサイトのデータに反映しています。
これまでは独自の音写・意訳が混在していましたが、今後は公式表記を優先する方針です。
今回対応した主な項目は以下のとおりです。
- ユニット名:全陣営にわたって公式日本語名を照合・修正
- デタッチメント名:全陣営の公式日本語名を追加
- エンハンスメント名・コスト:全陣営分を公式 PDF に基づき更新
- インナーリ(Ynnari)表記の統一:これまで「イナーリ」と表記していましたが、公式日本語版に合わせ 「インナーリ」 に統一しました(14 箇所修正)
デタッチメント選択 UI・ロスター詳細ページ・ロスター一覧など、
日本語名が表示される箇所はすべて公式表記に揃っています。
共有 URL の短縮対応
以前の「共有 URL」はロスター全データを Base64 エンコードして URL に埋め込む方式だったので、
URL がとてつもなく長くなっていました(600 文字超えることもしばしば)。
今回、ロスターデータをサーバーの ShareLink テーブルに保存し、
短い ID だけで共有できるようにしました。
変更前: /wh40k/rosters/share?d=eyJuYW1lIjoiTXkgUm9zdGVy...(長い)
変更後: /wh40k/rosters/share/cm8xxxx(短い)
Prisma v7 への移行
地味に大変だったのがこれです。
データベース ORM の Prisma を v6 から v7 にアップデートしたところ、
schema.prisma での url 指定が廃止になり、
prisma.config.ts という新しい設定ファイルに移行する必要がありました。
あわせて、PostgreSQL アダプタ(@prisma/adapter-pg)をインストールし、
PrismaClient の初期化もアダプタを渡す形に変更しています。
seed スクリプト 5 本も同様に修正が必要でした。
移行自体は比較的シンプルでしたが、「エラーを見て→修正して→再実行」を
何往復かやることになり、地味に時間がかかりました。
まとめ
| 項目 | 対応内容 |
|---|---|
| ロスター共有 | localStorage → DB 保存に変更。クロスブラウザ対応 |
| バトルライン | デタッチメント別の表示を保存ロスター詳細にも反映 |
| 日本語正式対応 | 公式 PDF をもとにユニット名・デタッチメント名・エンハンスメント名を更新 |
| インナーリ表記 | 「イナーリ」→「インナーリ」に統一(14 箇所) |
| 共有 URL | 短縮 ID 方式に変更 |
| Prisma v7 | 設定ファイル・アダプタ移行 |
まだ [Crucible] ユニットの日本語名が積み残しですが、
全体的にかなり使いやすくなったと思います。引き続きちょこちょこ改善していきます。