普段はWindowsで開発している自作のNeovimプラグイン群ですが、この度Linux (Fedora) への対応を行いました。
WindowsとLinuxではUnreal Engineのパス解決方法が異なり、少し調査が必要だったので、その過程と結果をまとめます。
そもそもの課題:Engineパスの自動取得
私のプラグインでは、.uprojectファイル内に記述されているEngineAssociationを元に、どのバージョンのUnreal Engineに紐づいているかを判別し、Engineのパスを自動で取得する仕組みを採用しています。
.uprojectには、以下のようにエンジンバージョンか、もしくは固有のIDが記録されています。
{
"EngineAssociation": "5.6"
}
Windowsの場合、このEngineAssociationと実際のインストールパスの対応はレジストリに記録されているため、それを読み解くことで簡単にパスを特定できていました。
しかし、Linux環境ではその情報がどこに保存されているのか見当がつかなかったため、実際にFedoraをインストールして調査するところから始めました。
LinuxでのEngineパス解決方法
LinuxにはEpic Games Launcherが存在しないため、Engineは公式サイトからダウンロードしたZIPファイルを解凍して配置します。
新しいプロジェクトを作成した後、ホームディレクトリ配下をUnreal Engineというキーワードで検索してみたところ、それらしきファイルを発見しました。
発見場所: ~/.config/Epic/UnrealEngine/Install.ini
ファイルの中身は、まさに探していた情報そのものでした。
[Installations]
UE_5.6=xxxx/xxx//Linux_Unreal_Engine_5.6.1
このように、EngineAssociationのキー(この場合はUE_5.6)に対して、Engineのインストールパスが記録されていました。
プラグインの対応
Engineパスの取得方法がわかれば、あとは簡単です。
- Windows用に作成していた
find_engine.batのLinux版 (find_engine.sh) を作成し、このInstall.iniを読み込むように修正。 - Lua側のエンジン検索モジュール (
finder/engine.lua) から、OSを判別して新しい.shスクリプトを呼び出すように変更。
これだけで、UEP.nvim, UCM.nvim, ULG.nvim といった主要なプラグインはあっさりと動作するようになりました。
UBT.nvim に関しては、dotnetコマンド経由でUBT.dllを直接呼び出してビルドする処理を.batで行っていたため、こちらも同様に.shスクリプトを作成することで、無事動作させることができました。
残った課題と今後の調査
基本的な動作は確認できましたが、2点ほど問題が残りました。
-
generateheaderモードの非対応
Windows版のUnreal Build Tool (UBT) にはmode=generateheaderというオプションが存在したのですが、Linux版ではエラーになってしまいました。これについては、UBTを介さずに直接Unreal Header Tool (UHT) を実行するように修正する必要がありそうです。 -
ushellの不在
今回ダウンロードした5.6.1のZIPには、コマンドラインから様々な操作ができるushellが含まれていませんでした。5.6.0には同梱されていた可能性もあるため、これは後日改めて確認してみようと思います。
まとめと今後の展望
普段は開発の都合でWindowsを使っていますが、やはりターミナルが強力なLinux環境は触っていて楽しいですね!
Apple Silicon搭載Macはメモリ搭載量の観点からまだ購入に至っていませんが、いずれはMacにも対応させて、クロスプラットフォームで快適なUnreal Engine開発環境をNeovim上に構築したいと考えています。
📝 今週のプラグイン更新情報
今回のLinux対応と合わせて、以下の機能修正・追加を行いました。
-
全体
- Linux環境への正式対応
-
UCM.nvim
- Sourceファイルから対応するHeaderファイルへのIncludeパスを修正 (
Private/Publicを除いた相対パスに)
- Sourceファイルから対応するHeaderファイルへのIncludeパスを修正 (
-
UEP.nvim
-
Refresh時のツリー表示の挙動を改善 - プロジェクトツリーに
.uprojectファイル自体も表示するように修正 -
Platformディレクトリ以下の.upluginを正しく解釈できるように修正 -
Programsディレクトリ以下の.uprojectおよび.upluginを内部的に解釈できるように修正(※ツリーにはまだ表示されません)
-
