はじめに
前回は自作したUnreal Engine用Neovimプラグイン群の紹介をさせていただきました。
前回記事: Unreal EngineをNeovimのプラグインでコーディングする
今回は、これらのプラグイン群を実際にどのように使って開発を進めていくのか、具体的なワークフロー形式でご紹介します。
本記事で紹介するプラグイン群
- UEP.nvim: プロジェクト全体の情報管理とファイル操作の核
- UBT.nvim: Unreal Build Toolとの連携
- UCM.nvim: クラス(C++ファイルペア)の高速な作成・管理
- ULG.nvim: ビルドログの表示
- neo-tree-unl.nvim: UEプロジェクトの論理ツリー表示
🚀 ワークフロー
ステップ1: プロジェクトのインデックス作成 - 全ての基本
何よりもまず、Unreal Engineプロジェクトのルートディレクトリ(.uproject
ファイルがある場所)で、以下のコマンドを実行してください。
:UEP refresh
これは、プロジェクト内のモジュール構造や依存関係、ファイル構成などを解析し、キャッシュを作成する非常に重要なコマンドです。このキャッシュがあることで、後のファイル検索やビルドが爆速になります。
- 最初の実行: キャッシュがないため、プロジェクトの規模に応じて少し時間がかかります。気長に待ちましょう。
- 二回目以降: 差分のみをチェックするため、非常に高速に完了します。
refresh
コマンドの使い分け
GitやPerforceでブランチを切り替えたり、外部でファイルが大きく変更された可能性がある場合は、!
付きのコマンドを使い分けます。
-
:UEP refresh
: キャッシュファイルが存在しないコンポーネントのみ、新しくキャッシュを作成します。最も軽量です。 -
:UEP refresh!
: 各ファイルのタイムスタンプとハッシュ値を比較し、中身が変更されたものだけ更新します。Gitでブランチを切り替えた直後などにおすすめです。 -
:UEP refresh! --force
: キャッシュの破損が疑われる場合など、全てのチェックを飛ばして強制的に全キャッシュを再生成します。
一度インデックスを作成したプロジェクトは記憶されるので、次回からはNeovimを起動した直後に、どのディレクトリにいても以下のコマンドで一瞬でプロジェクトに移動できます。とても便利ですよ!
:UEP cd
ステップ2: コードの編集 - 目的のファイルへ一瞬で移動
キャッシュが作成されたので、コーディングを始めましょう。ファイルを開く方法は主に2つあります。
1. 論理ツリービューから開く (UEP tree
)
neo-tree
をインストールしている場合、UEPはIDEのソリューションエクスプローラーを超える、インテリジェントな論理ツリービューを提供します。
:UEP tree [--all-deps]
このコマンドは、依存関係の表示をその場で切り替えられます
-
デフォルト (
:UEP tree
):
現在のゲーム開発に直接関係する、最小限のモジュール(Shallow Dependencies)だけを表示します。これにより、余計な情報に惑わされず、コーディングに集中できます。 -
--all-deps
付き (:UEP tree --all-deps
):
Engineのコアモジュールなどを含む、全ての依存関係(Deep Dependencies)を再帰的に表示します。「この機能はエンジンのどこに繋がっているんだろう?」とプロジェクト全体を俯瞰したい時に非常に強力です。
このように、作業のコンテキストに応じて表示内容を動的に切り替えられるため、物理的なフォルダ階層をただ表示するよりも、目的のファイルに素早くアクセスできます。
2. ピッカーから高速に開く (UEP files
)
ツリー表示よりも、もっと素早くファイル名で検索したい場合はこちらです。
:UEP files [--all-deps]
プロジェクト内の全ソースコードやConfigファイルが一覧表示され、あいまい検索で目的のファイルに一瞬でジャンプできます。
ステップ3: ファイルの追加・削除・リネーム - UCMの真骨頂
Unreal Engine開発で地味に面倒なのが、.h
と.cpp
のペアを正しいフォルダに作成する作業です。UCM.nvim
は、このプロセスを劇的に高速化します。
:UCM new
このコマンドを実行すると、クラス名、親クラス、そして配置先のフォルダを順番に聞かれます。テンプレートに基づいて、_API
マクロやインクルードガードなどが完璧に記述されたファイルペアが瞬時に生成されます。
delete
, rename
, move
も同様に、ファイルペアを安全かつ高速に操作できます。
🔥 neo-tree
との連携でさらに高速に
neo-tree-unl.nvim
を使っている場合、ツリービュー上で以下のキーを押すだけで、これらの機能を呼び出せます。パス入力の手間が省け、まさにIDEのような感覚で操作できます。
-
a
: ファイルを追加 (UCM new
) -
d
: ファイルを削除 (UCM delete
) -
r
: ファイルをリネーム (UCM rename
) -
m
: ファイルを移動 (UCM move
)
ステップ4: ビルドとログ確認
コーディングが終わったらビルドです。UBT.nvim
がUnreal Build Toolを裏側で実行します。
:UBT build
!
を付けて:UBT build!
と実行すれば、ビルド構成(DebugGame
, Development Editor
など)をピッカーで選択することも可能です。
ビルド中のログや、過去のビルドログを確認したい場合はULG.nvim
を使います。
:ULG start
リアルタイムで流れるログを追いかけたり、エラー箇所をフィルタリングしたりできます。
ステップ5: 実行 - Neovimから直接起動
ビルドが完了したら、次は実行です。もちろん、IDEから起動することもできますが、UBT.nvim
を使えばNeovimから離れる必要はありません。
-
通常のエディタ起動:
:UBT run
最もよく使う、Unreal Editorを通常モードで起動するコマンドです。
-
プリセットを選択して実行:
:UBT run!
!
を付けるとプリセット選択のUIピッカーが起動します。ここでIsEditor = false
のプリセット(Win64DebugGame
など)を選べばスタンドアロンゲームが、IsEditor = true
のプリセットを選べばエディタが起動します。
ステップ6: Live Coding & リモートコマンド
Unreal EngineでのC++開発の強力な機能がLive Codingですが、デフォルトのショートカットキー Ctrl+Alt+F11
は、はっきり言って50%以下のキーボード使ってる私にとっては地獄
ULG.nvim
には、この問題を解決するリモートコマンド機能が搭載されています。
準備: Unreal Editor側の設定
この機能を使うには、まずEditor側で**Remote Control API
**プラグインを有効にする必要があります。(※お使いのUEのバージョンによって、Remote Execution
など少し名前が違うかもしれません)
これで準備は完了です。
実行: NeovimからLive Codingを叩く!
- Unreal Editorが実行中であることを確認します。
- Neovimで
:ULG start
を実行し、ログウィンドウを開きます。 - ログウィンドウの上で**
P
キー**を押すと、コマンド入力用のプロンプトが開きます。 - そこに
livecoding.compile
と入力してEnterを押せば、コンパイルが走ります!
stat fps
やstat unit
といった、おなじみのコンソールコマンドも同様に実行できます
🔥 キーマップでさらに高速化
この機能はAPIとしても公開されているため、キーマップに設定することで、さらに快適になります。
-- livecoding.compileを<leader>lcにマッピングする例
vim.keymap.set("n", "<leader>lc", function()
require("UNL.api").kismet_command("livecoding.compile")
end, { desc = "[L]ive [C]oding Compile" })
これで、ノーマルモードで<leader>lc
と打つだけで、いつでもどこでもLive Codingを実行できます。
ステップ7: LSPを賢く動かす - 自動化のススメ
clangd
のようなLSPを完璧に動作させるには、compile_commands.json
の生成と、Unreal Header Tool (UHT) による.generated.h
ファイルの生成が欠かせません。
これらの作業は、以下のUBT
コマンドで実行できます。
-
:UBT gencompiledb
:compile_commands.json
を生成します。 -
:UBT genheader
: UHTを実行し、ヘッダーファイルを生成します。
しかし、毎回これらを手で実行するのは面倒なので、UBT.nvim
には自動実行機能が備わっています。
UBT.nvim
のコンフィグでautomation
設定をtrue
にするだけで、:UCM new
でファイルを追加した際などに発生するUEP
の軽量リフレッシュイベントをトリガーに、これらのコマンドが自動で実行されるようになります。
-- UBT.nvimのsetup設定例
require("UBT").setup({
automation = {
-- UCMでファイルを追加/削除した時などに、自動でUHTを実行
auto_gen_header_after_lightweight_refresh = true,
-- UHTが成功したら、続けてプロジェクトファイルも生成
auto_gen_project_after_gen_header_success = true,
-- UEPの完全リフレッシュが完了したら、プロジェクトファイルを生成
auto_gen_project_after_refresh_completed = true,
},
})
この設定を有効にすれば、ただC++コードを書くことに集中するだけで、LSPの動作に必要な面倒な作業はプラグインが全て自動でやってくれます。
おわりに
ぜひNeovimでのUE開発体験を試してみてください!
フィードバックやコントリビューションやスターなどモチベめちゃアップするので、お願いします