> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 拡張機能またはプラグインとコンポーネント

> MySQL のネイティブプラグインまたはコンポーネントインターフェースを使用する代わりに、VEF 拡張機能を構築するタイミング。

VillageSQL は MySQL のトラッキングフォークであり、ドロップイン置換として機能します。MySQL のプラグインおよびコンポーネントインターフェースは、MySQL と同様に VillageSQL でも動作します。VillageSQL は、VillageSQL 拡張フレームワーク（VEF）を提供します。新しい機能（カスタム SQL 関数、カスタム型、統合など）を追加するには、VEF 拡張機能が適切なモデルです。

## どこに配置するか

新しいものを構築する場合は、独自のリポジトリに VEF 拡張機能を構築します。プラグインとコンポーネントも機能しますが、VEF が適切なモデルです。詳しくは、[プラグインとコンポーネントの代わりに拡張機能を使用する理由](#why-extensions-instead-of-plugins-and-components)をご覧ください。

VillageSQL Server リポジトリに属するコントリビューション:

|                             |                                                                             |
| --------------------------- | --------------------------------------------------------------------------- |
| VEF 自体の改善（新しいフックタイプ、SDK 機能） | [サーバーリポジトリ](https://github.com/villagesql/villagesql-server)への PR           |
| サーバーのバグ修正                   | [サーバーリポジトリ](https://github.com/villagesql/villagesql-server)での Issue または PR |

<h2 id="why-extensions-instead-of-plugins-and-components">
  プラグインとコンポーネントの代わりに拡張機能を使用する理由
</h2>

MySQL プラグインとコンポーネントは VillageSQL で動作します。VEF 拡張機能では、さらに多くの機能を利用できます。

* **カスタム型** — 新しい列タイプを定義できます。これは、プラグインや UDF ではできません。
* **パッケージング** — `.veb` ファイルとして配布され、`INSTALL EXTENSION` でインストールされます。
* **再起動は不要** — 拡張機能は実行時にロードおよびアンロードされます。
* **バージョン管理** — 拡張機能のマニフェストで宣言され、サーバーによって強制されます。

## 新しい拡張機能の開始

VEF には 2 つの SDK があり、どちらも同じフレームワークを通じて登録します。

* **C++** — [vsql-extension-template](https://github.com/villagesql/vsql-extension-template) が出発点です。[C++ での拡張機能の作成](/docs/ja/mysql-8.4/0.0.5/create)を参照してください。
* **Rust** — [vsql-extension-template-rust](https://github.com/villagesql/vsql-extension-template-rust) が出発点です。[Rust での拡張機能の作成](/docs/ja/mysql-8.4/0.0.5/rust-sdk)を参照してください。

現時点では C++ SDK のほうが充実しています（集約、prerun、可変長引数、システム変数とステータス変数、キーリング、列ストレージ）。Rust SDK は、関数のみの拡張機能とカスタム型に対応しています。

## VEF で必要な機能がサポートされていない場合

VEF はまだ発展中です。まだ存在しないフックまたは機能が必要な場合は、次の手順を実行します。

* **[サーバーリポジトリ](https://github.com/villagesql/villagesql-server/issues)に、必要なものを説明する Issue を提出します。**
* **リクエストがすでにある場合は、既存の Issue に賛成票を投じます。**
* **フックを VEF に追加する PR を提出します。** フレームワークの改善は、サーバーリポジトリで歓迎されます。
