0Pricing
Lua Academy · レッスン

プラグインの検出と読み込み

ディレクトリからプラグインファイルを検索し、requireまたはloadfileで読み込みます。

「プラグインの検出と読み込み」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

プラグインアーキテクチャとは

プラグインアーキテクチャを使用すると、コアを変更せずにサードパーティーコードでアプリケーションを拡張できます。Luaの require と動的ロードにより、自然に実現できます。

規約によるプラグイン検出

ディレクトリ内から命名規約に一致する *.lua ファイルを検索し、それぞれをプラグインとしてロードします。

local function discoverPlugins(dir)
  local plugins = {}
  -- platform-specific dir scan; here a mock example
  for _, name in ipairs({"logger", "cache", "auth"}) do
    local ok, mod = pcall(require, dir .. "." .. name)
    if ok then plugins[name] = mod end
  end
  return plugins
end

検出にpackage.pathを使用する

package.path を拡張し、カスタムディレクトリにあるプラグインを require で見つけられるようにします。

package.path = package.path .. ";./plugins/?.lua"
local plugin = require("myplugin")

動的ロードのためのloadfile

loadfile(path) はLuaファイルを実行せずにチャンクへコンパイルします。() で実行すると、プラグインのモジュールテーブルを取得できます。

local function loadPlugin(path)
  local chunk, err = loadfile(path)
  if not chunk then return nil, err end
  local ok, result = pcall(chunk)
  if not ok then return nil, result end
  return result
end

プラグインマニフェスト

各プラグインは、名前、バージョン、依存関係を記述したマニフェストテーブルをエクスポートします。

-- plugins/logger.lua
return {
  name    = "logger",
  version = "1.0",
  deps    = {},
  init    = function(app) app:on("log", print) end,
}

依存関係の解決

プラグインを初期化する前に、すべての依存関係がすでにロードされていることを確認します。

local function initPlugin(app, plugins, name)
  local p = plugins[name]
  if not p then error("Plugin not found: " .. name) end
  for _, dep in ipairs(p.deps or {}) do
    if not plugins[dep] then
      error(("Plugin %s requires %s"):format(name, dep))
    end
  end
  if p.init then p.init(app) end
end

プラグインのホットリロード

プラグインをリロードするには、package.loaded から削除し、require で再ロードして、フックを再登録します。

package.loaded["plugins.logger"] = nil
plugins.logger = require("plugins.logger")
plugins.logger.init(app)

プラグインレジストリ

ロード済みプラグインのレジストリを管理し、二重ロードを防ぐとともに依存関係をチェックできるようにします。

エラーの分離

pcall でプラグインをロードし、壊れたプラグインによってアプリケーション全体がクラッシュしないようにします。

local ok, err = pcall(function()
  plugins[name] = loadPlugin(path)
  initPlugin(app, plugins, name)
end)
if not ok then
  print("Plugin load failed:", name, err)
end

プラグインメタデータ

説明、作成者、設定スキーマなどの追加メタデータを格納します。UIへの表示や自動設定に利用します。

遅延ロード

起動時にすべてロードするのではなく、初めて必要になった時点でプラグインをロードします。ロードを開始する __index メタメソッドを持つプロキシテーブルで実装します。

プラグインのロードに関する質問

プラグインのロード時に pcall を使用する利点は何ですか?

まとめ:プラグインの検出とロード

ディレクトリを検索するか命名規約を使用してプラグインを検出します。loadfile または require でロードします。マニフェストを検証し、依存関係を解決します。ロード失敗を必ず分離するため、pcall を使用します。

よくある質問

「プラグインの検出と読み込み」レッスンは無料ですか?

はい。「プラグインの検出と読み込み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「プラグインの検出と読み込み」で何を学びますか?

ディレクトリからプラグインファイルを検索し、requireまたはloadfileで読み込みます。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「プラグインの検出と読み込み」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. プラグインの検出と読み込み
  2. プラグインAPIとフックシステム
  3. プラグイン実行のサンドボックス化
  4. バージョン管理と依存関係管理
← Lua Academyに戻る