ゲームMODの手動導入は、ファイルの衝突、バージョン不一致、繁雑な作業により多くのユーザーが挫折している。本記事では、Degrees of Lewdity向けに設計された自動ビルドシステム「Lyra」のアーキテクチャと活用方法を解説する。
システム概要
Lyraは、複数の視覚・機能MODを指定の組み合わせで自動統合し、ZIP(PC/Web)およびAPK(Android)形式の配布パッケージを生成するビルドツールである。ビットフラグによる組み合わせ管理と並列処理を核とし、手作業での統合作業を排除する。
4段階のビルドワークフロー
フェーズ1: Prepare(資材調達)
ビルドに必要な基底ファイルを自動取得するフェーズ。
- 翻訳版ゲーム本体のフェッチ
- 追加機能モジュール(チート機能、CSD表示など)の取得
- ビルド環境の整備
- 初期パッケージ(ZIP/APK)の生成
フェーズ2: Warmup(資材展開)
並列ビルド時の競合を防ぐため、すべての視覚リソースを事前に展開する。
- DoL+画像セット(BESC、Hikari、Goose等)
- AUバリエーション(女性型/男性型/両性型)
- 固定ディレクトリへの一括展開
フェーズ3: Build(並行構築)
システムの中核となるフェーズ。マルチプロセスで複数の組み合わせを同時処理する。
- 50パターン以上の組み合わせに対応
- ZIP/APKの同時生成
- CPUマルチコアの活用
- 独立した作業空間による衝突防止
フェーズ4: Page(成果物出力)
ビルド完了後、ダウンロードページを自動生成する。
- 各バリアントの詳細説明
- 直接ダウンロードリンク
- 含まれるMOD一覧の表示
ビットフラグによる組み合わせ設計
各MODには一意のビット値を割り当て、OR演算で組み合わせを表現する。
| MOD識別名 | ビット値 | 内容 |
|---|---|---|
| BESC | 1 | コミュニティスプライト集 |
| Cheat | 2 | デバッグ/チート機能 |
| CSD | 4 | 戦闘ステータス可視化 |
| Sideview-BJ | 8 | BJ専用アングル |
| Sideview-KR | 16 | KR専用アングル |
| Sideview-Hikari | 32 | Hikari専用アングル |
| WAX | 64 | ボディテクスチャ改善 |
| Susato | 128 | キャラクターモデル差替 |
| UCB | 256 | 汎用戦闘UI美化 |
| Sideview-Goose | 512 | Goose専用アングル |
| AU-Female | 1024 | AU女性バリエーション |
| AU-Male | 2048 | AU男性バリエーション |
| AU-Androgynous | 4096 | AU両性バリエーション |
組み合わせ計算例
# BESC + チート機能
cfg = 1 | 2 # => 3
# BESC + チート + Hikari視点
cfg = 1 | 2 | 32 # => 35
# チート + Hikari視点 + AU女性型
cfg = 2 | 32 | 1024 # => 1058
クイックスタート
環境構築
git clone https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS
cd DOL-CHS-MODS
pip install -r requirements.txt
資材準備
# ゲームファイルと拡張MODの取得
python main.py prepare --tag v0.5.7.9-5.0.2a-0112
# 画像リソースの展開
python main.py warmup
ビルド実行
# 全組み合わせを8並列で構築
python main.py build --tag v0.5.7.9-5.0.2a-0112 --jobs 8
# ZIPのみ生成
python main.py build zip --tag v0.5.7.9-5.0.2a-0112
# APKのみ生成
python main.py build apk --tag v0.5.7.9-5.0.2a-0112
設定カスタマイズ
組み合わせルール
config/combinations.tomlで以下を定義可能。
- 推奨組み合わせの登録
- 必須MODの指定
- 互斥条件(同時選択不可)の設定
- 依存関係の定義
APKパッケージ設定
config/build.tomlで以下を変更可能。
- パッケージIDと表示名
- バージョン表記形式
- ミラーサーバーのURL
並列ビルドの最適化
| ハードウェア構成 | 推定プロセス数 | 概算時間 |
|---|---|---|
| 4Core / 4GB | 2 | 15〜20分 |
| 8Core / 8GB | 4〜6 | 8〜12分 |
| 16Core / 16GB | 8〜12 | 4〜6分 |
| 32Core / 32GB | 16以上 | 2〜3分 |
階層型隔離構造
workspace/
├── extract/
│ ├── zip/ # ZIPビルド専用
│ │ ├── 3/
│ │ ├── 35/
│ │ └── ...
│ └── apk/ # APKビルド専用
│ ├── 3/
│ ├── 35/
│ └── ...
パッケージ種別×組み合わせコードの完全分離により、同時ビルド時の干渉を防止する。
トラブルシューティング
| 症状 | 対処法 |
|---|---|
| ビルド失敗 | ネットワーク確認、Java 17+の確認、-vフラグで詳細ログ取得 |
| 速度低下 | --jobs調整、SSD利用、10GB以上の空き容量確保 |
| 新MOD追加 | features.tomlに2のべき乗で定義、combinations.tomlでルール設定 |
ダウンロードページの生成
python main.py page --tag v0.5.7.9-5.0.2a-0112 -o download.md
CI/CD連携例
name: Lyra AutoBuild
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: pip install -r requirements.txt
- run: |
python main.py prepare --tag v0.5.7.9-5.0.2a-0112
python main.py warmup
python main.py build --tag v0.5.7.9-5.0.2a-0112 --jobs 4
複数バージョンの一括構築
#!/bin/bash
targets=("v0.5.7.9-5.0.2a-0112" "v0.5.7.8-5.0.1a-0105")
for ver in "${targets[@]}"; do
echo "Building: $ver"
python main.py prepare --tag "$ver"
python main.py warmup
python main.py build --tag "$ver" --jobs 8
done
ミラーサーバー設定
config/build.tomlにカスタムURLを指定する。
[urls]
dolp_base = "https://mirror.example.com/dolp-master.tar.gz"
au_female = "https://mirror.example.com/AUfemale.zip"
利用者別のメリット
| 対象 | 得られる価値 |
|---|---|
| 一般プレイヤー | 手動作業不要、互換性保証、即ダウンロード即実行 |
| 上級ユーザー | 完全なソース公開、柔軟な組み合わせ定義、自動化による工数削減 |
| プロジェクト管理者 | CI/CD対応、バージョン追跡、拡張性の高い設計 |
プロジェクト構成
BUILD.md:詳細ビルド手順書lyra/:コア処理モジュールconfig/:各種定義ファイル
Lyraは単なるビルドツールではなく、MODエコシステムの持続可能な運用基盤として設計されている。ビットフラグによる柔軟な組み合わせ管理と、並列処理による高速ビルドを特徴とし、個人利用からコミュニティ配布まで幅広く対応する。