メインコンテンツまでスキップ
バージョン: KPM v3

プラグインメタデータと依存関係ツリー

プラグインを管理するためにメタデータと依存関係ツリーを構築します。


概要

プラグインメタデータ(プラグインメタ)は、 KPM がプラグインを管理するために生成される追加データです。 これにはバージョン情報、作成者、依存情報などを含みます(こちらのセクションで詳しく説明しています)。

KPM は、これらの情報にもとづいて、依存関係ツリーと呼ばれるプラグインを列挙する木構造のデータを構築します。 これは依存関係を柔軟に管理する、概念的なものです。プラグイン変更時に予め構築されたツリーを参照することで、次の操作時に高速に依存関係を参照できます。

これらの機能はそれぞれプラグインメタデータモジュールの機能であり、密接に関連しています。

メタデータの保存場所

プラグインメタデータは SQLite3 データベースで管理され、初期状態では plugins/plugins.db に保存されます。
保存場所を変更する方法については、こちらを参照してください。

メタデータを覗く

KPM が保存している全てのメタデータは、 /kpm info コマンドで確認できます。
このコマンドは、プラグインのメタデータをグラフィカルに整形して人間が読める形で表示します。

詳しくは以下のドキュメントを参照してください:

メタデータの構築タイミング

メタデータ及び依存関係ツリーは KPM の介入の有無に関わらず、サーバのプラグインが変更されたときに構築されます。

変更が KPM による場合、プラグインの変更前に変更準備が行われます。これにより、完全な再構築をせずに安全にメタデータを構築できます。
一方 KPM による変更でない場合、メタデータの構築は KPM が自動検知して行われます。 サーバが動いていないときに行われた変更は、次回の KPM の起動時に一括して行われます。

メタデータに含まれる内容

プラグインの基本情報

このカテゴリには以下の情報が含まれます:

項目名内部値摘要
プラグイン名plugin_meta.nameplugin_meta の主キーです。
バージョンplugin_meta.version
読み込みタイミングplugin_meta.load_timingplugin.ymlload に対応しています。
作成者plugin_author.author
備考

KPM はこれらの情報を直接的には使用しませんが、一応保存しています。意味はありません。

KPM による追加情報

このカテゴリには以下の情報が含まれます:

項目名内部値摘要
インストール日時plugin_meta.installed_atプラグインがインストールされた日時です。
インストール者plugin_meta.installed_by値については以下を参照してください。
依存関係かどうかplugin_meta.is_dependency依存関係として KPM によって自動でインストールされたプラグインの場合は true です。
解決クエリplugin_meta.resolve_queryプラグインがインストールされた際に使用されたクエリです。値が存在しない場合があります。 プラグインのアップデート等に使用されます。

プラグインのインストール者の値

  • SERVER_ADMIN: サーバの管理者によって手動でインストールされたプラグインです。
  • KPM_DEPENDENCY_RESOLVER: 依存関係として KPM によって自動でインストールされたプラグインです。
  • KPM_PLUGIN_UPDATER: KPM によってアップデートされたプラグインです。
  • OTHER: その他の方法でインストールされたプラグインです。
  • UNKNOWN: 未知の方法でインストールされたか、メタデータが破損しています。

実際の Enum 値はこちらの Javadoc を参照してください。

依存関係などの情報

依存関係などの情報は、以下の 3 つのテーブルに保存されます。

  • depend:プラグインの依存関係(Hard)が保存されています。 plugin.ymldepend に対応しています。
  • softdepend:プラグインの依存関係(Soft)が保存されています。 plugin.ymlsoftdepend に対応しています。
  • loadbefore:プラグインの依存関係(Load Before)が保存されています。 plugin.ymlloadbefore に対応しています。

各依存関係が存在しない場合、それぞれのテーブルには何も保存されません。

依存関係ツリー

これは上のセクションの内容とにていますが、これは上記の各データをツリー構造に結合したものです。

依存関係は以下のようなイメージです。

備考

実線、点線、破線はそれぞれ dependsoftdependloadbefore に対応しています。

Image