DoL-Lyra:自動化ゲームMODビルドパイプラインの設計と実装

ゲーム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識別名ビット値内容
BESC1コミュニティスプライト集
Cheat2デバッグ/チート機能
CSD4戦闘ステータス可視化
Sideview-BJ8BJ専用アングル
Sideview-KR16KR専用アングル
Sideview-Hikari32Hikari専用アングル
WAX64ボディテクスチャ改善
Susato128キャラクターモデル差替
UCB256汎用戦闘UI美化
Sideview-Goose512Goose専用アングル
AU-Female1024AU女性バリエーション
AU-Male2048AU男性バリエーション
AU-Androgynous4096AU両性バリエーション

組み合わせ計算例

# 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 / 4GB215〜20分
8Core / 8GB4〜68〜12分
16Core / 16GB8〜124〜6分
32Core / 32GB16以上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エコシステムの持続可能な運用基盤として設計されている。ビットフラグによる柔軟な組み合わせ管理と、並列処理による高速ビルドを特徴とし、個人利用からコミュニティ配布まで幅広く対応する。

タグ: DoL MODビルド Python ビットフラグ 並列処理

8月5日 09:42 投稿