こちらはABEJAアドベントカレンダー2024の25日目の記事です。
こんにちは!システム開発部の合屋(ごうや)です。 日々の開発で今年も様々なツールにお世話になっておりますが、近頃はPCのリソースが不足し、日々悩むようになってしまいました。
特に問題になっているものは Visual Studio Code (VSCode)周りです。 便利にしようと膨大なプラグインを入れてしまい、起動に時間がかかるうえ、リソースをふんだんに使うように…。
エラーや型ヒント、自動補完などは嬉しい。 けれども、起動が遅かったり、動作がカクついたりとストレスフルなのも避けたい。 素敵な方法を探しにインターネットを彷徨っていると NeoVim (Vim) を薦められました。
もちろん上記の問題は VSCode やその他のツールの設定見直しなどで、解決できるかもしれません。 しかし、せっかくなので今回は NeoVim を試してみました。
NeoVim 周りの情報整理
Vim と聞けばエンジニア関係の方はなんとなくご存じだと思われます。 一方で NeoVim となると、私は正直なところ「Vim の亜種?」ぐらいの認識でした。
改めてどういったものかを Arch Linux の wiki から引用すると
Neovim は、コードベースの改善を目的とした Vim のフォークであり、API の実装を容易にし、ユーザーエクスペリエンスとプラグインの実装を向上させます。(出典: https://wiki.archlinux.jp/index.php/Neovim)
という説明でした。 加えて先人の方たちのブログ記事などを参考にすると、年々 Vim と NeoVim の乖離が進んでいるようです。
Vim と NeoVim のどちらを選ぶかは大きな分岐点のようです。 今回はいわゆるスターターキットの利用ができるため NeoVim の使用を選択しました。
VIM Adventures による学習
少し話がそれますが、NeoVim + スターターキットの使用の前に基本的な操作の学習をしました。
スターターの利用などで環境を簡単に構築できるものの、操作方法は覚えなければなりません。 NeoVim を使用するにあたり、私にはベースとなるものがなかったため VIM Adventures による学習を行いました。
もしこちらの記事を読んで頂き、Vim or NeoVim にご興味を持たれましたら、ぜひ触ってみてください! こちらの VIM Adventures はゲームのように作られていますが、操作方法は Vim に対応するような内容になっているため雰囲気を味わえると思います。
スターターキットの利用
先述の説明のように、NeoVim ではプラグインを使うことにより LSP の使用や検索機能の強化などを行えます。 通常はプラグイン探しをしたり、プラグインの管理をするためのマネージャー探したりすることが必要です。 このカスタムが NeoVim の楽しみの1つでもあると思われます。
しかし、まず使ってみないことには「プラグインで何ができるようになるのか。選定をするためにどこを見るべきか。」といった勘所のようなものは掴めません。
数年前はこのハードルを理由に使用を断念していました。 「結局、最初はどれを使えばいいの?」と悩んでいましたが、初学者のために作られたスターターキットに出会いました。 それが LazyVim です。
こちらの LazyVim は NeoVim を使用するにあたって、カスタムを提供してくれるものでした。
LazyVim のインストールだけではシンプルなセットアップがされたプラグイン + 設定しか入りません。 ある程度の機能でプラグインをまとめつつ、使用者が追加したいものを選ぶことでインストールまでやってくれる機能を提供してくれます。 「Python 用のプラグインセットを入れる、Copilot 用のプラグインセットを入れる。」といった具合に選択をしながら環境を作ることが可能になっています。
似たようなプロジェクトとしては
- NvChad
- AstroNvim
- LunarVim | LunarVim
- GitHub - nvim-lua/kickstart.nvim: A launch point for your personal nvim configuration
がありますが、今回は
- スターターキットのように、初心者向けのベースを作れる
- 必要な機能などを選択することで、追加でやりたいことを加えられる
- LazyVim の設定更新が活発なため、メンテナンスの面でも安心
ということもあり、今回は LazyVim の使用を決めました。
その他の選択肢
上記とは少し方針が異なりますが、coc.nvim というプラグインも初心者向けとお薦めされました。 こちらのプラグインでは coc extensions というものを使用し、VSCode のように json ファイルで拡張機能の設定をすることが可能のようです。
スターターキットのように便利である一方、基本的には coc extensions の利用がメインです。 そのため「NeoVim がどういったものか感じてみたい」という部分で選択をしませんでした。
ただ、とりあえず使ってみるというニーズの部分を大きく叶えてくれるため、お薦めされる理由がとても分かるプラグインでした。 (調査段階での情報ではあります)
インストールなどセットアップ
ここまで長々と下準備をしておりましたが、いよいよインストールです。 当然ながら NeoVim をインストールしますが、LazyVim の要求として
- Nerd Fonts
- fzf
- ripgrep
- fd
- lazygit (optional)
が必要とされます。
今回は macOS で使用するため、以下のコマンドで各種インストール + LazyVim のセットアップが完了しました。 実際にインストールされる際は、各種公式サイトで最新の情報をご確認ください。 また、Nerd Fonts については一例として Noto Nerd Font を使用しています。
# ツールのインストール $ brew install neovim fzf fd ripgrep lazygit $ brew install --cask font-noto-nerd-font # LazyVim のセットアップ $ mv ~/.config/nvim{,.bak} $ git clone https://github.com/LazyVim/starter ~/.config/nvim
また LazyVim 公式 HP の方では、Docker でお試しするコマンドとして以下が提示されています
$ docker run -w /root -it --rm alpine:edge sh -uelic ' apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update git clone https://github.com/LazyVim/starter ~/.config/nvim cd ~/.config/nvim nvim '
以上で準備完了です。 Docker コマンドで気軽にお試しもできますし、「とりあえず触ってみる」ということが簡単に実行できるのはとても良いですね…
NeoVim とのご対面
下準備などで「カスタムはテンプレートに則り、ほどほどに恩恵を受ける準備をする」を目標としていたため、インストールなどは一瞬で終わりました。 実際、上記の Docker コマンドを実行すると数分かからずに NeoVim が起動します。
約 570 ms で起動…。 求めていたものがここに…。 起動の速さを極限まで求めているわけではありませんが、やはり速いというのはとても心に良いものです。
ただし、現状では LazyVim として最低限の機能のみ提供されています。
実際にはここから個人のニーズに合わせ、公式 HP を参照しつつ 「Python 用の設定を追加をして、Copilot と連携しよう。」と追加で設定を加えていきます。
NeoVim 上で Lazy Extras
を選択し、下記画像の画面で追加セットのインストールを選択していきます。
カスタマイズ沼
今回は LazyVim から提供されるプラグインのセットを使用し、快適な NeoVim 環境を作成しました。 一方で LazyVim は更に個々でカスタマイズをすることができます。
LazyVim は lua + lazy.nvim (プラグインマネージャー) を使用しているため、個別の設定で
- NeoVim の設定の変更
- 行番号の表示・非表示の変更
- 表示言語の設定
- LazyVim で提供している以外のプラグインの追加
- カラーテーマの追加
- 移動系プラグインの強化
- LazyVim で管理しているプラグインの設定を上書き
をすることが可能になっています。
プラグインを探したり、どのような設定をすれば良いかの調査には以下のサイトがおすすめです。
dotfyle では NeoVim のプラグインをカテゴリから探したり、公開されている NeoVim の設定を検索したりすることが可能になっています。 このようなサイトは複数ありますので、一例にご使用ください。
まとめ
大前提として、最終的に快適にコードを書ける・作業ができるのであれば何でも良いという気持ちは確かにあります。
そして NeoVim の使用は、この目的に対してはベストな解決方法ではないことも理解しています。
極端なことを言えば PC の性能向上だけで済む話かもしれません。
しかし、実際に NeoVim を触ってみて
- マウスを触らずに作業ができる
- キー操作を覚える必要はあるが、移動や入力最低限であればハードルは低く感じた
- 今回の環境では Terminal だけで作業ができる
- (体感では) 軽い!!!!!!
- カスタマイズが楽しい!!!!!!
と感じました。
特にカスタマイズに関しては LazyVim をベースにしても、まっさらな状態から自分に合わせた組み合わせを探していくこともできます。 時間がいくらあっても足りない状態になるとは思いますが、最高を求め続けて沼につかる楽しさがそこにはありました。
まだまだ精進が必要ですが、こういった気持ちを原動力とした探索ができることは非常に楽しい経験でした。
NeoVim はいいぞ
We Are Hiring!
ABEJAは、テクノロジーの社会実装に取り組んでいます。 技術はもちろん、技術をどのようにして社会やビジネスに組み込んでいくかを考えるのが好きな方は、下記採用ページからエントリーください! (新卒の方やインターンシップのエントリーもお待ちしております!)
特に下記ポジションの募集を強化しています!ぜひ御覧ください!