LL-Fans を支える技術

ラブライブ!シリーズの楽曲について知りたいことがあった時に、LL-Fans が公開しているラブライブ!データベースを使って回答できることは多いです。例えば…
- 楽曲「Snow halation」が最後に披露されたのはいつのイベント?
- クリエイター「めんま」さんが作った他の楽曲は何?
このデータベースシステムの裏側では、情報を日々アップデートして正確な状態でお届けするために、様々な技術的工夫がされています。本記事では、LL-Fans の開発チームからその取り組みの一端をご紹介します。
【前提】技術スタック・使用ツール
はじめに、システムとしての LL-Fans の概要を簡単にご説明します。以下の表に、技術スタックと使用ツールを列挙してみました。様々なサービスを組み合わせてなるべく管理コストの低い形で運用しています。
バックエンド | Laravel (PHP) |
フロントエンド | Next.js (TypeScript) |
CI・CD | GitHub Actions |
インフラ | AWS |
ニュース記事管理 | microCMS |
プロジェクト管理 | Notion |
X投稿管理 | SocialDog |
コミュニケーション | Slack (プロプラン), Discord |
【工夫①】本番環境との差分確認画面
私たちは現在10人ほどのチームで活動しています。複数人でコラボレーションしながらの登録作業を円滑に行うために、システムでサポートしています。その一部を紹介します。
LL-Fans には、表に見えている本番環境とは別に、ステージング環境があります。ステージング環境には、データの追加・更新・削除ができる管理画面があります。
この管理画面を使って、セトリなどの登録作業を以下の流れで実施しています:
- 管理画面でステージング環境に対してデータを登録する
- Slack で他のメンバーにレビューを依頼する
- 他のメンバーはステージング環境で表示を確認してレビューする
- 最低1人以上の承認後、登録したデータを本番環境に反映する
4. で、反映しようとしている内容が想定通りであるかを確認できるように、差分確認画面があります。
この画面で差分を確認しないと本番環境にデータを反映できない仕組みになっているため、操作ミスや作業のバッティングなどによる意図しないデータ変更が混入しないようにできています。
この差分検知のアルゴリズムは、各テーブルごとに
- 反映元と反映先のテーブルをそれぞれPKでソートする
- PKが同じ行同士を突き合わせる
- 変更の区分(追加・削除・更新)ごとに表示を出し分ける
という流れになっています。
LL-Fans のデータの正確性を維持するために欠かせない仕組みの一つです。
【工夫②】妥協しないテーブル設計
ラブライブ!シリーズは今年で15周年を迎える作品で、その展開は多岐に渡っています。様々なシリーズの様々な展開を、データベース上で正確に表現するためには、テーブル設計が重要です。ここでは「アーティスト」のドメインを題材として、LL-Fans がどのように進化してきたかをご紹介します。
楽曲データベースのリリース初期(〜2021年ごろ)は、以下の要件を満たす形で「アーティスト」を仕様に落とし込めば十分でした。
- 要件① アーティストは複数のキャラクターから構成される
- 例:CYaRon!には千歌、曜、ルビィがいる
- 要件② あるキャラクターは複数のアーティストに所属し得る
- 例:千歌は Aqours にも CYaRon!にも所属している
- 要件③ キャラクターを担当するキャストが一人いる
- 例:千歌の担当キャストは伊波杏樹さん
LL-Fans のバックエンドは Laravel で開発していて、データの永続化には MySQL を使っています。一般的な RDB のモデリング手法に従ってデータを正規化しています。以下の図は、2021年ごろのアーティスト関連テーブルを抜粋したER図です。
しかし、その後シリーズの展開が進んだことによって
- キャストの交代やWキャストのために、一人のキャラクターに複数のキャストがいる
- 進級によって、アーティストの名義は同じだが構成するキャラクターが時期や楽曲によって異なる
という状況が生じました。つまり、それまでの仕組みではデータ上表現しきれないアーティストが登場したということです。これがもし一般的なシステム開発であれば、事前に情報を得た上で、影響調査や検証を重ねてから本番環境に改修版をリリースして構えておくものですが、LL-Fans がファンサイトである以上、残念ながらそのような進め方はできません。
このような事態は今後も継続的に発生すると予想していますが、私たちはあくまでデータの正確性を第一に考えて、既存の仕組みで無理やり対応するのではなく、都度テーブル設計を見直して迅速に対応することにしています。その結果、今のアーティスト関連のテーブル構成は以下のER図のようになりました。
一見複雑に見えますが、本当に必要な中間テーブルを用意することで柔軟な表現が可能になりました。以下は「スクールアイドルミュージカル」関連のアーティストの現在の登録内容の一部ですが、2021年当時のテーブル設計のままでは、これらを表現することは不可能であることが分かると思います。
このようなテーブル設計は、LL-Fans の開発チーム内でディスカッションやレビューを重ねて決めています。
まとめ
本記事では、LL-Fans の更新作業をサポートする技術的取り組みとして、差分確認画面の実装と、テーブル設計の方針について紹介しました。ファンがファンのために作るデータベースサイトの一つの事例として、参考になれば幸いです。
メンバー募集中
LL-Fans では運営メンバーを募集中です!
ラブライブ!が好きな仲間たちと一緒に「自分たちが必要としているものを自分たちで作る」経験は、エンジニアとしてとても楽しいです。また、本記事では技術的な観点にフォーカスして LL-Fans の裏側を紹介しましたが、もちろんエンジニアリング以外の領域でも、お力をいただきたい活動は多分に存在します。
ご興味のある方は お問い合わせ からご連絡ください。