はじめに
ここ1年でエディターを放浪してきたので振り返ってみます。
もともとVSCode を使って開発していたものの、Ruby (Rails) を開発するようになって辛くなってきたのでエディタを探す旅に出ました。
Rails ってディレクトリ構造がある程度きまってて、Controller開いたり、View開いたり、ルーティング開いたり、テストファイルにとんだり、FactoryBotにとんだり、あっちこっちいくんですよね。抱えるファイル数多い上に、定義ジャンプうまくいかず苦労しました。(当時はLSPは使っていましたが、ctags は概念すら知らなかった)
Intellij とのひととき
そんななか Intellij を使い始めました。強力なindexing をしてくれるので、Rails をわかってなくてもいい感じにControllerとViewとルーティングをビュンビュンとべてサイコーでした。
Rails の感覚を掴むのにはとても良かったです。
ただ、開発環境がEC2でリモートにあるため Gateway を使って開発してたのですが、それがとても不安定でデーモンのCPU使用率がはりついてたびたび固まるのが辛くやめました。
2~3ヶ月の儚さでした。
Neovim への漂着
そんなこんなで Neovim に流れつきました。
EC2環境にインストールするのでsshしてエディタを開くだけでよく、特に小細工はいらずサクサク動きます。appimage もビルドされてるので、こだわりがなければシングルバイナリを配置するだけで動きます。
プラグインは割と鉄板なものがあり、デファクトなプラグインも固まりつつあるらしく手頃にはじめれてとても良いです。
NeoVim の使い心地
VS Code や Intellij と比べると、デフォルトの設定だとかなりシンプルです。ただ、プラグインを入れることでほぼ同じような機能を実現できます。
まずはファジーファインダを入れましょう。たぶんこれがないと人生の半分損します。ファジーファインダは群雄割拠らしいですが、自分はとりあえず telescope を使っています。
あらゆるデータソースをファジーファインダを通して欲しいソースを抽出し window や quickfix に変えます。美しいストリームですね。
シンプルにワーキングディレクトリ内のファイル名をファジーファインドするもいいし、ワーキングディレクトリ内をgrepして抽出するもよいです。telescope はデータソースもたくさん対応していて、buffer、 vim コマンド、コマンド履歴、Git系、tag、help document... と大体なんでもあります。
このファジーファインダを糊にしてbuffer をコントロールしつつ window を気分で出し入れして作業して、quickfix でゴリっと処理する感覚が気に入っています。
定義ジャンプはctags や Solargraph を使うことである程度とべますし、Telescope を使えば大抵解決します。ちなみに Typescript とかは tsserver だけで十分なので ctags はRuby専用になってます。
この強力なファジーファインダドリブンな作業は、VSCode や Intellij にはない特徴なのかなと思います。
このほかにもたくさんプラグインはあるのですが、大体他のエディタで用意されている機能と大差はない気がします。以下みたいのは揃ってます。
- LSP管理系
- ファイラ
- 補完
- ハイライトなど
- アウトライン
お気に入りプラグイン(Rails寄り)
Rails 開発時にあると嬉しいプラグインを多めに自分が気に入っているプラグインを紹介します。
slim-template/vim-slim
一部の箇所で slim が使われているのですが、syntax ハイライトされないと寂しいので入れています。treesitter parser にないのでお世話になっております。
rgroli/other.nvim
現在の buffer から関連するファイルをシュッと開くことができるやつです。Controller から View や Rspec 開いたりできます。候補が決まってればファジーファインダさえいらないですね。いちいちファイラーから開くのに比べたらとても楽ですね。
RRethy/nvim-treesitter-endwise
Ruby ではスコープ区切りに def ... end
や if ... end
を使いますが、def
で改行すると end
を入れてくれるやつです。 賢いですね。
which-key
ここらあたりから Rails とか関係ないですが気に入ってるやつです。
設定しているキーバインドは軽く100個以上あると思うのですが、使用頻度が低いものは体が覚えてくれません。そんなときはこいつが調教してくれます。
auto-session
Vim のbuffer や window の状態を保存しておいてくれるやつです。一度Vim を閉じてもこれがあればもう一度開くと同じ状態で開きます。
また、ブランチごとに buffer や window を保存しておきたいといったこともできます。
thinca/vim-qfreplace
quickfix 内のテキスト自体を編集しゴリッと置換するやつです。置換のヒーローです。
おわり
とりあえず今は以下の点で Neovim を気に入ってます。
- CUIで動くので環境を選ばなく、ターミナル1つあれば動く
- buffer、window、quickfix、ファジーファインダまわりが強力
- ちょっとした設定は lua で書ける
エディタにはこだわりがなかったのですがちょっと沼りそうな気がしてます。
Neovim を開いたら一日閉じないで作業できるくらいになりたいですね。