今週も、日々の開発で「これが欲しかった!」と感じた機能を追加・改善しましたので、ご紹介します!
✨ 新機能
継承ツリーを瞬時に把握!:UEP find_derived
& :UEP find_parents
Unreal Engineでの開発は、クラスの継承関係を理解することが非常に重要です。今回のアップデートで、その調査がNeovim上で劇的に簡単になりました。
:UEP find_derived[!] [ClassName]
カーソル下のクラス名(または引数で指定したクラス)から、それを継承している全ての子クラスを一覧表示します。
virtual
関数をオーバーライドした際に「影響範囲はどこまで?」といった確認や、リファクタリングの調査が非常にスムーズになります。
!
付き(:UEP find_derived!
)で実行すると、最初にベースクラスを選択するピッカーが表示されるので、コード上にないクラスの継承関係もすぐに調べられます。
:UEP find_parents[!] [ClassName]
find_derived
とは逆に、カーソル下のクラスの親クラスをUObject
まで遡って一覧表示します。
「このクラスの親のvirtual
メソッドは何だっけ?」と思った時や、クラスの継承ツリー全体を俯瞰したい時に非常に便利です。こちらも!
付きで起点となるクラスをピッカーから選択できます。
Riderの自動インポートのように!:UEP add_include
クラス名はわかっているのに、どのヘッダーファイルをインクルードすればいいか思い出せない...そんな経験はありませんか?このコマンドがその手間を解消します。
カーソル下のクラス名を元に、必要な#include
ディレクティブを適切な位置に自動で挿入します。
-
ヘッダーファイル(.h):
.generated.h
のすぐ上に挿入 -
ソースファイル(.cpp): 既存の最後の
#include
文の後に挿入
!
付き(:UEP add_include!
)で実行すれば、インクルードしたいクラスをピッカーから検索して追加することも可能です。もうヘッダーファイルのパスを探して手入力する必要はありません!
gf
をUnreal Engine用に超強化!:UEP open_file
カーソル下にある#include
先のファイルを開く、Vimの標準機能gf
。とても便利ですが、Unreal Engineの複雑なパス構造ではうまく機能しないことが多々ありました。
:UEP open_file
は、UEP.nvim
がキャッシュしているプロジェクト全体の知識を使って、インクルードされているファイルをインテリジェントに検索して開きます。
以下のようにキーマップを設定すれば、標準のgf
を置き換えて、この強力なファイルオープン機能を手軽に利用できます。
-- init.lua や keymaps.lua などに記述
vim.keymap.set('n', 'gf', require('UEP.api').open_file, { noremap = true, silent = true, desc = "UEP: Open include file" })
🎨 UIとパフォーマンスの改善
-
:UEP tree
表示の改善- プロジェクトツリー表示時に、各プラグインが
Game
フォルダやEngine
フォルダの下に正しく配置されるようになり、Riderのような階層表示に近づきました。 - これまで表示されていなかった
Source/Programs
以下のファイルもツリーに含まれるようになりました。
- プロジェクトツリー表示時に、各プラグインが
-
:UEP files
の高速化
ファイル一覧表示を、内部キャッシュをフル活用する方式に見直しました。初回表示時に一瞬だけキャッシュを読み込みますが、2回目以降はほぼノータイムでファイルピッカーが開きます。⚠️ ファイルを追加・削除した際は、キャッシュを更新するために
:UEP files!
を実行してください。 -
UCM new
でのプレビュー機能
:UCM new
で親クラスを選択する際、各クラスのヘッダーファイルの中身をプレビューできるようになりました。これにより、どんなクラスなのかを確認しながら安全に継承できます。 -
Pickerが
snacks.nvim
に対応 (UNL.nvim
)
UIピッカーのバックエンドとして、snacks.nvimに対応しました。Telescopeやfzf-luaをインストールしていない環境でも、モダンなUIで操作できます。
🔧 設定と挙動の改善
-
engine_path
の直接指定に対応
UEP.nvim
とUSH.nvim
のopts
、またはプロジェクトルートの.unlrc.json
ファイルにengine_path
を直接記述できるようになりました。
これにより、レジストリなどからエンジンの場所を自動検出できない環境でも、プラグインが動作するようになります。(もしかしたら、これでMac OSでも動くようになるかも...?しれません!) -
:UEP cleanup
&:UEP purge
の挙動を明確化-
:UEP cleanup
: 現在のプロジェクトに関連する全てのキャッシュファイル(構造、ファイル情報など)をディスクから完全に削除します。 -
:UEP purge
: 特定のコンポーネント(Game, Engine, Plugin単体など)のファイルキャッシュのみを削除します。
キャッシュがおかしくなった際のメンテナンス性が向上しました。
-
-
:UEP refresh
の解析精度向上
プロジェクト構造を解析する内部ロジックを改善し、より正確にモジュールや依存関係を把握できるようになりました。
🐛 バグフィックス
-
:UEP cd
/:UEP delete
TelescopeをUIとして使用している際に、プレビューウィンドウでエラーが発生する問題を修正しました。
💬 おわりに
以上が今週の主なアップデート内容です。
使えば使うほど「あれも欲しい、これも直したい」という点が出てきますが、個人的にはLSPの補完が少し遅いと感じる時以外は、ほとんどNeovim上で快適に開発が完結するようになってきました。
ただ、ふと心の中に「これだけプラグインが増えると、最初に全部インストールするのが少し面倒に感じる人もいるのでは?」という気持ちが芽生え始めています。
もしかしたら、これら全ての機能を一つに統合した、巨大なUnrealDev.nvim
のようなプラグインを作った方が、コミュニティにとっては親切なのかもしれない...と考えたりもしています。
このプラグイン統合の件について、何かご意見(「分かれている方がいい!」「一つにまとめて欲しい!」など)があれば、ぜひこの記事にコメントいただけると嬉しいです。
もちろん、GitHubのスター🌟も開発の大きな励みになりますので、よろしくお願いします!