こんにちは!フロントエンドエンジニアの張です!
この記事はEnigmo Advent Calendar 2024の3日目の記事です。
エンジニアは日頃のタスクを対応するためにいろんなツール駆使していますが、絶対になくてはいけないツールと言いますと、やはりテキストエディター一択だと、私は思っています。
そのテキストエディターですが、実は何種類もあって、側から見ると、どれも同じように見えるかもしれませんが、毎日何時間もそれで仕事をするエンジニアにとって、自分に合うエディターを選ぶことは実は仕事の効率とモチベーションに大いに関わっています。
本記事では、ここ約一年半、私が毎日使っている最強エディターNeovimについて、ご紹介します。
Neovim とは
もしかしたらNeovimを知らない方も多いかもしれませんが、それがエンジニアなら誰しも一回は使ったことがある、名高い Vim エディターをリファクターしたものです。 そのため、Neovim は Vim の特性と独自の機能を備える、モダンなコマンドラインエディターになっています。
特性
強み
Neovim について簡単に説明しましたが、それは一体ほかの主流のエディターと比べて、何の強みがあるでしょう。
Vim Motion
Vim Motionというのは Vim、あるいはNeovim上で使える、カーソルを移動させたり、テキストを編集したり、できるショットカットです。 Motionを使いこなせると、マウスなしでテキストを高速で編集、ナビゲートすることが可能になります。 それは日々大量なテキスト、あるいはコードを処理するエンジニアにとって、とても貴重なスキルです。
実例
個人的に最も使っているNormal Mode
下の基礎Motionが以下となります
Motion | 機能 |
---|---|
[count] h | カーソルを(count 行)左に移動させる |
[count] j | カーソルを(count 行)下に移動させる |
[count] k | カーソルを(count 行)上に移動させる |
[count] l | カーソルを(count 行)右に移動させる |
[count] w | カーソルを次/ count個後の単語に移動させる |
[count] b | カーソルを前/ count個前の単語に移動させる |
i | insert mode に移行して、カーソルを左に一行移動させる |
a | insert mode に移行して、カーソルを右に一行移動させる |
d [motion] | motionの終着点までの文字を削除する |
x | カーソルの位置の文字を削除する |
y [motion] | motionの終着点までの文字を複製する |
p | yで複製した内容をペーストする |
Text object selection を利用したMotion
Motion | 機能 |
---|---|
ciw | カーソルが位置する単語を丸ごと削除して、insert modeに移行する |
diw | カーソルが位置する単語を丸ごと削除する |
dap | カーソルが位置する段落を削除する |
yap | カーソルが位置する段落を複製する |
使えるMotionは実際まだまだありますが、量が多いのもありますし、公式ガイドを参考した方が的確なので、ここでは割愛させていただきます。
効率的で楽しい
以上の実例を見ると、Vim/ Neovim が高速なテキスト編集を実現できることがわかると思いますが、それは実は私にとって、一番大事なメリットではありません。 では、一番のメリットは何でしょうか!
楽しい!
そう!楽しくテキストを編集できること自体が一番のメリットだと思います。 よく見ますと、Vim Motionってゲームのコンボに見えないでしょうか? Vim/ Neovim なら一日中コードを書いても退屈することはありません! それがエンジニアのモチベーションを引き上げて、効率を改善できることを私はこの一年半ですごく実感できました。
PDE(Personalized Development Environment)
Neovimは一部のエンジニアから、PDE、つまり個人的開発環境とも呼ばれています。 それはNeovimのコンフィグ自由度がとても高くて、ユーザーがそれを思い通りに自分好みにできるからです。 具体的に言うと、UIの表示、文字を打つ時のエフェクト、ユーザー入力への反応など、その気になれば全部自分で実装できます。 結果として、ユーザーは自分のワークフローにピッタリな開発環境を構築できて、開発の効率を大幅に上げられます。
効率改善以外、PDEはユーザーのモチベーションの向上にもつながると思います。 なぜかと言うと、エンジニアが仕事のタスクをPDEで対応することで、自分が設計したツールをテストできるからです。 開発が好きなエンジニアなら、それだけで仕事へのモチベーションが大幅に上がるでしょう。
多彩なプラグイン
近年、開発を支援したり、ワークフローをスムーズにしたり、できるプラグインがプログラミングエディターの必要不可欠な要素だと思われる傾向が強まりつつあります。 当然、プログラマーのためのエディターであるNeovimにも充実したプラグインエコシステムがあります。 ここでは、重点的に、何個か人気なプラグインについてご紹介します。
Telescope
TelescopeはNeovimコアの機能を利用した、高性能なLua製 Fuzzy Finderです。 簡単に言うと、指定した範囲以内のコンテンツをキーワードで検索するツールです。 例えば、コードベース内のファイルを大まかな文字列で検索したり、特定な文字列がコードベースのどこに記載されているかを探したり、することが可能です。
それだけでも結構便利なツールなんですが、もっとすごいのはTelescopeの拡張性です。Neovimと同様に、Telescopeは拡張性に重きを置いてデザインされました。 そのため、Telescopeの既存機能を利用して、新しい機能を作成することも比較的に簡単にできます。それに、純Lua製のプラグインであるため、Luaでカスタマイズするのもとても便利です。 もちろん、原作者と他のコミュニティーメンバーによって、もうすでにたくさんの拡張機能が作られたので、まだ自分で機能を作成したくないユーザーでも充実した既存機能を利用できます。
私がよく使っている機能をリストアップすると、以下となります。
builtin.buffer
- 開いたバッファの中からファイルを検索する
builtin.find_files
- コースベース内のファイルを検索する
builtin.live_grep
- コースベース内で特定の文字列やパターンを検索する
詳細に興味がある方はぜひ公式GitHubページをご覧ください!
LSP(Language Server Protocol) 関連プラグイン
NeovimとVimの違いの話になると、ビルトインのLSPサポートの有無が必ずといっていいほど話題に出されます。実際、LSPのサポートを目当てでNeovimに移行したユーザーも結構います。
では、LSPとは一体何なのでしょうか?
一言で言うとMicrosoft社が開発した、エディター/ IDEとLanguage Serverの間のコミュニケーションを可能にするプロトコルです。 Visual Studio Codeなどのエディターがコードのオートコンプリート、定義元への移動、コードの診断(Diagnostic) ができるのもLSPのおかげです。(LSPは元々Visual Studio Codeのために作られています)
詳細はこちらの公式サイトで閲覧できるので、興味がある方はぜひご確認ください。
前にも話した通り、NeovimにもそのLSP機能を搭載されています。そして、それを中心に作られたプラグインもたくさんあります。それらも利用すれば、簡単かつ自由度が高いLSP設定ができるため、 NeovimでのLSP体験はいろんなエディターの中でもトップクラスです。例えば、Language Serverから受信した情報に基づいて、画面上にコードに関する情報を表示するのも簡単にできます。
複雑だと思うかもしれませんが、以下のLSPプラグインを利用すれば、大体のLSP設定ができます。
nvim-lspconfig
- いろんなLanguage Serverのデフォルトコンフィグを提供する
mason.nvim
- Neovim用のLanguage Serverパッケージマネージャー
- 簡単に主流のLanguage Serverをインストールできる
- Neovim用のLanguage Serverパッケージマネージャー
mason-lspconfig
nvim-lspconfig
とmason
を繋げるもの
今ではLSPを利用するエディターも結構増えましたが、設定の手軽さ、自由度、エコシステムの大きさのため、Neovimを選択するユーザーもまだまだ増えています。
おわりに
以上が私が約一年半Neovimを使って、未使用の方にも知ってほしいNeovimの見どころでした。 まだまだ説明しきれてないことが多いですが、Neovimが素晴らしいプログラミングエディターであることが伝われたら嬉しいです! 文章を読むだけではピンと来ないかもしれないので、時間がある時、ぜひ、Neovimを使ってみてください!
明日の記事の担当は 採用広報担当 の戸井さんです。お楽しみに。
おまけ
初心者が自分で0からNeovimを始めるのは結構ハードルが高いので、自分が最初に使ったリソースを幾つか共有したいと思います。
- Neovim公式
- kickstart.nvim
- Neovimのコア開発者の一人が開発したNeovimコンフィグ
clone
したらすぐ使える- コードの説明がとても詳しくて、初心者に優しい
- Neovimのコア開発者の一人が開発したNeovimコンフィグ
vimtutor