🛠️

.uproject を右クリックせずに Visual Studio から直接 Generate Project Files する

2024/06/15に公開

はじめに

こんにちは。
みなさん元気に Generate Project Files していますか?

このコマンドは頻繁に使用しますがその都度 .uproject 右クリックするのがちょっと煩わしいですよね?
というわけで今回は Generate Project Files がちょっと楽になる方法を記載します。
(Windows 環境のみです)

Generate Project Files とは

今更説明する必要もないかとは思いますが。
Unreal Engine を C++ で開発している際に必ずお世話になるのが Generate Project Files のコマンドです。
cpp ファイルの追加や build.cs にモジュールの参照を追加したとき、あるいはチーム開発時にソース更新を行い他メンバーの変更が振ってきた際、それらをソリューションファイル( .sln ) に反映するために頻繁に使用します。

手順は簡単で .uproject ファイルの右クリックメニューから Generate Visual Studio Project Files をクリックするだけです。
クリックするだけ・・・、なんですが。

この .uproject の右クリックメニューは Windows11 だと その他のオプションを確認 をクリックしないと現れないようになっています。
しかも手が滑って隣の Launch game を押しちゃってあわあわする事もあったり。
そもそもエクスプローラーを開く機会がこの .uproject 以外にはほぼないというのも煩わしさを感じるポイントだと思います。

バッチファイルで Generate Project Files を実行

そんな煩わしい Generate Project Files をコマンドライン等から簡単に実行できないかなと情報を探していたら、フォーラムでとても便利なバッチファイルを作成してくださった方を発見しました。
https://forums.unrealengine.com/t/generate-vs-project-files-by-command-line/277707/18

バッチファイルの中身はこちらです。
(ほぼそのままですがちょっと手を加えさせてもらっています)

GenerateProjectFiles.bat
cd %~d0%~p0
setlocal
powershell -command "$uproject = Get-ChildItem "*.uproject" -Name; $bin = & { (Get-ItemProperty 'Registry::HKEY_CLASSES_ROOT\Unreal.ProjectFile\shell\rungenproj' -Name 'Icon' ).'Icon' }; $bin + ' -projectfiles %cd%\' + $uproject" | cmd.exe

このバッチは内部で PowerShell を使って

  • レジストリのパスを参照して UnrealVersionSelector.exe を実行する
  • その引数に .uproject のファイル名を引き渡す

という処理を行っています。

つまりこのバッチファイルはそのままプロジェクトのルートディレクトリに配置するだけでしっかり機能するようになっており、わざわざパスの修正などをせずとも どのプロジェクトでもそのまま実行できてしまう優れモノ というわけです。
すごい。簡単ですね。

まずはこのバッチファイルを GenerateProjectFiles.bat の名前で作成し .uproject と同じ場所に置いておきましょう。

ちなみにファイル名はお好きな名前でも良いのですが、この名前にしておくと UnrealVS からも使えて便利です。(後述)

さて、これで便利なバッチファイルの完成です。
さっそくエクスプローラーから bat ファイルをダブルクリック!
... だと全然楽にはなってないですよね。

というわけでこのバッチファイルを Visual Studio から直接実行する方法をいくつかご紹介します。

UnrealVS のツールバーから実行する (オススメ)

さて先ほどのバッチファイルの名称を GenerateProjectFiles.bat にしているのには理由がありまして。それは UnrealVS ツールバーの Refresh Projects ボタンからこのバッチファイルを実行できる ようになるからです。


 
UnrealVS というのは Epic さんが提供している Visual Studio の拡張機能です。
UnrealVS についての詳細やインストール方法などは 公式サイト をご覧ください。
https://dev.epicgames.com/documentation/ja-jp/unreal-engine/using-the-unrealvs-extension-for-unreal-engine-cplusplus-projects

その UnrealVS の Refresh Projects ボタンはプロジェクトルートにある GenerateProjectFiles.bat を実行するコマンドになっています。
GenerateProjectFiles.bat という名前は Epic からクローンしたエンジンソースをビルドする環境に含まれているバッチファイルの名称です。
つまりこのボタンは元々エンジンビルド用のプロジェクトファイルを生成するためのボタンなのかもしれません。

普通の unreal project 環境だとバッチファイルが無いので Refresh Projects ボタンはグレイアウトされて使用出来なくなっています。が、そこに GenerateProjectFiles.bat を配置するとボタンが使用可能になりバッチファイルを起動してくれるようになります。これがとても便利。

ショートカット登録もできます

このボタンの動作は UnrealVS.RefreshProjects というコマンドになっているのでキーボードショートカットに登録する事もできちゃいます。
ツール -> オプション から 環境 -> キーボード を選択、UnrealVS のコマンドを検索してお好みのショートカットキーを入力したら 割り当て ボタンで割り当ててください。

ここでは ctrl + P を割り当ててみました。
(ctrl + P には元々「印刷」が割当たっているけど、ここ10年以上はソースコードの印刷なんてする機会もなかったのでもういらないかなと)

