みんなの中にNeovimはいますか？

## まえがき

普段はFindy Team+ バックエンドを開発している「そんちょう」といいます。大好きなエディタはNeovim、ターミナルはWeztermです。
 
本記事では、私が開発環境を見直した際に、VSCodeからNeovimへ移行した話を書いていきます。


## エディタを移行する動機
 
まず、私がなぜVSCodeからNeovimへ移行したのかの動機についてです。
 動機は大きく分けて、２つあります。１つ目は、業務PCのスペックへの不満。２つ目は、同僚エンジニアから影響です。
 
### １つ目の動機
 
2021年の夏頃、私はMacでVSCodeを使用して仕事をしていました。
このMacは、CPU intel i7 / Memory 16GBでした。このスペックでVSCode、Google Chrome、DockerでRailsアプリケーションを起動していました。当時はこれだけでメモリ16GBを使い果たしていました。
※ この頃のGoogle Chromeはメモリ消費量がすごかった。普通に6〜8GBくらい使っていた。

メモリやCPUを使い果たすと、VSCodeで文字を打つことが一苦労になります。キーを押してから2〜3秒後、画面に打った文字が出ることもありました。それだけでストレスMaxです。

こんな事があったため、軽量なエディタを探していました。

### 2つ目の動機

2021年の冬頃、同僚のエンジニアさんとペアプロをする機会がありました。ペアプロしてくださった方はVimを使っている方でした。
※これ以降、Vim使いをvimmerと書きます

先輩vimmerのVim捌きがめちゃめちゃカッコ良く、短時間でコードを書き上げる姿を見て、Vimいいじゃんかと思っていました。

普段の不満とvimmerへの憧れがあり、2年くらい使っていたVSCodeからVimへ乗り換えることにしました。

## Vimへ移行する

当時はVimについて詳しくなかったため、しっかり比較していませんでした。

|  | Vim | VSCode |
|:----------:|:-----------:|:------------:|
| メモリ消費量 | ◯めちゃ軽い 数MB程度 | ☓ 2~3GB? |
| 設定のしやすさ | △ 未知数 | ◯ 慣れているから簡単 |
| かっこよさ | ◯ MAX | ◯ 普通 |

私がVimに合わない場合、VSCodeに戻れるように設定ファイル等をバックアップ取っていました。

さっそくVimを使い始めたのは良かったですが、VSCodeほどうまく操作できているとは言えませんでした。なぜなら、Vimの独特なカーソル移動やキーバインドが身についていなかったり、言語サーバーの設定やファイル保存時のフォーマット等をうまく設定できていなかったからです。

諸々上手くできず、VSCodeへ戻ってしまいました。1度目の挫折です。


## Neovimに出会う

その後、すぐにNeovimを知りました。
NeovimはVimをフォークして開発し続けれているエディタです。基本的な操作はVimと同じですが、Neovimは拡張性(extensibility)と使いやすさ(usability)をフォーカスしています。

https://github.com/neovim/neovim

## VSCode → Neovimへ移行する

2022年1月の私は、Vimへの移行を挫折していため、エディタ移行はほぼあきらめていました。
しかし、Neovimを知ってから、Neovimのホームページや先駆者の設定解説記事を読んでいくうちに、「これ、自分も移行できるやつじゃないか？」と考えるようになりました。

これはやるしかない。やるぞーやるぞー！と息巻いていました。
エディタ移行に挫折した私にとって、エディタ移行は影響大きいことが分かっていたため、移行完了までを複数のフェーズへ分割することにしました。

### フェーズ1 VSCodeにNeovimの拡張機能を入れる。
 
脳と頭がVimの操作に慣れるまでやる。私の場合は矢印キーでカーソル移動せずに、Vimのhjkl操作のみでカーソル移動を完結させることを目標にしていました。

拡張機能はこちら
https://marketplace.visualstudio.com/items?itemName=asvetliakov.vscode-neovim

VSCodeでVimのキーバインドを利用したい場合、おすすめです。

### フェーズ2 マークダウンでドキュメントを書く時は必ずNeovimを使う

