0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Neovim x UE5】コンフィグ継承の可視化、親クラスジャンプ... などなど (Weekly Update 2025/11/28)

Last updated at Posted at 2025-11-28

はじめに

こんにちは、NeovimでUnreal Engine開発を快適にするために、狂ったようにプラグインを作り続けている者です。
最近はNeovimをUnreal Engine用のIDE(RiderやVS)に近づけるべく、様々な機能を開発しています。

今週は、UE開発者なら誰もが頭を抱える「コンフィグ設定(.ini)」を爆速で確認できる機能や、コーディング速度をブーストするナビゲーション機能などを追加しました。


⚠ 重要:1. Treesitter-unreal-cpp のアップデートについて

今回のアップデートを利用するには、この手順が必須になります。
Unreal C++の解析精度を上げるためにパーサーを更新しましたが、Treesitterの仕様上、リビジョン番号を手動で更新する必要があります。

AActor等のクラス解析、Symbols View、そして後述する Goto Super 等が正しく動作するために、以下の設定でプラグイン設定を上書きしてくださいWikiも更新済みです

 { 
   'nvim-treesitter/nvim-treesitter',
    branch = "main",
    config = function(_, opts)
      vim.api.nvim_create_autocmd('User', { pattern = 'TSUpdate',
        callback = function()
          local parsers = require('nvim-treesitter.parsers')
          parsers.cpp = {
            install_info = {
              url  = 'https://github.com/taku25/tree-sitter-unreal-cpp',
              -- 以前の 89f34... から以下のハッシュへ更新してください
              revision  = '67198f1b35e052c6dbd587492ad53168d18a19a8', 
            },
          }
          parsers.ushader = {
            install_info = {
              url  = 'https://github.com/taku25/tree-sitter-unreal-shader',
              revision  = '26f0617475bb5d5accb4d55bd4cc5facbca81bbd',
            },
          }
       end
     })
     -- (中略: インストール設定など)
  end
}

2. 【目玉機能】Config Explorerの実装: コンフィグ地獄からの解放

Unreal Engineのコンフィグ(.ini)システムは強力ですが、複雑怪奇です。
Engine/Config/Base.ini から始まり、プロジェクトの DefaultEngine.ini、さらにプラットフォーム固有の WindowsEngine.ini、果ては DeviceProfiles まで...。

「結局、このパラメータの最終値はいくつなんだ?」「どこで上書きされたんだ?」 と迷子になった経験はありませんか?
これを解決するために、Config Explorer を実装しました。

機能の特徴:

  • 階層表示: プロジェクトに関連する設定値を、プラットフォームごとにツリー表示します。
  • 継承の可視化: Default 設定だけでなく、Windows, Android, iOS などのプラットフォーム固有の設定、さらには Android_Low といったデバイスプロファイルの設定もマージして表示します。
  • 履歴追跡: あるパラメータが「どのファイルの何行目で、どう変更されたか(上書き、追加、削除)」の履歴を追跡できます。
  • ジャンプ機能: 履歴を選択すれば、定義元の .ini ファイルへ即座にジャンプできます。

20251128104534_rec_-convert.gif

↑ 実際のプロジェクトのiniを解析し、最終値とオーバーライド履歴を一撃で表示しています

3. Implement Virtual: オーバーライドの自動生成

C++で親クラスの virtual 関数をオーバーライドする際、ヘッダーファイルを行き来してシグネチャをコピペするのは面倒です。
RiderやVSにはある「Override function...」機能を、Neovimにも実装しました。

  • 現在のクラスの継承チェーンを遡り、オーバーライド可能な virtual 関数をリストアップ。
  • Pickerで選択するだけで、ヘッダーの宣言 (override 付き) をコードに追加し、.cpp側の実装コードをクリップボードにコピーします

udev_implement_virtual.gif

4. Goto Super Definition / Implementation

「この関数、親クラスではどういう実装になってるんだっけ?」と思った時、これまではgrepしたりLSPの階層表示を辿ったりしていましたが、これからは一発です。

  • :UDEV goto_super_def: 親クラスの関数定義(ヘッダー)へジャンプ。
  • :UDEV goto_super_impl: 親クラスの実装(ソースコード)へジャンプ。

カーソル位置の関数名を認識し、継承ツリーを賢く探索してジャンプします。

udev_goto_super.gif

5. Symbols View の最適化(遅延初期化)

プロジェクトが巨大化するにつれて、クラスや関数のシンボルツリー(Symbols View)の初期化コストが気になり始めていました。
今回のアップデートで、「表示が必要になった瞬間」に初めて解析・初期化を行うようにアーキテクチャを刷新しました。
これにより、Neovimの起動速度やファイルを開くレスポンスが大幅に向上しています。

6. Find Module: モジュール名の逆引き&コピー

Unreal C++を書いていると、「このクラスを使いたいけど、Build.cs にどのモジュールを追加すればいいんだっけ?」 となることは日常茶飯事です。

  • :UEP find_module: クラス一覧をピッカーで表示し、選択したクラスが所属するモジュール名(例: "Core", "UMG", "Niagara")を特定して、ダブルクォーテーション付きでクリップボードにコピーします。

あとは Build.csPublicDependencyModuleNames.AddRange 内にペーストするだけです。地味ですが、確実に時間を節約してくれます。
find_module.gif

7. その他の改善

細かいですが、痒い所に手が届く修正を行っています。

  1. UCM switch: Engine/Classes系のファイルパスに対応。
  2. UEP find_parents: UObjectに対応(継承ツリーが見やすくなりました)。
  3. UEP tree: Plugin内のプロジェクトファイルが非表示になってしまうバグを修正。
  4. UNL: INIファイルの解析機能追加、CPPパーサーの共通化など内部エンジンの強化。

おわりに

今週のアップデートで、Neovimがより便利な「Unreal Engine特化型IDE」に近づいてきました。
特に Config Explorer は、他の商用IDEでも標準ではなかなか見られない機能だと自負しています。

もし「便利そうだな」「応援してやろうかな」と思っていただけたら、ぜひリポジトリを覗いてみてください。
おかげさまでClone数は増えてきましたが、Star数がまだまだ少ないのが最近の悩みです(笑)。 Starをいただけると、次なる機能開発の励みになります!

[リポジトリへのリンク]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?