k8sを操作するVimプラグインk8s.nvimを作った
Noevimからk8sを操作するk8s.nvimを作ったので紹介する。
UIはこんな感じでfloat windowでキーマップを使ってリソースを閲覧、操作できる。


例えば:K8sでPod一覧が表示され、dでdescribeできたら<C-f>でフィルタ、pでポートフォワードできる。 操作感は完全にTUIツールそのものとなっている。
TUIならk9sでいいじゃんって言葉が聞こえてきそうだが、部分的にはそうだと思う。 しかし、自分は逆張りなところがあってk9sを使ったら負けだと思っているのと、k9sは自分のOSSではないので自分好みのUIや操作感ではないから自作することにした。
今ならAIを使えば昔よりもはるかに速く作れるし、実際に作れた。
そんなわけで、個自分的に推しポイントを書いておく
ポートフォワード
ServiceやPod一覧でpを押すとポートフォワードできる。 こんな感じでコンテナ側のポートを選択したあとホスト側のポートを入力する流れになっている。
ポートフォワード一覧画面もあって、そこでDを押すと止まる。
永続化はちょっと面倒そうなので実装していないため、Neovimを終了すると全部止まるようになっているので要注意。
フィルタリング
<C-f>でPod一覧などをフィルターリングできる。 さらに/で通常の検索もできる。
大枠絞り込んだあと、/で検索してカーソル移動できるので、高速に操作できる。
Podへのアタッチとpodのログ
Pod一覧でeでアタッチできたり、lでログを見れたりする。 これらは別タブのターミナルで実行されるようなっているので、複数のpodにアタッチしたりログを見たりできる。
k9sでは複数のpodのログを同時に見れないので、これは便利なのではないだろうか。
キーマップの変更
こんな感じでユーザはキーマップを自由に変更できる。まぁプラグインなら当然ではあるが。 設定されたキーマップは?を押すとヘルプページにも表示される。
{
"skanehira/k8s.nvim",
dependencies = { "MunifTanjim/nui.nvim" },
opts = {
keymaps = {
-- Global keymaps (all views)
global = {
quit = { key = "Q", desc = "Hide" },
},
-- Pod list view
pod_list = {
describe = { key = "K", desc = "Describe" },
},
-- Deployment list view
deployment_list = {
scale = { key = "S", desc = "Scale" },
},
},
},
}画面切り替え
<C-r>でリソースを選択して画面を切り替えることができるが、複数の画面を行き来することを想定して<C-h>で前の画面、<C-l>で次の画面を切り替える事ができる。
undoとredoと同じような機能と思ってもらえればイメージしやすいと思う。
たとえばPod画面からSecrets画面に遷移したあと、またPod画面に戻りたくなったとき<C-h>だけでいけるし、PodからSecretsに行きたいときは<C-l>でいける。
さいごに
基本的にドッグフーディングしながら改善していく予定だけど、もしNeovimでk8sを操作したい人がいたらぜひ試してほしい。




