📑

ターミナルで完結するAI開発環境の構築

に公開

neovim

こんにちは!スペースマーケットのjinです🐶

長い間VSCodeとCursorを使ってきて、最近ではZedの圧倒的な速度に惹かれたり、Antigravityのエージェント能力に感心したりもしました。しかし、ここ2週間の試行錯誤の末、結局またターミナル環境に落ち着くことになりました。

「なぜ?」と聞かれると困ります。正直カッコいいから使ってるだけなので…
それでも、自分なりに実感しているメリットを整理してみようと思います!


ターミナルに回帰する前:Cursor + Claude Codeの組み合わせ

neovimに移行する前、最も気に入った組み合わせは、Cursorエディタと、別のターミナルウィンドウで動かすClaude Code(主にCCMangerで)の組み合わせでした。

この組み合わせには明確なメリットがありました。

  • VSCode系IDE特有の安心感と親しみやすさ
  • (圧倒的性能の)Tab補完機能
  • Cursor独自モデルであるComposer 1の速度

一方で、不便な点も少なくありませんでした。

  • 複数のCursorウィンドウを開くとメモリ使用量がとんでもないことになる
  • 同時に開いているCursorウィンドウが3つを超えた瞬間、ウィンドウ間の移動がかなり面倒になる
  • worktree管理はある程度できるものの、複数リポジトリ間の作業切り替えが煩わしい
  • CursorとClaude CodeのIDE連携がよく切れて、しょっちゅう/ideで再接続しなければならない
  • マウスとキーボードを頻繁に行き来することになる

他の問題はある程度我慢できたのですが、メモリ使用量だけはどうしても耐えられませんでした。代替手段を探し回った末、結局ターミナルだけで全てを完結させる組み合わせに回帰することを決意しました。

この記事では、細かい設定方法よりも、自分が考えるtmux + neovimの組み合わせのメリットとデメリットについてお話ししようと思います。


tmux + neovimの組み合わせのメリット

1. ウィンドウ移動が自由自在

tmux

tmuxにはsession、window、paneという3つの階層概念があります。個人的にpaneはあまり使いませんが、sessionとwindowはほぼ毎日活用しています。

