技術 約10分で読めます

アイマスPがミリシタの「ありがサンキュー」をきっかけにバックエンド構成を推測した話

いけさん目次

アイマス界隈ではこないだ「ありがサンキュー10周年」というささやかな話題があった。

技術ブログで「ありがサンキュー10周年最高」と書いても誰にも刺さらないし、書く側にも特に面白くない。せっかくの節目に乗せて、長年それなりに安定運用されているミリシタのバックエンド構成を、公開資料から技術観点で推測してみる記事にする。

ありがサンキューとは

2016年4月17日の「THE IDOLM@STER MILLION LIVE! 3rdLIVE TOUR」幕張公演2日目で、声優の田所あずさが「Welcome!!」の曲前MCで「ありがとう」と言うつもりが「サンキュー」と言ってしまっただけの言い間違い。会場が大爆笑のまま即座に歌唱が続行された瞬間として記憶されていて、それから10年、ミリオン界隈で愛され続けているネタ。本人としては最高級の感謝表現みたいに持ち上げられるよりむしろ恥ずかしいやつだろうとは思う。

これが今年で10周年。アイマス自体は2005年(AC初代)から数えれば21年目、ミリオンライブ単体(モバゲー版)は2013年2月から数えれば13年目、そしてミリオンライブ! シアターデイズ(通称ミリシタ)は2017年6月29日リリースで、来年の夏に丸9年を迎える。

グリマス(モバゲー版ミリオンライブ)のサービス開始から触っているミリPなので、モバマスは初期だけ触ってインフレに耐えられず離脱、他のアイマス系タイトルとアーケードはほぼ未プレイ。なのでミリシタを軸に話す。

ミリシタの運用規模

「9年近く大きな障害なく回っている」というのが具体的にどのくらいの規模の話なのか、先に共有しておく。

  • リリース時点で765 ALLSTARS 13人 + ミリオンスターズ 39人 = 全52人体制
  • 事前登録100万人、サービス開始1ヶ月で390万DL
  • 2018年4月に「13人ライブ」、2019年12月に「39人ライブ」を実装
  • 周年ゲーム内イベントは1st(2018年6月)から8th(2025年6月「超々∞MUGEND@I!」)まで毎年連続開催、加えてミリオンライブ!ブランド10周年「Beyond @ Crossing!」(2023年2月)等も別途挟む
  • 周年リアルライブは1st(2014年中野サンプラザ)から続き、コロナ禍の中止やCOVID-19集団感染による振替を挟みつつ、12th(2025年10月 京王アリーナTOKYO)→ 振替11th(2026年3月 北九州メッセ)→ 13th(2026年5月 有明アリーナ予定)まで継続
  • 2023年10月にTVアニメ放送開始、2026年3月にOVA「アイドルマスター ミリオンライブ!〜いつか、真ん中で〜」Blu-ray発売
  • 2025年7月〜2026年7月で全52人ソロコレクション52週連続CDリリース企画進行中
  • 2019〜2022年に韓国語版・繁体字版が並走(海外版は2022年1月終了、日本版は継続)
  • 機能追加もコンスタント。グラビアスタジオ(2021/1)、シーズンパス(2021/7)、2人撮影対応(2022/5)、実写背景モード(2022/6)、レッスンルーム(2023/12)、AR対応(2024/2)、新ゲームモード「アイドルグランプリ」プロローグ体験版(2025/1)、新イベントシリーズ「BATTLE OF THEATER」開幕(2025/4)、8周年でPLv上限を999→2000に引き上げ(2025/6)

イベントと楽曲追加は毎月複数件ペースで回されており、これだけのコンテンツ更新を9年連続でやってなおインフラ起因の長時間停止がほぼ無い、というのが運用実績である。

ミリシタはなぜ落ちないのか

ミリシタの「全鯖停止」アナウンスはめったに出ない。直近で対比が分かりやすい例を挙げる。

2025年4月15日 16:40〜17:43、AWSの東京リージョン(apne1-az4)で主電源と二次電源が同時遮断される障害が発生し、プロジェクトセカイなどはこの時間帯に緊急メンテに入った。一方、ミリシタの公式X(@imasml_theater)には何のアナウンスも出ていない。

理由は単純で、ミリシタはAWSで動いていない。

答えは2017年に既に公開されている

ミリシタのリリース3か月後、2017年9月28日に開催された「第1回 Google Cloud INSIDE Games & Apps」で、バンダイナムコスタジオの保科一成氏が「ミリシタを支える GAE/Go」というタイトルで登壇している。スライドはSlideShareに29枚で公開されており、誰でも読める。

要点を抜き出すとこうなる。

コンポーネント内容
ランタイムGoogle App Engine Standard(1st gen)の Go ランタイム
データストアCloud Datastore
ログ集計・分析BigQuery
監視Stackdriver Logging / Monitoring(現 Cloud Logging / Monitoring)
負荷試験想定負荷の2倍で実施
実績リリース後6か月、構成変更なしでボット含む全負荷を自動スケールで吸収
規模秒間数千リクエスト、数百インスタンス

