はじめに
約2週間ぶりのアップデートまとめです。
今回はパフォーマンス改善・新機能追加・バグ修正に加え、UnrealDev.nvim の思想から生まれた新しい汎用プラグイン vscode-workspace.nvim の紹介もします。
各プラグインは以下のリポジトリで公開しています。
- UnrealDev.nvim — 統合エントリポイント
- UNL.nvim — コアライブラリ(Rust スキャナー)
- UEP.nvim — プロジェクトエクスプローラー
- UBT.nvim — ビルドツールラッパー
- ULG.nvim — ログビューワー
- UNX.nvim — IDE ライクサイドパネル
- UCM.nvim — クラスマネージャー
🦀 UNL.nvim — コアエンジンの大幅強化
VCS 差分ベースの増分リフレッシュ
最も大きな改善のひとつです。これまで :UNL refresh は対象ディレクトリ全体を再スキャンしていましたが、Git / Perforce の差分情報を使って「変更されたファイルだけ」を再インデックスするようになりました。
数万ファイル規模のプロジェクトでも、ファイルを数十個変更しただけなら数秒でリフレッシュが完了します。
Perforce / SVN プロバイダー追加
VCS 履歴 API に Perforce と SVN のプロバイダーを追加しました。
UNL.vcs 経由のすべての操作(変更ファイル取得・履歴表示)が Git 以外の VCS でも動作します。
補完エンジンの強化
clangd に依存しない独自の型推論エンジンをさらに強化しました。
// for-range ループ変数の型推論
for (auto& Item : MyArray) {
Item. // ← Item の型が TArray の要素型として正しく推論される
}
// スマートポインタ .Get() の推論
TSharedPtr<UMyClass> Ptr;
Ptr.Get()-> // ← UMyClass のメンバーが補完される
// クラススコープの using エイリアス
class UMyClass {
using FMyType = TArray<int32>;
FMyType // ← FMyType が正しく解決される
};
また TArray のような UPROPERTY フィールドのメンバー補完、UPROPERTY/UFUNCTION マクロスペシファイア補完のバグ修正も行いました。
その他
- CPU / ディスク負荷削減 — Watcher のデバウンス最適化・冗長なスタートコールの短絡化
- get_classes_async — コルーチンベースの非同期クラス取得 API
- rescan_assets — アセットグラフの手動再スキャンコマンド
- GetFilesInFavoritePaths — サーバーサイドでお気に入りパスのファイルをフィルタリングする RPC
🔍 UEP.nvim — 検索・ナビゲーションの拡充
rename_symbol — シンボルリネーム
:UEP rename_symbol でクラス名・シンボルのリネームができるようになりました。 ヘッダー・ソースファイル間で一括置換します。
find_usage の自動モード検出
:UEP find_usage が goto_definition の情報から、型参照かメソッド参照かを自動判別するようになりました。 明示的にモードを指定しなくても、カーソル位置から適切な検索が走ります。
find_includers — 逆インクルード探索
:UEP find_includers で「このヘッダーを #include しているファイル一覧」をストリーミングで取得できます。 依存関係を把握するのに便利です。
copy_path 3種
:UEP copy_absolute_path " 絶対パス
:UEP copy_cwd_relative_path " cwd からの相対パス
:UEP copy_module_path " モジュールパス
クリップボードにパスをコピーする 3 種のコマンドを追加しました。
🏗️ UBT.nvim — ビルド体験の改善
ビルドサマリー通知
ビルド完了時に、エラー数・警告数・所要時間をまとめた通知が表示されるようになりました。
✅ Build succeeded in 1m 23s (0 errors, 3 warnings)
同時ビルド競合ダイアログ
すでにビルドが走っている状態で再度 :UBT build を実行した場合、確認ダイアログが正しく表示されるよう修正しました。
gen_compile_db 後に LSP 自動再起動
:UBT gen_compile_db 実行後、compile_commands.json が更新されたタイミングで LSP クライアントを自動再起動します。 手動で :LspRestart する必要がなくなりました。
📊 ULG.nvim — UBA ビルドトレース対応
UE5.7 の .uba ファイルを Neovim で読む
UE5.7 から UnrealBuildAccelerator が .uba というバイナリ形式でビルドトレースを保存するようになりました。 このバイナリを Rust でパースし、ULG.nvim で表示できるようになりました。
:ULG uba " 最新の .uba ファイルを即座に表示
:ULG uba! " Picker でファイルを選んで表示
検索対象は以下のディレクトリです:
- {project_root}/Engine/Programs/UnrealBuildTool/(ソースビルド / 組み込みエンジン)
- {project_root}/Saved/Logs/
- {engine_root}/Engine/Programs/UnrealBuildTool/(別インストールエンジン)
- %LOCALAPPDATA%\UnrealBuildTool\
quickfix 連携
:ULG quickfix でログバッファのエラー・警告を quickfix リストに展開できます。 :cnext / :cprev でエラー間をジャンプしながら修正できます。
その他
- adaptive polling — ファイルの変化率に応じてポーリング間隔を自動調整
- :ULG save — ログバッファの内容をファイルに保存
🗂️ UNX.nvim — エクスプローラーの使いやすさ向上
カレントバッファのハイライト
ツリー上で現在開いているファイルが強調表示されるようになりました。 どのファイルを編集しているか一目でわかります。
Recent Files セクション
uproject タブに「最近開いたファイル」のセクションが追加されました。
キー操作の強化
| キー | 動作 |
|---|---|
| ? | 設定中のキーマップを一覧表示(ヘルプウィンドウ |
| s/v | 水平 / 垂直分割でファイルを開く |
| D | コミット差分を表示 |
| Space | マルチセレクト(お気に入りフォルダ移動に対応) |
Favorites のサーバーサイドフィルタリング
お気に入りファイル一覧の取得を Rust スキャナー側で処理するようになりました。 大量のファイルがあってもレスポンスが速いです。
✏️ UCM.nvim — 親クラス Picker の非同期化
:UCM new で親クラスを選ぶ Picker が、コルーチンベースの非同期処理になりました。 大規模プロジェクトでも UI がフリーズしません。
🌿 tree-sitter-verse — Verse 言語パーサーの改善
UE6 で採用が進む Verse 言語 のパーサー開発が続いています。
- _callable_expression のリファクタリング
- インデント判定の精度向上(65テスト通過)
- コメント・属性・named node のハイライト改善
将来的には unl-scanner に統合し、Verse コードの補完・定義ジャンプ・診断機能を提供する予定です。
🆕 新プラグイン: vscode-workspace.nvim
UnrealDev.nvim の「プロジェクトエクスプローラー」の思想から生まれた、Unreal Engine に依存しない汎用ワークスペース管理プラグインです。
VS Code の .code-workspace に相当する機能を Neovim に提供します。
主な機能
複数ワークスペースフォルダの統合エクスプローラー 複数のディレクトリをひとつのエクスプローラーにまとめて表示できます。
Favorites — お気に入りファイル管理 ネストしたフォルダ構造・カスタムアイコン・再起動後も保持される永続化に対応。
Recent Files — 最近開いたファイル :CW recent で最近アクセスしたファイルを素早く開けます。
マルチセレクト + コピー/カット/ペースト Space で複数選択し、y / x / p でファイルのコピー・カット・ペーストが可能です。
プレビューウィンドウ ファイルを開く前にサイドプレビューで内容を確認できます。 ウィンドウの左右どちらにエクスプローラーがあっても、広い方に自動配置されます。
? キーマップヘルプ ? を押すと、現在の設定に基づいたキーマップ一覧がフローティングウィンドウで表示されます。
Picker 抽象層 Telescope / fzf-lua / snacks に対応した共通 Picker API を内蔵しています。
インストール(lazy.nvim)
{
"taku25/vscode-workspace.nvim",
config = function()
require("vscode-workspace").setup({})
end,
}
おわりに
UnrealDev.nvim は UE × Neovim という niché な組み合わせながら、着々と機能が充実してきました。 特に今回の VCS 差分リフレッシュ と UBA ビルドトレース対応 は、日常の開発フローに直結する改善です。
vscode-workspace.nvim は UE 以外の開発にも使えるので、ぜひ試してみてください。
フィードバック・PR はいつでもお待ちしています 🙌
