Inside of LOVOT

GROOVE X 技術ブログ

GROOVE X Vimmer 座談会

皆さんこんにちは id:iizukak です。ソフトウェアエンジニアの中には、テキストエディタに強いこだわりを持つ方も多いのではないでしょうか。GROOVE Xにもエディタ好きなエンジニアが多数在籍しています。今回の座談会では、GROOVE XのNeovim愛好家である二人が、Vim/Neovimについてざっくばらんに語り合いました。

参加者プロフィール

mineo

  • 入社年: 2022年
  • 所属チーム: KIBANワーキンググループ/クラウドチーム
  • 主な担当: LOVOTのクラウド側開発
  • 開発環境: Mac(社内ではやや少なめ)
  • エディタ遍歴: 秀丸/サクラエディタ → VSCode → Neovim

mineo さんの Neovim スクリーンショット

iizukak

  • 入社年: 2023年
  • 所属チーム: スマラボチーム
  • 主な担当: 画像認識,AI関連開発
  • 開発環境: Windows + WSL (Ubuntu)
  • エディタ遍歴: Emacs(少し) → Vim → PHPStorm → Neovim | Cursor

iizuka の Neovim スクリーンショット

社内エディタユーザ数アンケート

この座談会に先立って、GROOVE Xのエンジニア達がどのようなエディタを使用しているかアンケートをとりました。その結果が以下のスクリーンショットです。

一番多いのはやはり VScode 。JetbrainsのIDEを利用している人も多いです。さらに、最近話題のCursorも一定シェアがあるようでした。Vim/Emacsも根強い人気がありそうです。 今回はファシリテータの id:iizukak がメインで利用しているVim/Neovimの座談会を開催しました。

エディタ遍歴

まず、様々なエディタがある中で、どのようにVim/Neovimにたどり着いたのか聞いてみました。

iizukak: プログラミングは大学で始めました。私の大学では「EmacsかVimか」という世界観がまずありました。学科では、あなたたち一年生は Emacs を使ってくださいということで、Emacsを強制されていました。その後Emacs強制の反動で卒論を書くくらいの時期にVimを使ってみたらこれは良いということになり、社会人になってからは、PHPStorm→Neovimと移行してきました。PHPStormは前職の標準環境として使っていましたが、VimのCUIとの親和性が忘れられず戻ってきました。

小ネタとしては、大学一年のEmacs時代にC言語をK&Rという本で勉強したのですが、printfデバッグしか知らずセグメンテーションフォールトに悩まされる日々でした。デバッガーの使い方とか教えてくれればよかったのにな…

mineo: 大学ではVisual Studioだったかな。IDE がもう出てきている時代でした。プログラミング言語はVisual Basicでした。

社会人になってからは、秀丸/サクラエディタ→VSCode→Neovimという遍歴です。秀丸は会社から支給されていました。特殊なライブラリを使用する環境で、プログラミング言語はCかC++だったんですけど、現場の事情で選択したという感じです。

VSCodeからNeovimへの移行は約2年前です。Vimはプラグインでカスタマイズすることで、画面を格好良くしているユーザーが多いですよね。もともとキーボードショートカットを覚えるのが好きなタイプだったのも、移行した一因ではあると思います。

iizukak: 今回の座談会参加者はVimにプラグインをいろいろ入れて使っている人しかいないので、少し偏った話になるかもしれませんね。Vimは素で使うから良いんだ派の人も一定いると思います。

Neovimを選んだ決め手

iizukak: CLIとの親和性の高さが最大の理由です。私の担当する開発では、ターミナルでの作業の比重が大きいことが多いです。またサーバにSSHした際にviしかない環境でもそれほど迷わず操作できるのにも利点です。

Neovimは設定がLuaで書けるのもいいですよね。Luaは速くて軽いので、とても好きです。

mineo: キーボードだけで何もかもできるのが良いなと思っていて。自分なりにプラグインを入れたりキーバインドを設定したりして、自分の武器を整えていくという感覚があって良いですね。

Neovim専用のプラグインがけっこうあったりします。telescope.nvim などもLuaで書かれているNeovim専用のプラグインですね。

キーボードだけですべての操作ができる効率性と、自由度の高いカスタマイズ性も気に入っています。プラグインとの連携や独自のキーバインド設定ができるため、「自分だけの武器を整える」感覚があります。他の人のVim設定を触ると、慣れた自分の環境との違いに違和感を覚えたりもしますね。

推しプラグイン紹介

iizukakもmineoも多くのプラグインをNeovimにインストールして利用しています。その中でも推しプラグインをピックアップして紹介しました。

telescope.nvim

iizukak: まずはこれですね。ファジーファインダーで、Neovimユーザはみんな使っていると思います。grepしたりfindしたりとてもサクサクできます。キーバインドは2キーとかに短めに設定して使っています。VScodeでも似たようなことはできるのですが、操作感やUIが telescope のほうが気に入っています。

lazy.nvim

