freeeの開発情報ポータルサイト

VSCode から Neovim に挫折せず移行する

freee Developers Advent Calendar 2022 1日目の記事です! ついに今年も始まりました freee Developers Advent Calendar、一日目は会計チームの hachi (@hachiblog) からお送りします。

エディタはソフトウェアエンジニアにとって毎日使う道具です。あなたはどんなエディタを使っていますか?そのエディタに満足していますか? 自分は3年ぐらい VSCode を使っていて大方満足はしていたのですが、細かいところで不満が出てきていました。

そのため思い切って Neovim にエディタを移行しました。 移行して、超快適!という状態ではまだないのですが、VSCode と同等ぐらいまでには使いこなせるようになりました。

自分は今まで何度か VSCode から Vim/Neovim に移行しようとして何度か挫折していて今回始めて成功したので、「エディタ移行したいけど一回挫折したし腰が重いな」と思っている人に届けば嬉しいです。(なのでタイトルは若干詐欺ですが、これを読んだ人がきっと挫折せず移行してくれるはずです)

エディタ移行前の自分の状態

エディタ移行前、自分は3年ぐらい VSCode + vim extention で開発していました。あとたまにターミナルでちょっと修正したりする場合は vim 使ってたり。 正直全然これでいいかなーと思っていたんですが VSCode に対しては以下のような不満が少しずつ溜まってきていました。

  • 起動が若干遅い
  • 自分のいじりたい設定がいじれなかったりする
  • etc...

エディタ移行モチベーション

一番は上の不満を解消したいという気持ちから移行を初めましたが、以下のような理由もありました。

自分の使っているツールに対してもっとこだわりを持ちたい

実はこれが一番大きな理由かもしれません。 自分は今までエディタに特にこだわりはなく、使いづらくなければいいかなと思っていました。 こだわりがないというとあまり悪いことではないように聞こえますが、「こだわりがない」を「興味がない」に言い換えるとどうでしょう。

実際エディタにはそれほど興味はありませんでした。 しかし、自分はエンジニアです。テキストを書く道具にもう少し興味を持ってもいいのではないかと思い直しました。

楽しそう

自分は道具を自分でメンテできることに楽しみを見出す人なので楽しめそうだなと思ってました。 ちなみに自転車のメンテや包丁研ぎめっちゃ好きです。

かっこいい

Vim 使いこなしてるのかっこよくないですか。以上。

失敗した方法

さて、ここ1ヶ月ぐらいで自分は Neovim に移行したのですが、そのまえに一回挫折しています。

このとき自分は、LunarVim を導入して Neovim を使い始めました。 これは Neovim にいろんなプラグインがプリインストールされていてほぼ IDE のように使えるフレームワークです。

LunarVim ( https://www.lunarvim.org/ より引用)

これは以下のような理由で失敗しました。

操作がわからない

いろんなプラグインが予め入っているので、どんな操作をすれば何が起こるのかわかりませんでした。 そもそも Neovim 単体の操作に慣れていないのにいろんなプラグインが入った状態だと、その機能が Neovim 由来なのか、プラグイン由来なのかがわかりませんでした。 Ruby の基礎を抑えずに Ruby on Rails を始めると Ruby のAPIなのか Rails のAPIなのかわからなくなるような現象と一緒ですね。一緒なのか?

カスタマイズもできない

LunarVim 自体はカスタマイズできるように作られているのですが、そもそも使いこなせていないものをカスタマイズしようとはならないですし、いじって壊れるのもなぁという気持ちになってしまいました。 この気持ちになったらゲームオーバーなの僕知ってます。

つまり、よくわからない道具を一度に渡されると使いこなせないよねということです。 この状態ではエディタをちゃんと自分でメンテしたいという目的も達成できなさそうだと思い、一旦撤退しました。

成功した方法

失敗した方法は LunarVim を使って一気にリッチなエディタを作り上げる方法でした。ではどうしたら移行が成功するでしょうか?もちろんその逆をやればいいのです。

素の Neovim から少しずつ自分のやりたい設定やプラグインを追加していくという地味な方法です。

とはいえ最初は仕事の開発ができるような状態ではありませんでした。

step1. Markdown 専用機

そこでまずは Markdown 専用機として Neovim を育てました。 Markdown のメモをとるだけならそれほど機能は必要ありません。

このとき、 Neovim のセットアップ手順や、プラグイン導入手順、操作手順で気になっていることを書きつつ、自分の好みのエディタにしていきました。(hachi-neovimというリポジトリで一応公開しています。

こうすることで、文字を書きつつエディタの設定をすすめられました。 自分が思うに、エディタ移行のハードルは「新しいエディタに慣れてないのでスムーズにプログラムは書けない VS 何かを書かないとエディタの使用感がわからない」というところにあるのだと思っていて、この 「Markdownでセットアップ手順書きながらエディタの設定をすすめるメソッド」はその間を埋める良い手段だと思っています。

step2. Markdown & Lua

Markdown を書き進めつつ、Neovim の設定やプラグインは Lua で書けるので、いい感じに Lua が書ける環境を整えていきました。

step3. すべてのプログラム

Markdown と Lua が問題なく書けるようになったあと、自分の仕事で書いているプログラムも全て VSCode から Neovim に移行しました。 例えば、VSCode を使っているときに便利で使っていたプラグインの機能を Neovim に移植したり、LSPの設定をしたりしました。

Neovim を使い始めたことによる効能

個人的には Neovim に変えてよかったです。(2022/12/1 現在)

VSCode を使っているときは、エディタの API とは多少の距離を感じていて、プラグインを作ろうという気持ちが湧きづらいというのが正直なところでした。 こういうものがあったらという希望はあったものの、それを実現するハードルが高いように見えていました。(実際は簡単なのかもしれないですがやってないので主観でしか書けない)

その点 Neovim は何も書かなければ基本的な機能しかなく、設定も Lua を書いて追加していく必要があるため、最初からカスタマイズしてやろうという気持ちが湧くものでした。 それが高じて自分の好きなプラグインに PR を送ったりもしているので、かなり楽しめているのではと思います。

ちなみに今のところ自分の好きなプラグインは telekasten.nvim です

おわりに

エディタを変える際の参考にしてください! Neovim はいいぞ!!!