ストレージ逼迫がきっかけでIDEからNeovimに移行した話
この記事はVim駅伝の2026/01/23の記事です。
Vim駅伝は常に参加者を募集しています。詳しくはこちらのページをご覧ください。
はじめに
「vimで作業している人って、仕事できそうだよなぁ……かっこいいなぁ……」
ターミナルだけでコードを書き、Git の操作まで完結させて、さっと仕事を進めていく先輩たちの姿に、素直に憧れていました。
とはいえ、憧れだけで環境を変えられるほどの勇気はありません。これまで JetBrains 製 IDE にはそれなりにお世話になってきましたし、そこそこお布施もしてきました。別のツールに移行するのは、ずっと「いつかやりたいな」で止まっていた話です。
そんな私が Neovim に手を出すことになった理由について、この記事で書いていきます。
一つは、昨年10月に購入した MacBook Air を「まあ大丈夫だろう」と 256GB 構成で済ませてしまったことによる、慢性的なストレージ不足です。
もう一つは業務で複数のアプリを使用する必要があり、エディタ、ターミナル、Git クライアントを行ったり来たりする作業フローに対する猛烈な不満でした。
この記事は、JetBrains IDE から Neovim へ移行してみたその過程を淡々と書き残したものです。「こういう人もいるんだな」くらいの距離感で読んでもらえれば嬉しいです!
Neovim移行を決意した背景
ストレージ逼迫問題と Ubuntu サーバ
Windows を使っていた頃は、512GB のストレージで特に困った記憶がありませんでした。その感覚のままMac購入の際に「 256GB でも十分だろう」と判断したのが、Neovim移行への入口でした。
購入から 1 ヶ月ほどでストレージは目に見えて逼迫し、このままではいずれ破綻する、ということが早い段階で分かりました。
JetBrains 系の IDE は高機能ですが、その分ストレージも消費します。そこで、ストレージ対策として自宅にローカルの Ubuntu サーバを立て、開発環境そのものをそちらに移すという方針を取りました。
Mac はコードを置かず、実際の編集や実行は、SSH 接続した先の Ubuntu サーバで行う、という構成です。この構成にしてから、自然と「SSH で接続して作業する時間」が一気に増えました。
SSH 作業と IDE の重さ
SSH 経由で作業する場合、JetBrains 系 IDE でリモート開発の仕組みは用意されています。ただ、正直に言うと重く感じました。
-
起動や接続に時間がかかる
-
Mac 側のリソース消費もそれなりにある
-
「とりあえず繋いで少し直す」には気合が要る
SSH 作業が日常になるにつれて、もう一つ別の不満がはっきりしてきました。
それは「ちょっとした修正」を行うだけでも、複数のアプリケーションを行き来しなければならない、という点です。
Claude CodeとIDEでの作業効率の悪さ
開発業務では、エディタ、ターミナル、Git クライアントなど、複数のツールを同時に使います。
IDE とターミナルを別々に起動し、それぞれを行き来する作業フローは、昔からあまり好きではありませんでした。
IDE 内ではエディタとターミナルのどちらも中途半端に狭くなってしまうのが、苦手でした。
そこで出した答えが、「WezTerm と Neovim で作業を完結させる」という選択でした。
以下の図は、移行前後の作業フローの違いを示しています。
flowchart LR
subgraph Before["移行前"]
IDE[JetBrains IDE]
Term1[ターミナル]
Git1[Git GUI]
IDE --> Term1
Term1 --> Git1
Git1 --> IDE
end
subgraph After["移行後"]
NV[Neovim + WezTerm]
NV --> NV
end
Before --> |移行| After
この図のように、移行後はNeovimとWeztermの組み合わせだけで作業が完結するようになりました。
環境構築のアプローチ
NeovimとWezTermの選定
VimにはオリジナルのVim、Neovim、そしてVSCodeのVim拡張などがあります。私がNeovimを選んだ理由は、開発が盛んに行われていると聞いたからです。「開発が盛んだからなんだ?」と聞かれたら困りますが、「開発が盛んなんだ」と聞いたら使いたくなった!それだけですw
もう一つはプラグインが充実していることも大きな決め手でした。
ターミナルは、先輩から「WezTermはLuaで設定を書けるため、Neovimとの親和性が高い」と聞いたと言うのと、先輩も使用していたのでWezTermを採用しました。
(うーん、こうやって書くと自分独自の調査全くしてないな・・・orz)
実際のディレクトリ構造
設定は、以下のような構造になっています。見通しが良くなることを意識してみたものの、使ってみなきゃわからんという精神のもとで割と突貫で設計しました。
nvim/
├── init.lua # エントリーポイント
├── lazy-lock.json # プラグインバージョン固定
└── lua/
├── core/ # 基本設定
│ ├── options.lua # Neovimオプション
│ ├── keymaps.lua # キーマップ
│ └── autocmds.lua # 自動コマンド
└── plugins/ # プラグイン設定
├── init.lua # lazy.nvim初期化
├── ui.lua # UI関連
├── coding.lua # コーディング支援
├── editor.lua # エディタ機能
├── git.lua # Git連携
├── writing.lua # 執筆支援
└── database.lua # データベース連携
具体的な設定内容はまたの機会に公開したいなと考えています。
移行時に躓いたポイント
キーバインドの習得
最初の1週間は生産性が大幅に低下しました。Vimのモーダル編集に慣れていなかったため、単純な編集作業でさえ時間がかかりました。
特にプラグインのキーバインドが競合しあったりなど、設計が足りなかったなと反省しています。
Mermaid図のプレビュー問題
ドキュメントを書く際、Mermaid図を多用しますが私の環境のNeovim内では直接プレビューできません。現在は、markdown-preview.nvimを使い、ブラウザでプレビューしています。
開発サーバーでプレビューサーバーを起動し、ローカルのブラウザからアクセスする形で運用しています。カッコよくない運用だなと思っているのでこれは早々にどうにかしたいです。
-- 環境変数から設定値を取得(未設定時はデフォルト値を使用)
local mkdp_host = os.getenv("MKDP_HOST") or "127.0.0.1"
local mkdp_port = os.getenv("MKDP_PORT") or "8888"
vim.g.mkdp_open_to_the_world = 1 -- リモートアクセス許可
vim.g.mkdp_open_ip = mkdp_host -- LinuxサーバーのIP(Macからアクセス用)
vim.g.mkdp_port = mkdp_port -- 固定ポート
vim.g.mkdp_browser = "none" -- ブラウザを自動で開かない
終わりに
IDEからの意向で不安や心配が大きかったです。
実際に移行してみた今はストレージの節約や作業フローの改善といったメリットを体感しています。まだ使い始めて間もないため、IDE時代と比べて生産性が向上したとは言い切れません。しかし、操作に慣れていくにつれて、確実に手応えを感じています。
別の機会で実際にどれくらいストレージが節約できたかや、どのようなメリットを感じているか共有できればと思います。
この記事がNeovimへの移行を検討している方の何かの助けになれば幸いです。
実際の作業様子をちょっと公開(これだけじゃ何してるかわからんな🤔)
Neovim公式サイト
コメントを残す