iizukak: もうひとつがプラグインマネージャのlazy.nvimです。Neovim ユーザの中ではかなりシェアを持っているのではないかと思います。Vim/Neovimの世界では、プラグインマネージャは栄枯盛衰が激しいですが、個人的には一旦ここで落ち着けました。

copilot.vim

iizukak: Neovimみたいなクラシカルなエディタだと、AIの支援が無いんじゃないかと思われるかも知れないのですが、ちゃんとあります。最初に出たのがcopilot.vimだと思います。しっかり補完してくれますし、Copilotがエディタにいないとさみしい気持ちになることもあります。

nvim-tree.lua

mineo: サイドパネルでいいのかな。パネルにエクスプローラーを表示することができます。VScodeでもよくあるやつですね。これを入れると一気にIDEっぽい雰囲気になります。画面全体が整うような感じです。エクスプローラー上でファイルを動かしたりとか削除したりとかもできるので結構便利です。

iizukak: エクスプローラー上をVimキーバインドで移動できるのも良いところですよね。VScodeだと難しいんじゃないかな。

none-ls.nvim

mineo: 説明が難しいんですが、LSPに対応していないものでも、none-lsを通すとLSPとして扱うことができます。例えば、prettierとか。 JavaScriptやTypeScriptなどの環境では複数のフォーマッターやリンターを使い分けることが多く、プロジェクトごとの設定管理がとても便利です。

LSPとnone-lsを組み合わせることで、およそIDEと同じくらいの機能が使える形になると思います。設定がちょっと大変だったりするんですけど、そこはVimの宿命ですね。

smear-cursor.nvim

mineo: smear-cursor.nvim はカーソルの動きがちょっとアニメーションぽくなるやつでして。かっこいいです。実用的なメリットはあまりないんですけど。

iizukak: これはかっこいいですね。

独自 Tips

iizukak: Neovim を使う上で独自の設定などがあれば教えてください。

mineo: Neovim内からLazyGitを呼び出せるように設定しています。ターミナルに切り替えることなくGit操作が完結するので、作業の中断が減って効率的になりました。

また、TelescopeプラグインをカスタマイズしてGitリポジトリ一覧を表示し、複数プロジェクト間を素早く移動できるようにしています。単一プロジェクト内での移動という制約を超えて、複数プロジェクトを行き来する際に効率的です。

フロントエンド開発では、各種リンターやフォーマッターの管理は課題です。none-lsをカスタマイズし、プロジェクトごとに適切なツールが自動選択されるよう設定しています。

あと、最近ではAIエディタの進化が目覚ましく、Vimでも対応することが重要になってきていますよね。私自身は最近、VimとVSCodeを2窓で併用しながら作業するスタイルです。Vimの効率性とVSCodeのAI機能を両方活かせて結構良いです。

Vimにまつわるエピソード

mineo: LSP(Language Server Protocol)は、日本人が作ったVimプラグイン「OmniSharp」がベースとなり、後にMicrosoftが仕様化したという経緯があるらしいです。現在では多くのエディタやIDE間で共通のプロトコルとなり、開発効率向上に大きく貢献していると思います。特にNeovimにはLSPのクライアントがそなわっているため、プラグイン(nvim-lspconfig)などで対応されていなくとも、使いたいツールがLSPに対応してくれさえすれば、自前で設定を書いたりすることもできます。例えば、私はデータベーススキーマを宣言的に管理できるツール「Atlas」を愛用しているのですが、LSPは用意されているものの、nvim-lspconfigでは未対応だったので、自力で設定を書いたりしました(nvim-lspconfigにもコントリビュートしました)。

iizukak: LSPはめちゃくちゃ世界中の生産性の向上に寄与してますよね。

iizukak: 私はウガンダの支援を必要としている子ども達への寄付の話をしたいです。Vim をファイルを指定せず開くと、以下のように寄付を募っていることが分かります。 :help iccf コマンドを実行すると、

Vim の初期画面

Vim is Charityware. You can use and copy it as much as you like, but you are encouraged to make a donation for needy children in Uganda. Please see |kcc| below or visit the ICCF web site, available at these URLs:

とあり、Vim はチャリティウェアで、ウガンダの支援を必要としている子どもへの寄付をすることが推奨されていることが分かります。私は実際にヘルプコマンドで表示されているURLへアクセスして寄付を試みたのですが、どうも日本からは寄付ができないというメッセージが表示されて失敗してしまいました。

ウガンダの子どもへの寄付が失敗

何度か試しているのですが、やはり寄付できていません…

今後の展望

iizukak: 昨今AIアシストプログラミングの進化が目覚ましいですね。CursorやCopilot Agent, Cline など様々なツールが登場しています。Neovim コミュニティでも、 avante.nvim などのプラグイン開発が進んでいる印象です。今後の進展に期待したいです。

Vim/Neovimは、その独特な操作性から「習得が難しい」という印象を持たれがちですが、一度その魅力を理解すると、開発効率が飛躍的に向上する可能性があると思います!

次回は最近注目を集めているAIエディタ「Cursor」についての座談会を予定しています。ご期待ください!