AIにコードを書かせる時代に、WezTerm・WSL2・Neovimを整えた理由

正直、ターミナルを触っているだけで少し楽しい。黒い画面にコマンドを打って、rgでコードを探し、Neovimで直す。SF映画のハッキングシーンみたいで格好いい。効率だけで選んだわけではありません。PC操作が退屈ではなくなる。

AIにコードを書かせる機会が増えた今でも、読む、探す、直す、確かめる部分は自分で触っていたい。ただ、WindowsとWSL2の両方に同じツールが入り、どちらのNode.jsやPythonが動いているのか分からない状態では、気持ちよさより手戻りが勝ちます。

そこで、Windowsは操作席、WSL2は開発場所と決めました。言語ランタイムはmiseへ寄せ、プロジェクトの依存関係は言語ごとの道具へ任せる。いまの結論はこれです。

Windowsを操作席、WSL2を開発場所にした

今の構成は単純です。

場所 担当
Windows WezTerm、GUIアプリ、IDE、Docker Desktop、Windows固有の操作
WSL2 リポジトリ、Git、言語ランタイム、CLI、Neovim

メインターミナルはWezTermです。Windows側で起動して、WSL2のシェルに入る入口として使っています。WezTerm自体の設定は以前にWin11でWezTermの設定をした話へ書きました。

リポジトリはWSL2の~/projects/example-appのようなLinux側に置きます。Windows側のGUIを使いながら、実際にコードを読む・編集する・テストを回す場所はLinux側です。CodexもこのWSL2のワークスペースで使っています。

例外は、Windowsのターミナルを直接使う別PCです。そこにはWindows版Yaziも入れました。ただし、WSL2からWindows版のCLIを呼ぶ運用にはしていません。見た目が同じコマンドでも、WindowsとLinuxでは別物として扱います。

ランタイムはmise、依存関係は各言語の道具へ任せた

miseは、Node.jsや.NET SDKなどのバージョンをそろえるための道具です。私の環境では、Zshの起動時にmise activate zshを読み込み、nodedotnetを実行すると設定したバージョンへつながります。

ここで扱うのは、ランタイムやCLIのバージョンまで。TypeScriptプロジェクトの依存関係はpnpm、Pythonはuv、.NETはNuGetが担当します。この線を引いたら、構成がかなり見やすくなりました。

WSL2側では、言語ランタイムをmiseへ寄せました。現時点でmiseのグローバル設定に登録している言語ランタイムは、.NET SDK、Node.js、Go、Pythonです。

pnpmはNode.js用のパッケージマネージャー、YaziはCLIなので、どちらも言語ランタイムではありません。それでも現在はmiseでバージョンを固定しています。これは管理を一か所で確認したかったためで、何でもmiseへ寄せるという意味ではありません。

一方で、miseに何もかも任せるわけではありません。Pythonは、miseでPython本体を用意し、プロジェクトごとの仮想環境と依存関係はuvで管理することにしました。

mise  : Node.js / .NET SDK / Go / Python本体 / pnpm / Yazi
uv    : Pythonプロジェクトの .venv、依存関係、Ruff
pnpm  : TypeScriptプロジェクトの依存関係
NuGet : .NETプロジェクトの依存関係

uvはプロジェクトごとに.venvを扱い、uv runでその環境のコマンドを実行できます。uvの公式ガイドも確認し、Python本体とプロジェクトの依存関係は分けて管理することにしました。

Node.jsでは、以前のnvmをアンインストールせずに残しています。ただしシェル起動時のnvm読み込みは止めました。nvmが先に有効になると、miseとどちらのNode.jsを使っているのか曖昧になるためです。削除より先に自動読み込みだけを外したのは、問題があった時に戻れるようにしたかったからです。

miseは.nvmrcglobal.jsonのような、言語ごとのバージョンファイルも読めます。公式ドキュメントを確認し、私の設定ではNode.jsと.NETだけを対象にしました。既存プロジェクトの指定を、mise用の書式へ無理に書き換えずに済んでいます。

先に確認するコマンドを決めた

環境構築後にまず見るのは、インストール済みかではなく、何が実行されるかです。

command -v node
command -v python
command -v dotnet
mise current
type -a node

この確認をしないと、Windows版の実行ファイル、nvm、mise、システムパッケージのどれが選ばれたのか分かりません。一度動いた、では足りない。翌日も同じコマンドが同じものを指す状態にしたかったのです。

いまは、AIに任せる範囲と自分で触る範囲が分かれた

AIには実装案や変更を作ってもらう。私はWezTermからWSL2へ入り、差分を読み、rgで周辺を探し、Neovimで必要な箇所を直してテストを回す。この分担が今はいちばんしっくりきています。

AIが実装を速くしても、私は全部を眺めているだけにはなりたくない。zでプロジェクトへ飛び、検索して、コードを追って、最後に自分でOKを出す。少し手間が残っているくらいが、触っていて楽しい。

YaziのWindows導入で詰まった点はYaziをWindowsとWSL2で使い分けたら、file.exeでつまずいた、LSPの調整はNeovimのLSPが動かない原因はプラグインではなくPATHだったへ分けました。実際の検索と確認の流れはAIにコードを書かせた後、rg・fzf・Yazi・Neovimで読むに続きます。

コメント

タイトルとURLをコピーしました