Unity x SteamのCI上のデプロイで自動バージョン付与でバグトラッキング精度を向上する
GitHub Actionsを活用したUnity製アプリのSteamの自動デプロイ
前回の記事「Github ActionsでUnity製アプリをSteamにアップロードする」で、GitHub ActionsとGameCIを活用したSteamへの自動デプロイ環境を構築しました。この記事では、その環境をベースに、CI上でビルドごとに自動的にバージョン番号を付与し、バグトラッキングの精度を向上させる方法を紹介します。
CIでの自動バージョン付与
バグ報告を受けた際に、どのバージョンで発生したバグなのかを特定できると、問題の切り分けが効率的になります。GitHub Actionsでビルドする際に、Gitのコミットハッシュを利用して自動的にバージョン番号を付与することで、各ビルドを一意に識別できるようにします。
上記の画像のように、アプリケーション起動時にバージョン情報を表示することで、ユーザーからのバグ報告時に確実にバージョンを特定できます。また、展示会や試遊台などで複数のデバイスにデプロイしている場合にも、各デバイスのバージョンを目視で確認できるため、最新ビルドが正しくデプロイされているかを素早くチェックできます。このバージョン情報は、CI上でビルド時に自動的に生成・埋め込まれます。
前回の記事で紹介したGitHub Actionsの設定に、以下のようなバージョン付与の処理を追加します。
バージョンフォーマット
生成されるバージョン情報は以下のような形式になります:
Ver. 1.0.0 2025/10/10 17:02:58 2674fa9
-
1.0.0
: Gitタグから取得したバージョン番号 -
2025/10/10 17:02:58
: ビルドが実行された日時(JST) -
2674fa9
: コミットハッシュの短縮形(7文字)
この情報により、いつ、どのバージョンをベースに、どのコミットでビルドされたかを一目で把握できます。
GitHub Actionsの設定
name: Upload to Steam
on:
push:
tags: # タグ作成で自動発火
- '*'
jobs:
build: # Unity製アプリのビルドフロー
runs-on: ubuntu-latest
outputs:
buildVersion: ${{ steps.buildStep.outputs.buildVersion }}
artifactName: ${{ steps.buildStep.outputs.artifactName }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true # バージョンに含めるためにタグ情報も取得
- name: Set build version
id: buildStep
run: |
# 参照するコミットSHA
if [ "${{ github.event_name }}" = "pull_request" ]; then
EVENT_SHA="${{ github.event.pull_request.head.sha }}"
else
EVENT_SHA="${{ github.sha }}"
fi
# 最新タグを取得(タグがない場合は fallback)
if LATEST_TAG=$(git ls-remote --tags --refs origin \
| awk -F/ '{print $3}' \
| sort -V \
| tail -n1); then
BASE_VERSION="$LATEST_TAG"
else
BASE_VERSION="0.1.0"
fi
# JST日時
export TZ=Asia/Tokyo
DATE_JST="$(date +'%Y/%m/%d %H:%M:%S')"
# 短SHA(小文字)
if SHORT_SHA="$(git rev-parse --short "$EVENT_SHA" 2>/dev/null)"; then :; else
SHORT_SHA="$(echo "$EVENT_SHA" | cut -c1-7)"
fi
SHORT_SHA="$(echo "$SHORT_SHA" | tr '[:upper:]' '[:lower:]')"
# バージョンフォーマット ex.) Ver. 1.0.0 2025/10/10 17:02:58 2674fa9
FULL_VERSION="Ver. ${BASE_VERSION} ${DATE_JST} ${SHORT_SHA}"
echo "buildVersion=${FULL_VERSION}" >> "$GITHUB_OUTPUT"
# アーティファクト名は安全文字に置換(: / \ < > " | ? * を '-'、スペースは '_')
SAFE_VERSION="$(echo "$FULL_VERSION" | sed -E 's/[:\/\\<>\"|\?\*]+/-/g' | tr ' ' '_' )"
ARTIFACT_NAME="Build-${SAFE_VERSION}"
echo "artifactName=${ARTIFACT_NAME}" >> "$GITHUB_OUTPUT"
- uses: actions/cache@v3
with:
path: Library
key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
restore-keys: |
Library-
- name: Run the Windows build
uses: game-ci/unity-builder@v4
env:
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
with:
targetPlatform: StandaloneWindows64
unityVersion: 2022.3.62f2
versioning: Custom # SemanticVersion以外を指定するためにCustom指定
version: ${{ steps.buildStep.outputs.buildVersion }} # バグトラッキングのためのバージョン情報を指定
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ steps.buildStep.outputs.artifactName }}
path: build
deploy: # Steamへのデプロイフロー
needs: [build]
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download Artifact
uses: actions/download-artifact@v4
with:
name: ${{ needs.build.outputs.artifactName }}
- uses: game-ci/steam-deploy@v3
with:
username: ${{ secrets.STEAM_USERNAME }}
configVdf: ${{ secrets.STEAM_CONFIG_VDF }}
appId: ${{ secrets.STEAM_APP_ID }}
buildDescription: ${{ needs.build.outputs.buildVersion }}
rootPath: StandaloneWindows64
depot1Path: .
depot1InstallScriptPath: ./install_script.vdf
releaseBranch: ${{ github.event.inputs.environment }}
このように設定することで、以下のメリットが得られます:
- 一意なバージョン識別: Gitタグ、ビルド日時、コミットハッシュの組み合わせで各ビルドを一意に識別可能
- トレーサビリティ: コミットハッシュから該当のコミットを特定し、変更内容を即座に確認可能
- デバッグ効率の向上: バグ報告時にビルド日時とコミットを紐付けて、問題箇所を迅速に調査可能
- 展示会・試遊台での運用: 複数デバイスのバージョンを目視確認でき、最新ビルドのデプロイ状況を把握可能
GitHub Actionsでの実行
GitHub Actionsを実行すると、以下のように各ステップでバージョン情報が活用されます:
-
バージョン生成: Gitタグ、ビルド日時(JST)、コミットハッシュから
Ver. {バージョン} {デプロイ日時} {コミットハッシュ}
形式のバージョン文字列を生成 -
Unity ビルド:
versioning: Custom
とversion
パラメータにより、生成したバージョン情報をUnityビルドに埋め込み -
アーティファクト保存:
Build-Ver._{バージョン}_{デプロイ日時}_{コミットハッシュ}
形式でGitHub Actionsのアーティファクトとして保存 -
Steam デプロイ: Steamworksのビルド説明に
Ver. {バージョン} {デプロイ日時} {コミットハッシュ}
を含めてアップロード
これにより、Unity アプリ内、GitHub Actions、Steamworks の全てで同じバージョン情報を参照でき、バグ報告時にどのビルドで問題が発生したかを即座に特定できるようになります。
実行ログ | ビルド |
---|---|
![]() |
![]() |
注記: サンプルプロジェクトのGitHub Actionsでは、Steamworksに対象のプロダクトが設定されていないためデプロイステップでエラーが発生しますが、Steamworksに正しくプロダクトとDepotが設定されていれば、デプロイは成功します。ビルドステップでのバージョン付与の仕組み自体は正常に動作しています。
まとめ
この記事では、GitHub ActionsとGameCIを使ったUnity製アプリのSteam自動デプロイにおいて、Gitタグ、ビルド日時、コミットハッシュを組み合わせた自動バージョン付与の方法を紹介しました。
Ver. 1.0.0 2025/10/10 17:02:58 2674fa9
という形式でバージョン情報を自動生成することで、以下のような運用上のメリットが得られます:
- 一意性の確保: 各ビルドを一意に識別できる
- トレーサビリティ: コミットハッシュから変更内容を即座に追跡可能
- 効率的なデバッグ: バグ報告時にビルド日時とコミットを紐付けて調査可能
- 実機運用の支援: 展示会や試遊台で最新ビルドのデプロイ状況を目視確認可能
特に複数のブランチで開発を進めている場合や、頻繁にビルドをリリースする場合、また展示会などで複数デバイスを運用する場合に有効です。
今回の記事で紹介した実装は、前回の記事のサンプルプロジェクトSteamDeploySampleに含まれています。実際のGitHub Actionsの実行ログや設定ファイルも確認できますので、ぜひ参考にしてください。
Discussion