タイトル画像

manager.nvim 思想編

こんにちは。N本ノック12日目ですね。 魔改造と自作こそ正義だと思っている静カニです。 今回は、私がすでに散々運用しているmanager.nvimの設計思想を書き散らしていこうと思います。 本体編拡張編

思想もクソもあるか

適当に作ったものだとしても、設計思想がないと要件定義や実装のどこかで詰まると思います。 つまりこれにもあります。

説明

Shougoism(というのか知らないがddc.vimやddu.vim、dpp.vim&ddt.vimのもの)は本体だけだと何もできないのに対し、 manager.nvimの思想は本体だけでもそれなりに使える、という感覚です。ただし、この「それなり」が大事です。

manager.nvimはadd,clean,load,remove,updateという、 プラグインマネージャーとして欲しい機能だけを実装しています。 一方、遅延読み込み(manager-lazyload)やコマンドのインターフェース(manager-command)、 Graphical目なUI(manager-ui)、あとロック機能(manager-lock)なんかは外部に任せています。

中核的な思想としてはこのぐらいです。

拡張方法

拡張方法については本体を改造する、という言葉で8割ぐらいは表せてると思います。 コードで表すとこのような感じでしょうか。コードはエンジニアの共通言語です。

local manager = require("manager.core").new()

-- ↓エラー
-- manager:lock()
require("manager.lock").setup(manager)
manager:lock()

本体を用意したあと、拡張側でその本体に新しいメソッドを追加しています。 これによる利点として挙げられるのが、他の本体に影響しないことです。 上のコードの続きで表すとこうなります。

manager:unlock()
local other_man = require("manager.core").new("other")
-- ↓エラー
-- other_man:lock()
manager:lock()
manager:load("my_plugin")
manager:unlock()
other_man:load("my_other_plugin")

大分適当にコード例を書いてしまいましたが、 managerをいくら魔改造しようとother_manは特に何もない純粋だよ、ということです。

status.nvim

さてここで私のGitHubを見た優秀すぎる方はstatus.nvimというものがあったことに気付いたと思います。 このstatus.nvimの設計思想はmanager.nvimとは似て非なるもので、status.nvimの方がShougoismと近かったりします。 N本ノックかさまししたいので 詳細はそのうち別の記事に書くと思います。