こんにちは。今週も Neovim と Unreal Engine の連携プラグイン「UnrealDev.nvim」スイートのアップデート情報をお届けします。
今週は、プラグインの根幹となるファイルキャッシュの仕組みを大幅に見直し、それに伴う精度の向上と機能の強化がメインです。
🚀 全体的な改善
1. ファイルキャッシュの精度向上
これまで UEP/UDEV refresh で作成されるファイルキャッシュは、「Game」と「Engine」という大きなくくりでした。
今回のアップデートで、build.cs ファイルを解析し、モジュール単位でより正確なキャッシュを作成するように変更しました。
2. スコープ指定の細分化
キャッシュの精度が向上したことで、UEP files や grep, tree といったスコープを引数に取るコマンドで、より細かいスコープ指定が可能になりました。
- Game: プロジェクトのソースコード
- Engine: エンジン全体のソースコード
- Runtime: プロジェクトとエンジンのRuntimeに関するソースコード
- Editor: プロジェクトとエンジンのEditor(Runtime含む)に関するソースコード
- Full: プロジェクトとエンジンの全ソースコード
3. 依存関係フラグ (--deps-flag) の強化
スコープの改善に合わせ、これまで --all-deps と --no-deps の2択だった依存関係の指定を、以下の3種類に変更しました。
-
--shallow-deps(デフォルト): 直接の依存関係のみ -
--deep-deps: すべての依存関係 -
--no-deps: 依存関係なし
これらの指定は、スコープと deps-flag に対応する全てのコマンドで使用可能です。
4. パフォーマンス改善
これまでメインスレッドで行っていたヘッダーファイルの解析処理をワーカースレッドに移行しました。これにより、特にプロジェクトの解析時において、体感できるレベルの高速化が図れたと思います。
5. セットアップの軽量化(サブモジュールの選択的読み込み)
UnrealDev.nvim は UBT, UEP, UCM といった複数のサブプラグインを統合するスイートプラグインです。
今回のアップデートで、これらのサブプラグインを個別に初期化(setup)するかどうかを選択できる setup_modules オプションを UnrealDev.setup() に追加しました。
これにより、個別のセットアップをしたい場合と共通でセットアップしたい場合とで振り分けできるようになります
設定例:
UBT を共通セットアップをしない
{
'taku25/UBT.nvim',
cmd = { "UBT" },
dependencies = {
{ dir='taku25/UNL.nvim' },
},
opts = {
logging = {
level = "trace",
echo = { level = "OFF" },
notify = { level = "OFF", prefix = "[UBT]" },
file = { enable = true, max_kb = 512, rotate = 3, filename = "ulg.log" },
perf = { enabled = false, patterns = { "^refresh" }, level = "trace" },
},
},
}
{
'taku25/UnrealDev.nvim',
opts = {
setup_modules = {
UBT = false, -- UBT.nvim は個別にセットアップ
-- UEP, ULG, UCM, ULG は true (デフォルト) のため省略可能
},
}
}
setup_modules に指定しなかったモジュールは、デフォルトで全て true (読み込む設定)になっています。そのため、既存のユーザー様がこの変更のために設定を修正する必要はありません。
✨ 新規コマンド
1. UEP/UDEV enums
プロジェクト内の enums (列挙型) の一覧を表示し、選択した定義箇所へジャンプできるようになりました。
これは、内部的に enums の解析処理を追加したことで可能になりました。
UEP/UDEV goto_definition コマンドでも、enum の定義に飛ぶことが可能です。
2. UEP/UDEV config_files
プロジェクトのコンフィグファイル (.ini ファイルなど) の一覧を表示し、素早く開けるようになりました。
3. UEP/UDEV config_grep
コンフィグファイルのみを対象に Grep 検索を実行できるようになりました。
🛠️ 既存機能の変更点
1. UEP/UDEV tree
ファイル情報の取得精度が向上したため、デフォルト動作のスコープを runtime に変更しました。
2. クラスの移動・リネーム機能の強化
UCM move, UDEV move_class, UCM rename, UDEV rename_class などのクラス移動・リネーム系コマンドが強化されました。
クラスファイル(.h / .cpp)を移動またはリネームした際に、移動先の .cpp ファイル内のヘッダーインクルードパスと、"xxxx.generated.h" のインクルード記述が自動で更新されるようになりました。

🔗 UBT との連携強化
UBT/UDEV build! のような、ビルドターゲットを必要とするコマンドの連携を強化しました。
UEP がロードされ refresh によるプロジェクト解析が完了している場合、Target.cs を解析し、利用可能なビルドターゲットを正確に取得・表示できるようになりました。
UBT Config の追加
連携強化に伴い、UBT config に以下の設定項目が追加されました。
1. SDKの指定
iOS や Android など、特定のプラットフォーム向けSDKをインストールしている場合、以下のように設定することでビルドターゲットの候補として表示できるようになります。
-- UBT config
{
has_sdks = { "iOS", "Android" },
}
2. 最終プリセットのデフォルト化
プロジェクト毎に、最後に選択したビルドプリセットをデフォルトとして記憶するかどうかを指定できます。(デフォルト: true)
-- UBT config
{
use_last_preset_as_default = true, -- デフォルトtrue
}
この機能により、UEP と一緒に使うことで、初回起動時でもビルドプリセットを明示的に書かなくても、Telescope などからプリセットを選択してビルドを実行できるようになります。
📝 その他
UnrealDev.nvim の Wiki を作成しました
UnrealDev のリポジトリに Wiki ページを作成しました。
まだ情報が少ないですが、これから少しづつ内容を充実させていく予定です。
📅 今後の予定
UEP refresh の重い処理(後半部分)を最適化できたので、前半のプロジェクト解析部分も高速化したくなってきたのですが、なかなかうまくいかず苦戦中です。
次回は、この最適化と格闘しようかと思っています。
また、以前「先行宣言も自動化しよう」と書いていましたが、C++11以降は先行宣言を定義時にも書けるようになったことを思い出し、踏みとどまりました。
実装の複雑さに見合うメリットが薄いと判断し、この機能はオミット(実装しない)ことにしました。
雑談
GitHub のリポジトリの "Unique clones" を眺めていると、毎日数件ほどクローンされていることが分かり、ちょっと嬉しくなりますね。
やはり誰かに使ってもらえるというのは、開発者として大きなモチベーションになります。
その反面、0の日もあったりして「まだまだ認知度が低いなー」と感じたりもしますが、同時に「意外に nvim + UE で開発してる人もいるんだなぁ」と励みにもなっています。
では、また次回のアップデートでお会いしましょう!

