開発環境を VSCodeからWezTerm + Neovimへ移行する(WSL / mac)
目的
特別なことはほとんどしてないため記録用として淡々とやったことを残す。
- 普段の開発体験をVSCode中心 → WezTerm + Neovim中心に移行する
- OS差(WSL / mac)を吸収し、設定・導入手順を再現可能(chezmoi管理) に寄せる
- LSP / 補完 / 検索 / Git操作まで含めて「VSCodeでやっていたこと」を段階的に置き換える
1. WezTerm(ターミナルUIの基盤)
1-1. WSL(Windows実行 + WSL設定参照)
- WezTerm本体は Windows側を winget で導入
- WSL側に入れる運用(brew等)は、WSLg起動あたりでクリップボード/フォント互換で面倒なことになりそうだということで避けた
- 設定ファイルは WSL側に作成して、Windows側 WezTerm から参照させる
~/.config/wezterm/wezterm.luaを作成- Windowsから参照できるパスを出す
wslpath -w ~/.config/wezterm/wezterm.lua- 例:
\wsl.localhost\Ubuntu\home\kyohei_ito\.config\wezterm\wezterm.lua
- このパスを Windows側WezTermの環境変数(設定参照先) に指定し、Windows実行でもWSL側設定が使われるようにした
- 目的
- 実行環境はWindows(安定・統合しやすい)
- 設定はWSL(dotfiles/chezmoiの正)に寄せる
1-2. shell integration(cwd引き継ぎ)
-
新規タブ/分割ペインを同じディレクトリ(cwd)で開けるようにする(OSC 7)
-
メモ
設定など
以下を入れとく。こうすると新規タブ、分割タブなどでパワーシェルじゃなくてwslになってくれる curl -fsSL https://raw.githubusercontent.com/wez/wezterm/main/assets/shell-integration/wezterm.sh
-o ~/.config/wezterm/wezterm.shWezTerm は、シェルが OSC 7 というエスケープシーケンスを出してくれると「今ここにいる(cwd)」を把握できて、新しいタブ/分割ペインを同じ cwd で開けます。これは公式に “Shell Integration” として説明されています。
~/.zshrc # WezTerm shell integration (OSC 7 etc.) . ~/.config/wezterm/wezterm.shwezterm.shを配置して zsh から読み込む~/.config/wezterm/wezterm.shを置く- zsh設定(現状は分割運用の該当ファイル)で
wezterm.shを source
1-3. macOS(brew導入)
- WezTermは macOS側で brew 導入
- WSLと同様に、設定は chezmoi管理へ寄せる(OS差分はdarwin分岐で吸収)
2. dotfiles運用(chezmoiを“正”にする)
- WezTerm / zsh / navi / Neovim(設定やプラグイン管理含む)を chezmoi管理へ寄せる
chezmoi.toml内の「エディタ起動コマンド(code相当)」を置換- Windows / mac 共通で使える呼び出し方に揃える
- 既存の zsh内にあった「codeコマンド相当(peco-src)」も置換・整理
- Windows / mac それぞれ対応
※ここは更新頻度が高いので、方針として「chezmoiが正」「手元の差分は消す」が大事
3. zsh(VSCode外で完結する操作体験の下地)
3-1. zsh設定の分割運用
~/.zshrcは読み込み役にして、目的別に~/.config/zsh/配下へ分割- 環境差分(mac/linux)や、PATH、alias、関数、ssh-agent等を整理しやすくした
3-2. プラグイン管理を sheldon に統一
sheldon init --shell zsh- 生成された設定を chezmoi add(管理対象に)
- brew で入れていた zsh系プラグインは削除して統一
zsh-autosuggestionszsh-syntax-highlighting
- 副作用として、WSL/mac で「どこから入ったかわからない」状態を減らす
4. CLIツールで“VSCode的な快適さ”を代替
4-1. コマンドの置換(見やすさ・速さ)
bat(cat代替) → alias整備eza(ls代替) → alias整備zoxide(cd代替) → 移動を高速化starship(プロンプト) →starship.tomlを加筆して見やすさ/情報量を調整
4-2. 操作の導線(検索・Git・ファイラ)
fzf:ファイル名検索rg:全文検索(grep強化)lazygit:Git操作yazi:ファイラ(必要に応じて)
4-3. difftastic(diffの視認性改善)
- difftastic を git の差分表示として使うように設定(gitconfig側)
5. navi(“自分用ショートカット/チートシート”で迷子防止)
- navi導入、brewlist更新、chezmoi管理へ
- 自分用チートシートを追加(よく使う操作を一箇所に集約)
- 移動(zoxide)
- 検索(fzf / rg)
- Neovim基本操作
- Git/ファイラ(lazygit/yazi)
- キーバインド調整
- peco-src(ghq list)とターミナルクリアの衝突回避(例:Ctrl+L → Ctrl+G)
- navi呼び出しも衝突があれば再割り当て(例:Ctrl+N)
6. mise(言語実行環境・LSP本体をOS側に寄せる)
6-1. asdf から mise へ移行
asdfを削除(残骸含む)rm -rf ~/.asdf.tool-versionsなども整理対象
- zsh設定内の asdf 関連記述を削除
mise.tomlを作成し、chezmoi管理へ- Node など必要ランタイムを mise で導入
- グローバル導入していた npmパッケージは棚卸し
- 「miseで入れる」「npm -gで入れる」を混ぜない(混ざると追跡不能になる)
6-2. LSP本体を mise で導入
- Neovim側でLSPを動かすため、言語サーバー本体を OS側(mise)に置く
LuaLStypescript-language-serverastro-ls
- 目的
- エディタ(nvim)に閉じない形でLSP本体を管理して、環境差分と再現性を上げる
7. Neovim(“最低限のLSP”→“VSCode寄せの補完/UI”)
7-1. 最低限のLSP稼働まで
nvim-lspconfigを導入(LSP設定の土台)- LSP設定ファイルを追加(chezmoi管理へ)
~/.config/nvim/after/lsp/ts_ls.lua~/.config/nvim/after/lsp/astro.lua- 必要なら
~/.config/nvim/after/lsp/lua_ls.lua
- これで「言語サーバー + lspconfig」が揃い、LSPとして最低限動く状態にした
7-2. VSCode寄せの補完/UIを導入
- lazy.nvim(プラグインマネージャ)
- nvim-cmp(補完UI)
- cmp-nvim-lsp(LSP補完ソース)
- LuaSnip(スニペット)
- cmp_luasnip / friendly-snippets(スニペット連携)
- telescope.nvim(検索/参照UI)
- trouble.nvim(診断一覧UI)
- nvim-tree(ファイルツリー)
- plenary.nvim(依存)
- nvim-web-devicons(アイコン系)
※「LSPは動く」だけだと体験が弱いので、補完/検索/診断/UIの層を足してVSCodeに寄せた
8. mac側の追従対応(VSCode離脱を前提に環境統一)
- wezterm(brew導入) + 設定適用(chezmoi update)
- sheldon導入 & source反映
- iTerm2削除(WezTermへ統一)
- asdf削除(miseへ統一)
- brewで入れていたzshプラグイン削除(sheldonへ統一)
- npmグローバル導入物の棚卸し(mise運用へ寄せる)
9. 期待する開発体験の変化(VSCode → CLI/Neovim中心)
- lint/format(eslint/prettier)は エディタ内よりもCLI主導へ寄せやすい
- lefthook等の導入や、LSP/formatterとの連携で運用を固める想定
- “エディタを変える” ではなく、
- ターミナル(WezTerm)
- シェル(zsh)
- ツール(fzf/rg/lazygit/navi)
- エディタ(Neovim)
- 実行環境(mise) を一体として揃えることで、VSCode依存から抜ける