そして肝心のデプロイ。GAEには versions という機能があり、新バージョンを別途デプロイしておいてトラフィックを瞬時に切り替えられる。これでBlue/Greenデプロイ相当のゼロダウンタイムリリースを実現している。問題があれば即時ロールバック可能。

flowchart LR
    User[ユーザー端末<br/>Unity Client]
    LB[GAE Frontend<br/>auto-scaling]
    App[Goアプリ<br/>各バージョン<br/>Blue/Green切替]
    DS[(Cloud Datastore)]
    BQ[(BigQuery<br/>ログ・分析)]
    SD[Stackdriver<br/>Logging/Monitoring]

    User -->|HTTPS| LB
    LB --> App
    App --> DS
    App --> BQ
    App --> SD

Blue/Greenデプロイの効きどころ

GAEのversions切り替えは、新バージョンをデプロイしたあとトラフィック割合を 0% → 100% に切り替えるだけで完了する(gcloud app services set-traffic 一発)。問題があれば前バージョンに戻すのも同じく即時。

flowchart TD
    Dev[新バージョンv2を<br/>デプロイ]
    Stage[v2は受信ゼロで起動<br/>v1が100%受信中]
    Switch{トラフィック切替<br/>v1:0% / v2:100%}
    OK[正常稼働<br/>v2のみ受信]
    NG[即ロールバック<br/>v1:100% / v2:0%]

    Dev --> Stage
    Stage --> Switch
    Switch -->|問題なし| OK
    Switch -->|不具合検知| NG

メンテで全鯖を止めなくてもアプリ更新ができる。これがミリシタのアップデートで「メンテ時間が短い」「実質無停止」と言われている根拠。

アプリ本体の更新が少ないのにコンテンツが増える理由

ミリシタを長く触っているとうっすら気づくのが、アプリストア側のアップデート通知が来ていない期間でも、楽曲・衣装・新カードはどんどん追加され、新機能やイベント機能まで生えてくることがある、という挙動。

実際にはアプリ本体のアップデート(Ver 8.0.100が2025年8月、Ver 8.1.000が2026年4月16日配信など)も継続的に行われているので「完全に本体更新ゼロ」ではない。ただし運営側の更新頻度に対して、ストア更新の頻度はかなり低い。これはUnity製運営型ゲームでは定石の構成だが、ミリシタはその設計の徹底度がわかりやすい部類に入る。

実装の組み合わせは以下のようなものになる。

  • 楽曲・MV・衣装・3Dモデル・UIテクスチャはアプリと切り離してAssetBundleでCDN配信。ユーザー側の「データダウンロード」管理画面、楽曲単位のダウンロードはこの仕組み
  • イベント期間・ガチャ確率・報酬テーブル・キャラパラメータはマスターデータとしてサーバーから取得。クライアント側のスクリプトコードを変更しなくても挙動が変わる
  • アプリ内にコードを先行実装しておき、サーバーからのフラグで機能をON/OFFする「フィーチャーフラグ」方式
  • ライブ演出はTimelineとAssetBundleの組み合わせなので、新曲追加はアセット追加だけで完結

OS対応や本格的なUI改修・新ライブモード追加といったコアロジックを伴う変更はストアアップデートが必要になるが、それ以外の「日々のコンテンツ更新」と「中規模の機能追加」がストア経由を必要としない。結果としてユーザー視点では更新頻度の体感がかなり低くなる。

数少ない既知の障害事例

ゼロではない。検索で出てくる範囲は以下のとおり。

日付概要
2022年1月18日オートパス関連バグ。クローバー曲以外でもフルコン報酬が不正取得できる状態になり、緊急メンテで強制ログアウト
2022年9月29日iOS有償アイテム購入エラー。ただしこれはAppleのApp Store側障害でミリシタは関与せず
2024年1月7日 16:00「10回プラチナガシャ1日1回無料」の表示バグで、一部ユーザーが事実上無制限に無料10連を引ける状態に。運営はロールバックせず、1月10日に10連チケット1枚、1月17日に全ユーザー8枚で補填配布
2024年6月16日 13:40頃不具合確認のための緊急メンテ(詳細は非公表)

注目すべきは2024年1月のガシャ事故でロールバックを選ばなかった判断。Datastoreは強整合性のあるエンティティグループ単位で書き込みが進むため、特定時刻のスナップショット復元はゲーム全体にとってかえって被害が大きい(プレイ中のユーザーの正常な進行も巻き戻る)。ロールバックせず配布で帳尻を合わせるのは、現代の大規模ソシャゲ運用としては正解側の判断である。

大規模イベント時の謎エラー

