0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【UE5】オンラインゲームのデプロイ作業を3時間→30分に短縮した話【Steam / AWS GameLift】

0
Posted at

はじめに

約83%の作業時間削減を達成して開発効率がバク上がり:hugging:した話です。

デプロイ作業短縮前:約3時間(180分)
デプロイ作業短縮後:約30分
短縮率:約83%

主に削減できたのは、
・UE5ビルド切り替え
・ビルド
・ビルド完了後の手動アップロード
・ファイル配置
・GameLift更新
・SteamSDKへの配置作業
・Steamへのアップロード

などの操作を手作業でやらなければいけないし、毎回終わったかの進捗を確認していたためつらかった。
上記を短縮しましたので紹介します。

概要

・ue5の専用サーバーをAWSなどのクラウドにデプロイする手順が膨大
・さらにSteam経由でアプリをテストしているため、そこにも手間がかかる
・毎回、スクリプトの実行→ビルド待機→アップロードという手順を、すべての場所で繰り返していたため一回一回時間がかかり手作業で合計3時間ぐらいかかっていた。
・個人開発&何回もテストするため、デプロイ作業に時間をかけたくない
・実行したら放置でできるようにしたい

解決法 :keyboard:

・PowerShellとshell scriptを書きビルドからデプロイまでをつなげた。
・ログにフェーズを混ぜて、どこの手順でエラーが発生しているか一目でわかるようにした。
・以下処理フローサンプル。(実際は各処理ごとのログが流れています。)

uebuild.ps1
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 を実行
awssetup_dev.sh
#!/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 を参照するように更新
steamsetup.sh
#!/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ツール関連だが、時間がないので調べられていない。

最後に :sunglasses:

このデプロイ時間を短縮したゲームを開発しています。(ちょっと日本語おかしいかも)
現在はSteamストアページを公開しており、ウィッシュリスト登録のみ可能です。
興味があれば見ていただけると嬉しいです。
新感覚スーツケースデスマッチTPSシューター系ゲームです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?