これで Refresh Projects ボタンを押すか ctrl + P を押せば即座にプロジェクトファイルの更新ができるようになりました!
すごく楽ですね。

以降は UnrealVS をインストールしない方のために、ほかの方法でバッチファイルを簡単に起動する手順を紹介します。

コマンドプロンプトで直接バッチを実行

ご存じの方も多いと思いますが、Visual Studio では ctrl + @ を押すと 開発者用 PowerShell ウィンドウ が起動します。
カレントディレクトリが既にプロジェクトのルートになっているのでそのままサッと

> ./GenerateProjectFiles.bat

とコマンドを入力すればバッチファイルを起動できます。
この方法でもだいぶ楽にプロジェクトファイルの更新ができます。

外部ツールでバッチを実行

Visual Studio の外部ツールを自作してメニューバーからバッチファイルを実行する方法もあります。

ツール -> 外部ツール をクリックすると外部ツールウィンドウが開きます。
追加(A)ボタンを押して新しい外部ツールを追加したら各種設定を入力します。

プロパティ 備考
タイトル Generate Project Files お好みのタイトル
コマンド C:\Windows\System32\cmd.exe cmd.exe のパスを指定する
引数 /c "$(SolutionDir)\GenerateProjectFiles.bat"
初期ディレクトリ $(SolutionDir) プルダウンから ソリューションディレクトリ を選択
出力ウィンドウを使用 true 別ウィンドウが開かないので true がオススメ。

これでメニューバーの ツール 内に Generate Project Files という自作ツールが並び、いつでも実行できるようになります。

外部ツールが出来てしまえばあとはツールバーに追加するなりショートカットを追加したりと自由にカスタマイズできます。

ツールバーに外部ツールを追加する

作成した外部ツールをツールバーに登録してクリックしやすい位置に配置しましょう。
追加したいツールバーの右端のボタンからカスタマイズを選ぶか、あるいはツールバーを新規追加しても良いです。
配置したい場所の項目を選択して コマンドの追加(A) をクリックし、ツール から 外部コマンド* を選択します。

この時の 外部コマンド* の数値部分は外部ツールウィンドウに登録されているツールの表示順のインデックス( 1~) になります。
外部ツールウィンドウでツールの順序を変えてしまうとツールバーの内容も変更されてしまうので注意してください。

ショートカットキーで外部ツールを起動する

同様に外部ツールをキーボードショートカットに登録する事もできます。
ツール -> オプション から 環境 -> キーボード を開き、リストから 外部コマンド* を探して選択、ショートカットキー(P) にお好みのショートカットキーを登録して 割り当て(S) で適用できます。

(オマケ) VS Code でもバッチを起動したい

Visual Studio Code からでも task を登録する事で bat ファイルが簡単に起動できるようになります。
(VS Code は普段使用していないので詳しくありません。あくまでオマケという事で)

task を登録する

VS Code のメニューで 表示 -> コマンドパレット をクリックします。
上部に表示された検索ボックスに > を入力し タスク:タスクの構成 -> テンプレートから task.json を生成 を選択します。
作成された tasks.json に下記のようにタスクを登録します。

tasks.json
{
	"version": "2.0.0",
	"tasks": [
		{
			"label": "GenerateProjectFiles",
			"command": "GenerateProjectFiles.bat",
			"type": "process",
			"options": { "cwd": "${workspaceFolder}" },
		}
	]
}

これで GenerateProjectFiles という名前の task を実行する事で GenerateProjectFiles.bat が起動できるようになります。

task をショートカット登録する

同じく上部の検索ボックスに > を入力し キーボード と入力、キーボード ショートカットを開く(JSON) をクリックします。
作成された keybindings.json に下記のようにショートカットを登録します。

keybindings.json
// 既定値を上書きするには、このファイル内にキー バインドを挿入します
[
	{
		"key": "alt+p",
		"command": "workbench.action.tasks.runTask",
		"args": "GenerateProjectFiles",
		//"when": "editorTextFocus"
	},
]

"key" のショートカット指定はお好みで変更してください。
"when": "editorTextFocus" を有効にするとテキストエディタにフォーカスがある場合だけショートカットが効くようになります。こちらもお好みでどうぞ。

おわりに

  • 便利な GenerateProjectFiles.bat の作成方法
  • UnrealVS の refresh projects ボタンからバッチを実行する方法
  • 外部コマンドからバッチを実行する方法
  • VSCode の task からバッチを実行する方法

などをご紹介しました。
これらの設定でメニューやショートカットから即座にプロジェクトファイルを再生成する事が可能になります。

Git など Visual Studio からでも実行できるソース管理を使用している方であれば ソース更新、ソース追加、ビルドまでの一連の作業を Visual Studio から一度も離れずに実行する事ができてとても便利です。

あなたのプロジェクトでもこのバッチファイルを是非使ってみてください。

Discussion