周年ライブ連動や周年特殊イベントの瞬間にだけ「通信エラー」「再接続してください」が一瞬出ることがある。公式アナウンスは出ないか、出てもあっさりした「一時的にアクセスが集中していました」程度に留まる。

公開情報がないので以下は推測になるが、典型的な原因として考えられるのは三つある。

ひとつめはDatastoreのホットスポット。ランキング・スコア集計のように同じエンティティグループへ書き込みが集中するパターンで、Datastoreは1エンティティグループあたり毎秒1回の書き込みが目安と公式ドキュメントに明記されている。

ふたつめはCron実行スパイク。イベント開始ジョブと既存トラフィックが重なってインスタンス起動が間に合わないパターン。

みっつめはCDNのコールドスタート。イベントバナー・楽曲アセットの一斉ダウンロードでCDNがウォームアップ前に押し寄せるパターン。

バンナムのインフラ戦略

バンナムは2016年からGoogle Cloudを活用していると公式ブログで明言している。

タイトルスタック・用途
鉄拳8(2024)GKE + Cloud Spanner + Diarkis(リアルタイム通信)でグローバルマッチング基盤
ミリシタGAE Standard 1st gen + Go(前述)
アイドルマスター スターリットシーズンGCP活用事例として公開
アーケード向けログ収集AWSサーバーレス(CEDEC 2019、2022で登壇)

一方でバンダイナムコホールディングス全体の基幹システムは、2017年8月にAWSへ全面移行している(cloudpack/iret支援、TCO約3割削減)。

データ基盤を担うバンダイナムコネクサス(旧BXD、2021年商号変更)はGCP中心で、BigQueryをDWHに、Dataflow + Cloud Composer / TROCCO、IaCはTerraform Cloud + GitHub Actionsという構成をZennで公開している。

バンナムはゲームサーバー寄りのワークロードをGCP、エンタープライズ系をAWSというマルチクラウドで使い分けている。ミリシタがGAEなのは、この大方針の中の自然な選択肢である。

ちなみに2026年3月12日にはBANDAI NAMCO IDがPasskey対応を開始している。生体情報は端末内保持でバンナム側へ送信されない設計。認証基盤は別途継続的に刷新している。

ENZA関連の補足

調べる過程で面白かったので補足する。シャニマスきっかけで名前だけ知っていたブラウザゲーム基盤「ENZA」の出自は次のとおり。

  • 2017年にバンダイナムコ + ドリコムの合弁「BXD」(BNEI 51% / ドリコム 49%)が運営開始
  • 2020年3月、BNEIがドリコム株式を全取得して完全子会社化
  • 2021年3月にバンダイナムコネクサスへ商号変更
  • ENZA上のシャニマスはHTML5ブラウザ + PIXI.js + Spine + pixi-particles 構成(CEDEC 2018で公開)

学園アイドルマスター(学マス)はまた別で、サイバーエージェント子会社のQualiArtsとの共同開発、Unity 2022.3.21f1のネイティブアプリ。ENZAではない。

アイマス系のゲームはタイトルごとに開発体制も技術スタックも分かれていて、ミリシタは「バンナムスタジオ社内開発・GAE/Go」という比較的素直な構成に位置付けられる。

クライアント側「AKANE大作戦」

サーバー側だけでなくクライアント側にも触れておく。Unite Tokyo 2018で登壇された「AKANE大作戦」は、13人ライブを成立させるための最適化プロジェクトである。

命名の経緯はスライド末尾で公式に明かされている。2017年正月に高速化着手 → 当時の干支「酉」→ 字形連想で「西」→「茜」と展開して「AKANE大作戦」になり、そこに後付けで「Android Kousoku-ka And NativE-ka」のバクロニムを当てはめた、という洒落のきいた話だ。公式説明は「酉→茜」のラインだが、ミリオンライブには野々原茜というアイドルが実在する。命名側がこの掛け言葉を意識していなかったとは考えにくい。

スライドからの事実は以下のとおり。

項目内容
ポリゴン数約10,000/キャラ、衣装テクスチャ1024×1024
解像度ベース1280×720(4:3端末は960×720)、旧端末はMSAAつき低解像度モード
SubMesh統合衣装・スパンコール・肌・カラーを結合し、ドローコールを44から36に削減
ポストエフェクトCommandBufferベースで軽量化
シェーダー独自実装
方針ビジュアル品質は下げない、アセットの作り直しを回避

3DライブはMVではなくクライアント側Unityでのリアルタイム描画で、モーキャプは MotionBuilder で補正→3ds Maxでアニメーションという流れ(CGWORLD連載より)。


ありがサンキュー10周年で言うことではないが、インフラがおとなしいというのは技術的にはちゃんと褒めポイントだ。サーバーがほぼ落ちないからこそ、ユーザーは毎回安心してイベントを走れる。

ところでミリシタの名刺置いときますね。

ミリシタの名刺