これらの概念がうまく設計されていて、session単位でリポジトリ間を移動し、window単位でgit worktree間を移動するという使い方をしています。例えば「frontend」sessionの「feature-A」windowで作業中に、ショートカット一発で「backend」sessionの「hotfix」windowに切り替えられます。GUIエディタで複数ウィンドウをCmd+`で切り替えていた頃より、だいぶ快適になりました。

2. Claude Codeとの相性が抜群

neovimとclaudecode

Claude Code自体がCLIツールなので、ターミナルベースの開発環境と統合しても全く違和感がありません。Cursorと併用していた時のように接続が切れて/ideを呼び出す必要もなくなり、非常に安定して動作しています。

claudecode.nvimプラグインを使えば、neovimの中でエディタとClaude Codeを横に並べて作業できます。IDE連携の問題でストレスを感じることがなくなっただけでも、だいぶ助かっています。

3. 欲しい機能があれば、大抵プラグインが存在する

https://github.com/rockerBOO/awesome-neovim

neovimとtmuxはカスタマイズの可能性が無限大です。「こんな機能あったらいいのに...」と思った瞬間、検索してみると大抵誰かが作ったプラグインが存在します。

自分もneovimの設定ディレクトリにCLAUDE.mdを置いていて、必要な機能が出てきたらその都度Claudeに調べてもらって追加しています。各自の好みに合わせた究極のカスタマイズが可能なのは、大きなメリットだと感じています。

4. ターミナルベースの優れたツールが溢れている

lazygit

https://github.com/jesseduffield/lazygit

lazygitを初めて使った時は素直に感心しました。ターミナルベースなのにUIがよくできていて、VSCodeのGUIベースのGit管理機能と比べても遜色ないと思います。

他にもfzf、ripgrep、fd、deltaなど、ターミナルベースでも優秀なツールが揃っています。これらをneovimと組み合わせれば、GUIエディタと同等の開発環境は十分構築できます。

5. 全てをキーボードから手を離さずにできる(楽しい)

ここまで説明してきた全てのことを、キーボードから手を離さずに操作できます。単純に楽というのもありますし、vimを使っている方なら共感してもらえると思いますが、この過程自体が楽しいんですよね。

hjklでカーソルを動かし、ショートカットの組み合わせでウィンドウを切り替え、コマンド一発で検索して...まるで楽器を演奏するように開発している感覚です。この「手触り」があるからこそ、ターミナル環境から離れられないのかもしれません。


もちろんデメリットもある

1. Cursorの強力な補完機能を代替するツールがない

見出しの通りです。Cursorの補完機能は、正直匹敵するツールがないと思っています。CursorのTab機能がここまで強力になったのはSupermavenという会社を買収してからですが、幸いSupermavenはまだneovim専用プラグインの提供を止めてないので、ある程度は補えます。(もちろんGithub Copilotのプラグインもあります)

個人的な見立てですが、AIコーディングのアウトプット品質がどんどん上がるにつれて、徐々に補完機能の必要性も減っていくのではないかと思っています。1行1行補完するより、いっそClaude Codeに機能全体の実装を任せるケースがどんどん増えていますからね。

2. VSCode専用の拡張機能は使えない

モブプロやペアプロをする時にLive Shareを使う方も多いと思いますが、このようにVSCode系でしか利用できない拡張機能は当然使えません。ターミナルベースに開発環境を全て移しても、まだPCからVSCodeを完全に削除できない理由です。

3. 慣れるまで時間がかかる

正直これが一番のデメリットだと思います。他の選択肢と比べて学習コストが高すぎます。

まず「なぜこれを使うべきなのか」自分で納得しないと始めることすら難しいですし、いざ使い始めても定着するのは簡単ではありません。自分も数年前からneovim環境を構築だけしておいて、メインの開発環境はずっとCursorを使っていたので、慣れるまでかなり時間がかかりました。

おわりに

個人的には、デメリットを克服しさえすれば十分すぎるほどのメリットが待っていたので、今はターミナルベースの開発環境をメインで使っています。

ただ、GUIエディタも日々進化しています。Zedは強力なVimサポートをベースに、Vimモードでかなり近い感覚で操作できますし(しかも軽い!)、すでにZedをneovimみたいに使うkeymapもあります。Cursorも開発者なら気になるようなAI機能を次々とリリースしています。いつでも乗り換える可能性はあるなと思いつつ、今のところはターミナル環境に満足しています。

もしこの記事を読んで少しでもターミナルベースの開発環境に興味を持ったなら、まずはneovim distroから始めてみることをおすすめします。

neovim distroとは、neovimを初めて使う人が複雑な設定なしにすぐ始められるよう、あらかじめ構成された設定パッケージのことです。LSP、補完、ファイルエクスプローラー、テーマなど必須機能がすでにセットアップされているので、ゼロから始めるよりもずっとスムーズにneovimの世界に入門できます。

代表的なdistroを簡単に紹介すると:

https://astronvim.com/

  • AstroNvim:すぐに使い始めるには一番便利だと感じました。デフォルト設定だけでも十分実用的で、ドキュメントも充実しています。

https://www.lazyvim.org/

  • LazyVim:自分で作り上げていく楽しさがあります。モジュール化がよくできていて、必要な機能だけ選んで使いやすいです。

https://nvchad.com/

  • NvChad:デザインを重視するならおすすめです。デフォルトテーマとUIが本当にきれいです。

最初はdistroで始めてneovimに慣れてから、徐々に自分だけの設定を構築していくのも良い方法です。ターミナルの世界でお会いしましょう!🚀

スペースマーケット Engineer Blog

Discussion