> ## 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.

# 拡張機能のインストール

> 拡張機能を使用して、VillageSQLに新しい機能を追加する方法。

データベースにカスタムの型、関数、および機能を追加するには、VillageSQLの拡張機能をインストールします。

## コマンド構文

```sql theme={null}
INSTALL EXTENSION extension_name [VERSION 'version'];
```

`VERSION` が指定されると、サーバーは `{name}-{version}.veb` を開き、
バージョンをマニフェストと照合し、一致しない場合は中止します。
この句を省略すると `{name}.veb` がインストールされます。または、バージョン付きの
VEB のみが存在する場合は、一意の `{name}-{version}.veb` がインストールされます。 [バージョンの選択](#selecting-a-version)を参照してください。

<Info>
  拡張機能は、コンパイルされたライブラリとメタデータを含む`.veb`（VillageSQL拡張機能バンドル）ファイルとして配布されます。
</Info>

<h3 id="selecting-a-version">
  バージョンの選択
</h3>

`veb_dir` 内の VEB ファイルの名前は、`{name}.veb`（バージョンなし）または `{name}-{version}.veb`（バージョン付き）のいずれかになります。特定のバージョン付き VEB をインストールするには、`VERSION` 句を追加します。

```sql theme={null}
INSTALL EXTENSION vsql_uuid VERSION '0.2.0';
```

`VERSION` を指定すると、サーバーは `vsql_uuid-0.2.0.veb` を開き、その `manifest.json` 内のバージョンが `0.2.0` と一致することを確認します。

`VERSION` を指定しない場合、サーバーは次のようにファイルを解決します。

* `{name}.veb` が存在する場合は、それをインストールします。バージョンはその `manifest.json` から読み取られます。
* それ以外の場合、`{name}-{version}.veb` がちょうど 1 つ存在すれば、それをインストールします。ファイル名内のバージョンはその `manifest.json` と照合して検証されます。
* それ以外の場合、インストールは失敗し、バージョンを指定する必要があります。

<Warning>
  複数のバージョン付き VEB が存在し、バージョンなしの VEB が存在しない場合、`INSTALL EXTENSION` は `Multiple versions of extension '<name>' found in '<dir>'; specify a version with INSTALL EXTENSION <name> VERSION 'x.y.z'` で失敗します。明示的な `VERSION` 句を付けて再実行してください。
</Warning>

<h3 id="extension-naming-conventions">
  拡張機能の命名規則
</h3>

VillageSQLは、異なるコンテキストで異なる命名規則を使用します。

* **SQLコマンド:** アンダースコアを使用します: `INSTALL EXTENSION vsql_uuid`
* **リポジトリ名:** ハイフンを使用します: `github.com/villagesql/vsql-uuid`
* **ファイル名:** アンダースコアを使用します: `vsql_uuid.veb`
* **manifest.json:** SQLと一致するようにアンダースコアを使用します: `"name": "vsql_uuid"`

**例:**

```bash theme={null}
# Clone from GitHub repo (hyphens in URL)
git clone https://github.com/villagesql/vsql-uuid

# But .veb file uses underscores
ls vsql_uuid.veb

# Install with underscores (no quotes)
INSTALL EXTENSION vsql_uuid;
```

## 前提条件

* 実行中のVillageSQLサーバーインスタンス
* 管理者権限（rootまたは同等の権限）

## 組み込み拡張機能のインストール

VillageSQLに付属する組み込み拡張機能は、すでに`veb_dir`にあります。単に有効にするだけです。

```sql theme={null}
-- Connect to VillageSQL
mysql -u root -p

-- Install the extension
INSTALL EXTENSION vsql_complex;
```

### インストールの確認

```sql theme={null}
-- List installed extensions
SELECT * FROM INFORMATION_SCHEMA.EXTENSIONS;
```

**出力:**

```
+------------------+-------------------+
| EXTENSION_NAME   | EXTENSION_VERSION |
+------------------+-------------------+
| vsql_complex     | 0.0.1             |
+------------------+-------------------+
```

### 機能のテスト

```sql theme={null}
-- Create a database first
CREATE DATABASE test_db;
USE test_db;

-- Test extension functions
CREATE TABLE test (id INT, value COMPLEX);
INSERT INTO test VALUES (1, '(3,4)');
SELECT complex_abs(value) FROM test;  -- Returns 5.0

-- Clean up
DROP TABLE test;
DROP DATABASE test_db;
```

## 外部拡張機能のインストール

別途ダウンロードまたは構築された拡張機能の場合:

<Info>
  外部拡張機能をインストールする前に、サーバーで`veb_dir`を構成する必要があります。 [veb\_dirの構成](/docs/ja/mysql-8.4/0.0.5/managing#configuring-veb_dir)を参照してください。
</Info>

### 1. .vebファイルのコピー

サーバーの拡張機能ディレクトリを見つけて、`.veb`ファイルをコピーします。

```sql theme={null}
-- Find the extension directory
SHOW VARIABLES LIKE 'veb_dir';
```

```bash theme={null}
cp /path/to/my_extension.veb /path/to/veb_dir/
```

### 2. 拡張機能のインストール

```sql theme={null}
INSTALL EXTENSION my_extension;
```

想定されるバージョンを固定するには（CI やスクリプト化されたロールアウトで役立ちます）、
`VERSION` 句を含めます。

```sql theme={null}
INSTALL EXTENSION my_extension VERSION '1.2.0';
```

マニフェストが異なるバージョンを報告する場合、インストールは失敗し、何も
登録されません。

```
ERROR 3219 (HY000): Version mismatch in 'my_extension-1.2.0.veb':
filename says '1.2.0' but manifest says '0.0.1'
```

### 3. インストールの確認

```sql theme={null}
SELECT * FROM INFORMATION_SCHEMA.EXTENSIONS WHERE EXTENSION_NAME = 'my_extension';
```

## トラブルシューティング

| 問題                                                                                                                      | 解決策                                                                                                        |
| ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `Extension not found`                                                                                                   | `.veb`ファイルが`veb_dir`にあることを確認します: `SHOW VARIABLES LIKE 'veb_dir'`                                           |
| `Permission denied`                                                                                                     | ファイルのアクセス許可を確認します: `chmod 644 extension.veb`                                                               |
| `extension name mismatch`                                                                                               | 拡張機能の内部名が`.veb`ファイル名と一致しません。拡張機能を再構築します。                                                                   |
| `vef_register not found`                                                                                                | `.veb`ファイルが有効なVEFエントリポイントをエクスポートしていません。正しいSDKに対して再構築します。                                                   |
| `vef_register returned an error: ...`                                                                                   | 拡張機能の登録に失敗しました。添付されたメッセージを読んで詳細を確認してください。                                                                  |
| `Version mismatch in 'name-Y.veb': filename says 'Y' but manifest says 'X'`                                             | `VERSION` 句が `{name}-{version}.veb` を選択しますが、内部のマニフェストが異なるバージョンを報告しています。マニフェストのバージョンで再実行するか、ファイル名を修正してください。 |
| `Multiple versions of extension 'name' found in '<dir>'; specify a version with INSTALL EXTENSION name VERSION 'x.y.z'` | バージョンなしの `{name}.veb` がなく、複数の `{name}-{version}.veb` ファイルが存在します。明示的な `VERSION` 句を付けて再実行してください。             |

さらにトラブルシューティングについては、[拡張機能の管理](/docs/ja/mysql-8.4/0.0.5/managing)を参照してください。

## 次のステップ

<CardGroup cols={2}>
  <Card title="拡張機能の管理" icon="sliders" href="/docs/ja/mysql-8.4/0.0.5/managing">
    インストールされた拡張機能を監視およびトラブルシューティングします。
  </Card>

  <Card title="利用可能な拡張機能" icon="list" href="/docs/ja/mysql-8.4/0.0.5/extensions">
    インストールできる拡張機能を参照します。
  </Card>

  <Card title="拡張機能の作成" icon="code" href="/docs/ja/mysql-8.4/0.0.5/create">
    独自の拡張機能を構築します。
  </Card>
</CardGroup>
