今週のアップデートは週半ばに投稿しましたが、今回はその後の開発の経過報告となります。
現在、私はNeovim用Unreal Engineプラグイン群 (UEP, ULGなど) のために、専用のエクスプローラープラグイン UNX.nvim (Unreal Neovim eXplorer) の開発を進めています。これは、nui.nvim を利用してゼロから構築しています。
これまでの課題:neo-tree への依存からの脱却
これまで、私のUnreal Engine関連プラグイン群で最も心に引っかかっていたのが、Tree View表示UIの全てを neo-tree に依存していた点です。
私は neo-tree を大変素晴らしいプラグインだと思っており、普段メインで使用しているファイラーとしても愛用しています。しかし、Neovim × Unreal Engineで開発されている、より多くの開発者に私のプラグイン群を使ってもらうためには、この「完全依存」が障壁となっていました。
依存の具体的な問題点
-
高い依存度と代替の不在:
neo-treeは「物理的なファイルツリー構造に縛られない表示」が可能な数少ないファイラーです。UEPの Tree Viewは 物理ファイルツリーに依存しない構造(論理構造)を表示するものであり、この要件を満たし、かつユーザーが拡張できるほぼ唯一のファイラーとしてneo-treeを採用せざるを得ませんでした。 -
重要なコマンドへの依存:
neo-treeは、UEPにおいて最も重要とも言えるUEP treeコマンドの動作に必須となっていました。 -
不必要なインストール要求:
一般的な開発環境において、ファイラーは一つあれば十分です。UnrealDev (UEP, ULG) を使うためだけに、ユーザーに対してneo-treeのインストールを強いることに抵抗を感じていました。 -
拡張性の制限:
neo-treeのAPIは強力ですが、UI自体を大幅にカスタマイズするなどの拡張は難しいという側面があります。特に今回、「一つのViewを上下に2分割して表示したい」という要望に対する解決策が見つからなかったことが決定打となりました。
💡 補足:Pickerの対応について
一方でPicker機能については、
UNLのバックエンドUIでラップすることで、telescope、fzf-lua、snacksなど複数のPickerに対応できており、ユーザーが好きなものを選べるように設計しています。(未対応のPickerもありますが、必要な機能が含まれていれば順次対応予定です。)
開発の動機:Riderの構造ViewをNeovimへ!
上記のような課題感から、新たに UNX.nvim の開発を始めました。
そして何より、**「Riderのような便利な構造View(Structure View)をNeovimにも持っていきたい」**という野望を叶えたくなったのです。
これまでのトリッキーな実装と、新たな挑戦
以前のUEPのTreeアーキテクチャでは、以下のような方式を採用していました。
- UEP側でルートツリーの構築を行います。
-
neo-treeでディレクトリが選択されたら、UEPがその子供の情報を構造化してneo-treeに渡します。 -
neo-tree側は渡された構造データを使ってTreeを構築します。
neo-tree は動的なノードの追加/削除が容易ではなかったため、内部で使われている nui.tree の構造を模倣するなど、非常にトリッキーな実装になっていました。
しかし、これは裏を返せば**「ViewとModelが分離している状態」**でもあったため、「これならUI部分を新規作成するだけでいけるのでは?」と思い立ちました。
とはいえ現実はそう甘くはなく、以下のような困難がありました。
-
ファイル操作: クラスファイルの作成、移動、削除、リネームなどは、
UCMが担当してくれるため問題ありませんでした。 - ディレクトリ操作: ディレクトリ周りの操作は自前で実装する必要があったため、かなり苦労しました。
-
UI制御:
nui.nvimでのタブ表示やViewの切り替え部分の実装も一筋縄ではいきませんでした。
✅ 現在の進捗
一応、基本的な動作ができるところまでは実装が完了しました。UEP、ULGなどの既存のプラグインとの連携も可能になっています。
このあたりの連携に関しては、UNL ライブラリ側で Provider Pattern と Subscription Pattern を実装して対応していたため、比較的スムーズに移行できました。
⚠️ 今後の課題
まだまだバグが残っている状況です。この三連休でどうにか形にして、正式にリリースしたいと考えています。
🚀 リリース後のメリット
UNX.nvim がリリースされれば、もう neo-tree-source をインストールしなくてもさくっと動くようになり、クラスの構造Viewが手に入ります。これにより、UnrealDev環境はより一層便利になるでしょう。
また、ソースとヘッダーの切り替えで対応できていないパターンや、細かいバグなども見つかっているため、この連休中に解決を目指します。
🎉 おまけ:AIのお墨付きをいただきました!
ちなみに、先日 ChatGPTやGeminiに「NeovimでUnreal Engineの開発をしたいのだけどおすすめある?」と尋ねてみたところ、UnrealDevが一番上に紹介されていました!
これには夜中に一人小躍りしてしまいました。コミュニティの認知が広まっていることを実感し、開発へのモチベーションがさらに高まりました。
以上、週半ばに出した今週のアップデートログに続く、現在の経過報告でした!
