プラグインをパッケージ化する
構成して共有します。
「プラグインをパッケージ化する」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
プラグインのディレクトリ構成
Neovimプラグインは、runtimepath上に置かれた単なるディレクトリです。慣例的な構成では、Neovimが特別に扱うトップレベルのフォルダーを配置します。
主なディレクトリは、モジュール用のlua/、自動読み込みされるセットアップ用のplugin/、ファイルタイプスクリプト用のftplugin/、ヘルプ用のdoc/、遅いタイミングで上書きするためのafter/です。
-- myplugin/
-- lua/myplugin/init.lua
-- plugin/myplugin.lua
-- doc/myplugin.txtlua/ディレクトリ
lua/以下のファイルはrequireで読み込めます。lua/myplugin/init.luaにあるモジュールは、require('myplugin')として読み込まれます。
階層構造はドット区切りのパスに対応します。lua/myplugin/config.luaはrequire('myplugin.config')になります。これにより、プラグインは整理された公開名前空間を提供できます。
-- in lua/myplugin/init.lua
local M = {}
function M.hello() print('hi') end
return Mモジュールテーブルを返す
慣用的なモジュールパターンでは、ローカルテーブルMを宣言して関数を追加し、それを返します。呼び出し側はrequire('myplugin').hello()のようにアクセスできます。
内部ヘルパーは通常のローカルとして保持し、意図したインターフェースだけを公開します。これは、ほかのエコシステムにおけるモジュールのカプセル化にも似ています。
local M = {}
local function private() end
function M.run() private() end
return Msetup()の慣例
ほとんどのプラグインはsetup(opts)関数を公開します。この関数は、ユーザーのオプションをデフォルト値に上書きマージし、コマンドや自動コマンドの作成などの初期化を行います。
vim.tbl_deep_extend('force', defaults, opts or {})を使うと、ユーザー設定の一部しか指定されていなくても、すべてのデフォルト値が適用されます。
local M = {}
local defaults = { width = 40 }
function M.setup(opts)
M.config = vim.tbl_deep_extend('force', defaults, opts or {})
end
return Mplugin/ディレクトリ
plugin/内のスクリプトは、runtimepathの構築後、Neovimの起動時に自動実行されます。内容は最小限に保ってください。
よくある役割は、コマンドを登録したり、重いモジュールを遅延ロードするためのガードを設定したりすることです。ここで負荷の高い処理を行わず、setupや自動コマンドに任せて、起動を速く保ちましょう。
-- in plugin/myplugin.lua
if vim.g.loaded_myplugin then return end
vim.g.loaded_myplugin = trueロードガード
ロードガードを使うと、ファイルが2回読み込まれた場合の二重初期化を防げます。vim.g.loaded_*フラグを設定し、再入時には早期に処理を終了します。
プラグインマネージャーや:runtimeによってファイルが再度読み込まれることがあるため、これは不可欠です。コマンドや自動コマンドが重複すると、見つけにくいバグの原因になります。
if vim.g.loaded_myplugin == 1 then return end
vim.g.loaded_myplugin = 1遅延ロード
起動を速くするには、必要になったときだけコードを読み込みます。plugin/に軽量なコマンドを登録し、初回使用時に重いモジュールをrequireします。
lazy.nvimのようなプラグインマネージャーでは、cmd、ft、keysのトリガーによってこれを体系化できます。そのため、呼び出されるまでモジュールに触れずに済みます。
vim.api.nvim_create_user_command('MyStart', function()
require('myplugin').run()
end, {})runtimepathとpackpath
Neovimはruntimepathをスキャンしてプラグインを見つけます。標準のパッケージシステムでは、pack/*/start/以下のディレクトリを自動的に読み込み、pack/*/opt/以下のディレクトリは:packaddで必要に応じて読み込みます。
多くのユーザーはプラグインマネージャーを利用しますが、runtimepathの仕組みを理解しておくと、フォルダーがどのように見つけられるのかが分かります。
print(vim.o.runtimepath:sub(1, 60))
-- :packadd loads an opt plugin manuallyヘルスチェック
check関数を備えたlua/myplugin/health.luaを用意すると、ユーザーは:checkhealth mypluginを実行できます。vim.health APIで状態を報告します。
vim.health.start、vim.health.ok、vim.health.warn、vim.health.errorを使って、不足している依存関係を明確に示します。
local M = {}
function M.check()
vim.health.start('myplugin')
vim.health.ok('all good')
end
return Mドキュメントとタグ
doc/myplugin.txtヘルプファイルを用意します。:helptags doc/を実行するか、プラグインマネージャーに任せてタグのインデックスを生成すると、:help mypluginが使えるようになります。
優れたドキュメントには、コマンド、setupのオプション、デフォルトのキーマップを記載します。これにより、Neovim内からプラグインを見つけやすくなります。
-- generate tags from the doc directory
vim.cmd('helptags ' .. vim.fn.expand('%:p:h'))バージョン管理と公開
プラグインをgitリポジトリでホストすると、ユーザーはowner/repoパスでインストールできます。リリースにはセマンティックバージョンに沿ってタグを付け、プラグインマネージャーでバージョンを固定できるようにします。
一般的なプラグインマネージャー向けのインストール例、ライセンス、最小限の設定例をREADMEに含め、導入のハードルを下げましょう。
-- lazy.nvim spec
-- { 'owner/myplugin', config = function()
-- require('myplugin').setup({})
-- end }クイックチェック
プラグインのパッケージ化について理解できたか確認しましょう。
振り返り:プラグインのパッケージ化
プラグインは、lua/モジュール、自動実行されるplugin/スクリプト、そして必要に応じてdoc/、ftplugin/、ヘルスチェック用ファイルを含むruntimepath上のディレクトリです。
モジュールテーブルを返し、デフォルト値をマージするsetupを公開し、二重ロードを防ぎ、重いコードを遅延ロードします。helptagsでドキュメントを整え、セマンティックバージョンのタグを付けてgitで公開しましょう。
よくある質問
「プラグインをパッケージ化する」レッスンは無料ですか?
はい。「プラグインをパッケージ化する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「プラグインをパッケージ化する」で何を学びますか?
構成して共有します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「プラグインをパッケージ化する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Neovim Lua API
- コマンドとキーマップ
- バッファーとウィンドウ
- プラグインをパッケージ化する