TL; DR

結論から言うと、筆者は直近で下記のようなエディタ変遷を辿っている。

  1. プログラミング言語に合わせて開発エディタを使い分け Goland, Intellij IDEA, VSCode…
  2. NeoVim によるエディタ統一 (半年くらい)
  3. VSCode にさらにお引越し

なぜか?

AI の台頭によりコーディング環境は劇的に変化しており、新しいツールだったり、「最近のこの組み合わせが最高」みたいな情報が飛び交っている。

筆者はエディタとターミナルは別アプリで運用していて、それまで使い方はこんな感じだった。

  • エディタでコーディングをする(こちらがメイン)
  • だいたい出来たらターミナルで git 操作

だがAIコーディング時代がやってきたことにより

  • ターミナルで AI コーディング(指示出し、承認)
  • ターミナル or エディタでレビュー、必要に応じて手直し

となり明らかに比重と使い方が変わってきた。つまりターミナルとエディタを行き来することが増えたのである。コレは言わずもがな煩わしい体験であり、開発環境を見直すことにした。

Neovim の採用

まずはターミナルとエディタの行き来に問題意識があったので、環境を統合できないか考えた。また複数のエディタを開いていると、どれが先使ってたエディタだったのか、すぐに判別できなくなることもあったので一つのエディタですべての言語を賄おうと考えた。

そこで試したのが Neovim だった。組み合わせは Ghostty でターミナルに集約するものだった。

筆者は Vim でさえほとんど使ったことがなくその他の優秀なエディタたちにおんぶにだっこだったのだが、ストレスフルな状況を打破するために一念発起した。

NeoVim(以下nvimとする) は開発者ならご存知の通り、カスタマイズを行い自分好みに仕上げていくエディタである(と思っている)。そしてモードがいくつかあり、入力モード等を変えて利用する。

Vim になれている人はこの操作を軽やかに行い自由自在にコード変更を行う。エンジニアなら誰もが憧れる(?)所作である。初心者である筆者はまず vimtutor を行った。

次に必要なのが初期設定である。尚、NeoVimはインストールすればすぐに使える状態ではあるが、他のエディタを使っていた人ならばそのままでは事足りないケースが多い。そのため、使い始めたユーザーをサポートしてくれるような OSS が公開されている。筆者は nvim-lua/kickstart.nvim を使って始めてから LazyNvim でプラグイン管理をするようにしていた。

kickstart でまずは nvim の初期設定を導入と構造の理解、合わせて LazyNvim で管理コストを減らすことができた。カスタマイズは楽しいがプラグインが無数に存在しているため、選定して試す時間が必要になる。

よく使う言語向けのものを導入したり、見た目よくしたりするものをいろいろ入れてみて、以下のようなレイアウトで利用していた。

憧れのターミナルエディタ構成

憧れのターミナルエディタ構成

よく操作するものを一画面にレイアウトすることでエディタ、ターミナルの切り替えの煩わしさをなくした。またこれに合わせて、zellij も利用していた。

zellij はレイアウトファイルを作成しておくと、お気に入りの状態でターミナルのレイアウトを復元できる。筆者はシンプルだがレイアウトが決まっていたため、この機能を使ってリポジトリに関する操作を行っていた。

# dev.kdl
layout {
  default_tab_template {
    pane size=1 borderless=true {
      plugin location="zellij:tab-bar"
    }
    children
    pane size=2 borderless=true {
      plugin location="zellij:status-bar"
    }
  }

  // dev
  tab name="dev" focus=true {
    pane split_direction="vertical" {
      pane size="40%" split_direction="horizontal" {
        pane
        pane
      }
      pane size="60%" command="nvim" {
        args "README.md"
      }
    }
  }
}
# セッション名とレイアウトを指定して実行
zellij -s msgpack -n dev

Ghostty にはウインドウを分割する機能がすでにあるが、zellij の方が境界線がわかりやすいため、こちらもおすすめ。

だが、しかし

Neovim をカスタマイズしてしばらく使っていたが、何かをするたびにプラグインを選定する必要があるのと、コマンド操作をしばらくすると忘れてしまい、手を動かすのに時間がかかることがあった。これによりエディタ再考することが多くなった。

コマンドいっぱい

コマンドいっぱい

よく使う操作は決まってはいるものの、数日使わないと忘れてしまい自分用のチートシートを確認するといったことが頻発した。(例えば定義ジャンプは grd だが g… なんだっけ? みたいになっていた)

そもそも私は他のエディタを使っていても、あまりショートカットを使う人間ではなかった。使うのはこれ

  • Shift x 2 (fizzy file search)
  • F12 (Go to Definition)
  • F2 (Rename)
  • Command + F (Search/Replace)

くらいなので、使わないタイプだと言ってもいいかもしれない。Neovim ではコマンド操作が主なため、私が適さなかったといってもよいだろう。手癖は罪である。

VSCode への回帰

そんなこんなでもやもやを抱えながら Neovim を使っていたが、改めてショートカット操作として使っていた VSCode を見直してみたところ、自分の要件を満たせることがわかった。

  • コマンド操作が必要最低限(これはもとから)
  • AI ツールが使える(ターミナル or プラグイン)
  • Ghostty または Zellij のようにタブ切り替えができる
  • 複数言語に対応している

VSCode でタブ切り替え出来ないだろうと思っていたが、実はできることがわかった。これにより一気も問題が解消された。

残念ながら Zellij のようなレイアウト設定は出来ないが、ドラッグ & ドロップで配置を変えられるので、許容できている。レイアウト自体も変わったが、エディタの位置が反対になっただけなので問題なし。

VSCode のレイアウト

VSCode のレイアウト

これまで使ったきたエディタなので、操作感も問題なし。ということで VSCode に回帰することになった。

Neovim を経た複利

結局 Neovim は git 操作のみで使わないことになってしまったが、得たこともある。開発環境を複数の PC で同じ状態にするために dotfiles の管理を始めた。現在は Neovim だけでなく shell の設定なども管理している。管理ツールには chezmoi を使っていて、PC 移行やコンテナ起動してもすぐに自分の環境を作れるようになった。

勤務先では社用設定を追加で source できるようにしており、自分のためではあるが拡張性をもたせた設定を作れるようにした。

まとめ

  • 開発環境の見直しで Neovim + Ghostty を使った
  • さらに見直して現在は VSCode を使っている
  • dotfiles(chezmoi) で開発環境管理を始めた

ということでしばらくは VSCode を使っていくと思う。