はじめに
約83%の作業時間削減を達成して開発効率がバク上がり
した話です。
デプロイ作業短縮前:約3時間(180分)
デプロイ作業短縮後:約30分
短縮率:約83%
主に削減できたのは、
・UE5ビルド切り替え
・ビルド
・ビルド完了後の手動アップロード
・ファイル配置
・GameLift更新
・SteamSDKへの配置作業
・Steamへのアップロード
などの操作を手作業でやらなければいけないし、毎回終わったかの進捗を確認していたためつらかった。
上記を短縮しましたので紹介します。
概要
・ue5の専用サーバーをAWSなどのクラウドにデプロイする手順が膨大
・さらにSteam経由でアプリをテストしているため、そこにも手間がかかる
・毎回、スクリプトの実行→ビルド待機→アップロードという手順を、すべての場所で繰り返していたため一回一回時間がかかり手作業で合計3時間ぐらいかかっていた。
・個人開発&何回もテストするため、デプロイ作業に時間をかけたくない
・実行したら放置でできるようにしたい
解決法
・PowerShellとshell scriptを書きビルドからデプロイまでをつなげた。
・ログにフェーズを混ぜて、どこの手順でエラーが発生しているか一目でわかるようにした。
・以下処理フローサンプル。(実際は各処理ごとのログが流れています。)
Write-Host "[1/5] プロジェクトファイルを再生成"
# GenerateProjectFiles.bat を実行
Write-Host "[2/5] Editor をビルド"
# Build.bat ProjectNameEditor Win64 Development を実行
Write-Host "[3/5] Linux Server をビルド"
# Build.bat ProjectNameServer Linux Development を実行
Write-Host "[4/5] Windows クライアントをパッケージ化"
# RunUAT.bat BuildCookRun -platform=Win64 を実行
Write-Host "[5/5] Linux 専用サーバーをパッケージ化"
# RunUAT.bat BuildCookRun -platform=Linux -server -noclient を実行
#!/usr/bin/env bash
set -euo pipefail
log "[PHASE 1] Prepare Server Artifact"
# LinuxServer の成果物を zip 化
log "[PHASE 2] Upload Artifact to S3"
# aws s3 cp で S3 にアップロード
log "[PHASE 3] Create GameLift Build"
# aws gamelift create-build で GameLift Build を作成
log "[PHASE 4] Wait Until Build READY"
# describe-build で READY になるまで待機
log "[PHASE 5] Write Terraform Override"
# 作成された build_id を Terraform 用 tfvars に書き込む
log "[PHASE 6] Terraform Apply"
# Fleet が最新の GameLift Build を参照するように更新
#!/usr/bin/env bash
set -euo pipefail
MODE="${MODE:-all}" # stage | upload | all
log "[PHASE 1] Resolve Steam ContentBuilder"
# Steamworks SDK の ContentBuilder パスを確認
log "[PHASE 2] Resolve steamcmd.exe"
# ContentBuilder 配下の steamcmd.exe を確認
log "[PHASE 3] Stage Client Build"
# Windows クライアントビルドを ContentBuilder/content にコピー
log "[PHASE 4] Run Steam App Build"
# steamcmd.exe から app_build.vdf を実行
log "[PHASE 5] Finish Steam Upload"
# Steam へのアップロード処理完了
上記の流れと一緒ですが文字だけで解説
uebuild
→ UE5のプロジェクト再生成
→ Editorビルド
→ Linux Serverビルド
→ WindowsクライアントPackage
→ Linux Server Package
awssetup
→ LinuxServer成果物をzip化
→ S3アップロード
→ GameLift Build作成
→ GameLift Build READY待機
→ Terraform apply
steamsetup.sh
→ Steam ContentBuilderの場所を確認
→ steamcmd.exeの場所を確認
→ app_build.vdfの場所を確認
→ WindowsクライアントビルドをSteamSDKのContentBuilder/contentへ配置
→ steamcmd.exeからapp_build.vdfを実行
→ Steamへアップロード
短縮しなかった部分
・Steamのダッシュボードからビルド切り替え
・公開(アップロード配信)
将来的な改善点
・多分、このフェーズごとにファイルをわけて、それをまとめて実行するやつを作ればもっとよくなります。
変えていない理由ですが、これで動くからいいやーになってます。
ゲーム開発に時間を割く関係上、本業ではないCI/CDに時間を割くのはもったいないと判断してます。
もちろん最終リリースがかなり近づいたら着手します。
未解決の謎
・クライアントビルド時だけ1回目だとエラーが発生するのに、何もせず2回目を実行するとビルドが通る。
エラー部分を見るとautomationツール関連だが、時間がないので調べられていない。
最後に
このデプロイ時間を短縮したゲームを開発しています。(ちょっと日本語おかしいかも)
現在はSteamストアページを公開しており、ウィッシュリスト登録のみ可能です。
興味があれば見ていただけると嬉しいです。
新感覚スーツケースデスマッチTPSシューター系ゲームです。