このフェーズではマークダウンを書く度に、Neovimの設定を少しずつ自分の好みへ変更していく目的がありました。
ここでプラグインのインストールやプラグインを管理するプラグインマネージャーを導入しました。
当時はvim plugをプラグインマネージャーとして、使用していました。
https://github.com/junegunn/vim-plug
シンプルなプラグインマネージャーのため、とても扱いやすいです。

設定ファイルの中身はvimscriptで書いてました。

### フェーズ3 VSCodeからNeovimへ完全移行する

移行当時はRuby on RailsやWordPressをメインに開発していました。これらに関連する開発作業をすべてNeovimで全てできるようにします。
そのためには、言語サーバーの設定やシンタックスハイライト、git関連作業やテンション上がるカラーテーマを適用していきました。

この時に使用していたプラグインをざっくり書きます。
言語面CoC https://github.com/neoclide/coc.nvim
言語サーバーの設定周りで利用します。

git関連はfugitive https://github.com/tpope/vim-fugitive
NeovimでGit操作する際に欠かせませんでした。

カラーテーマはonedark proを使用していました。
VSCodeでも利用できるテーマです。
https://github.com/Binaryify/OneDark-Pro

全てのフェーズを終えて、Neovimへ移行が完了しました🎉

## Neovimの設定を変更し続ける

Neovimを使い続けていると、細かい部分で気になる設定が出てきたため、ひたすら設定変更をしていました。

### 設定ファイルをすべてLuaへ書き換える

フェーズ3が終わってしばらくたった2022年3月に、Neovimの設定ファイルをすべてLuaで書き直すことにしました。これはプラグインマネージャーとしてpacker.nvimを使用したかったからです。
https://github.com/wbthomason/packer.nvim

ここのあたりは、特に苦労せず設定ファイルをすべてLuaへ書き終わりNeovim生活を送っていました。

### NeovimのHEADを使う

自分が使いたいプラグインの必要要件がNeovim ver0.10.0以上であったため、Neovim HEADを使うようにしました。
HEADとは、Neovimのリポジトリのmainブランチの最新コミットを含んだモノを指します。
たまにクラッシュすることもあるため、bug issueがないか確認は必要です。
※ 2024/02時点でNeovimの最新バージョンはver 0.9.4


### LazyNvimに出会う

2023年の年末頃に、YouTubeでこんな動画を見ました。
https://youtu.be/fFHlfbKVi30?si=NsZfDo2OjBaQMj-J
ここでLazyNvimの存在を知ります。
https://www.lazyvim.org/
自分が欲しい機能や設定がほぼデフォルトで含まれていたため、LazyNvimへ移行することにしました。

公式のドキュメントが丁寧に記載されているため、特に挫折することもなく切り替えることができました。これによって、NeovimをIDEにあるような機能を簡単に設定することができるようになりました。🎉
例としては

*ファイルツリー*
![スクリーンショット 2024-02-19 13.28.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3693556/288b0b01-2552-837f-3929-b0bcc0babf56.png)

*補完*
![スクリーンショット 2024-02-19 13.29.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3693556/56bacf7d-a598-4b08-8b2e-8d25c3177392.png)

*ファイル検索*
![スクリーンショット 2024-02-19 13.28.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3693556/481e7e2b-fa0e-5ecd-6a4e-b9c22cf58dcd.png)



この辺りで自分好みのNeovimにすることができたと思っています。


## 今後のVimライフをどうしていくか

テスト実行する手間やデバッグの手間を極力少なくしたいため、プラグインneotestやDAPを導入したいです。
https://github.com/nvim-neotest/neotest

2024/02時点では、ローカル環境でテスト実行するためにvim-testを使っていますが、neotestを使うとテスト対象ファイルを編集するとテストが自動で実行してくれたりする便利機能があるので使いたいと考えています。

また、非公式ですがCopilotChatを利用できるようになプラグインもあったりするため、導入してみようと思っています。

## 最後に

新しいエディタ・ツールへ移行する場合、フェーズを小さく分割して、移行することが重要です。
また、移行の成功に関わらず、移行の過程で得られた体験や知識は、もともと使っていたエディタの設定や操作に活かすことができます。長年エディタを移行していない方いましたら、移行に挑戦してませんか？

それでは、良いVimライフを！！