1. 目次
2. はじめに
大学にて、「大規模ソフトウェアを手探る」という実験で得た知見を後世に伝えようと思う。
実験の対象として選定した高機能エディタ Neovim に対し、全くの初心者による環境構築(インストールと設定)から始め、その構造を深く理解する目的のもと、最終的には導入したプラグイン本体のコードを直接編集するところまで実行した。
3. この記事で学べること
- NeoVimの良さ
- NeoVimの環境構築
- プラグインのさまざまな拡張方法
4. プラグインのコードの言語Luaについて
NeoVimのプラグインはluaという言語で書かれています。このluaという言語はC言語と親和性が高くなるように設計されており、大規模なC言語のプロジェクトに組み込むことで、高速性とカスタマイズ性を両立させることができるのが大きな特徴です。
使用される場面もさまざまで、ゲームのプログラムの中で、頻繁に書き換わる部分に使われていたり、NeoVimに限らずアプリのプラグインに使われていたりします。
文法はALGOL系のPascalに似ているそうです。Pascalは使ったことがなかったので、lua独自の書き方もあり、はじめ慣れるまでは大変でした。
5. 環境構築
6. 実装した機能一覧
6.1. nvim-tree.lua
6.2. copilot.lua
6.3. telescope.lua
6.4. copilotchat.lua
7. 今後の展望
今回のコマンド開発を通じて、Neovimの拡張性の高さと、それを制御する難しさの両面を学ぶことができた。
特に、既存のプラグインの完成度の高さを実感すると同時に、「自分ならこう作りたい」という希望を反映する楽しさを感じることができた。
これを踏まえ、今後の開発者としてのロードマップを以下に書く。
7.1.プラグインを1から実装する
今回の最終成果物は、既存のプラグイン をラップ(包含)する形での実装に落ち着いた。実用性を優先したが、開発者としてはゼロからシステムを構築する経験も必要だと感じている。
-
自作UIコンポーネントの完全制御
今回挑戦して断念した「差分表示のフローティングウィンドウ」や「インタラクティブな操作(y/n)」を、外部プラグインに頼らず自前のLuaコードだけで完結させたい。特にvim.api.nvim_open_winやバッファ管理のAPIを使いこなし、リッチで安定したUIを構築するスキルを磨きたいと思った。 -
プラグインとしてのパッケージングと配布
単なる設定ファイルの一部(lua/plugins/*.lua)ではなく、独立したGitリポジトリとしてプラグインを構成し、他のユーザーがlazy.nvim等でインストールできる形で公開することを目指す。これにはドキュメント作成や、汎用的な設定オプションの設計も含まれる。
7.2. neovimならではの良さを活かした開発をする
今回の開発の方向性は「VSCodeの機能をNeovimで再現する」ことを目指す物が多かったと感じているが、Vim/Neovimにはそれとは異なる独自の哲学がある。今後は、マウス操作やGUIに依存しない、Vimの言語としての強みを活かした機能開発を行いたい。
7.3. neovim内部のソースコードに踏み込む
今回の開発では、vim.schedule による描画タイミングの制御や、lazy.nvim によるモジュールの遅延読み込みなど、Neovimの内部挙動に関する知識不足がバグの原因となった。APIの表面的な利用にとどまらず、より深いレベルでの理解が必要だと感じた。
8. 終わりに
最後まで読んでくださってありがとうございました。
Neovimプラグインを使いこなして、より良いコーディングライフを!
