> ## 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用のVillageSQL Serverをソースコードからコンパイルし、拡張機能の使用を開始します。

## 概要

ソースコードからVillageSQLをビルドすると、最新の機能を利用でき、特定の環境に合わせてビルドをカスタマイズできます。

以下の手順では、アップストリームのMySQL 8.4上にVillageSQLをビルドします。VillageSQLは、代替のコードベースとしてPercona Server上にもビルドできます。[Percona Server で始める](https://villagesql.com/docs/ja/8.4/stable/percona.md)のページを参照してください。

## 前提条件

開始する前に、次のものがインストールされていることを確認してください。

* **Git** - リポジトリのクローン用
* **サポートされているプラットフォーム** - DebianまたはUbuntu Linux、あるいは[Homebrew](https://brew.sh)を導入したmacOS

リポジトリには、CMakeとビルドに必要な開発ライブラリをインストールするスクリプトが含まれています。Linuxではコンパイラーもインストールします。macOSではXcode Command Line Toolsがコンパイラーを提供します。ステップ2でこのスクリプトを実行するため、これらのパッケージを自分でインストールする必要はありません。

## ステップ1：リポジトリのクローン

GitHubからVillageSQL Serverリポジトリをクローンします。以下のCMakeの手順が変更なしで機能するように、ホームディレクトリにクローンします。

```bash theme={null}
cd "$HOME"
git clone --depth 1 -b publish/mysql-8.4_0.0.7 https://github.com/villagesql/villagesql-server.git
cd villagesql-server
```

> [!NOTE]
>
> MySQLのコードベースが含まれているため、リポジトリのサイズは数GBあります。

## ステップ2：ビルド依存関係のインストール

クローンしたリポジトリからセットアップスクリプトを実行します。このスクリプトはオペレーティングシステムを検出し、ビルドに必要なパッケージをインストールします。

```bash theme={null}
cd "$HOME/villagesql-server"
villagesql/bld_tools/setup_build_env.sh
```

Linuxでは、スクリプトは`apt-get`を使用し、`sudo`を要求します。macOSでは、Homebrewを使用します。VillageSQLのCIも同じスクリプトでビルド依存関係をインストールするため、パッケージの一覧は常にビルドの内容に追随します。

> [!NOTE]
>
> このスクリプトはDebianまたはUbuntu Linux、およびmacOSをサポートしています。それ以外のLinuxディストリビューションでは、`villagesql/bld_tools/setup_linux_build_env.sh`を読み、同等のパッケージを各自のパッケージマネージャーでインストールしてください。

## ステップ3：CMakeによる設定

リポジトリの外部にビルドディレクトリを作成し、プロジェクトを設定します。

```bash theme={null}
# Create build directory (outside the repo)
mkdir -p "$HOME/build/villagesql"
cd "$HOME/build/villagesql"

# Configure with CMake
cmake "$HOME/villagesql-server" -DWITH_DEBUG=1
```

macOSでは、OpenSSL 3のディレクトリも指定してください。Homebrewのバージョン指定のない`openssl`は現在OpenSSL 4であり、サーバーはOpenSSL 4ではビルドできません。

```bash theme={null}
cmake "$HOME/villagesql-server" -DWITH_DEBUG=1 \
  -DWITH_SSL="$(brew --prefix openssl@3)"
```

> [!NOTE]
>
> パスは両方のプラットフォームで`~`ではなく`$HOME`を使用します。シェルは単語の先頭にある`~`しか展開しないため、`--datadir=~/mysql-data/data`は`~`という名前のディレクトリとして`mysqld`に渡され、サーバーは異常終了します。また、`"$HOME/..."`と引用符で囲むことで、ホームディレクトリ名にスペースが含まれる場合でもパスが分割されません。リポジトリのパスが異なる場合は、実際のクローン場所に置き換えてください。

### CMakeオプションの説明

* `"$HOME/villagesql-server"` - クローンされたVillageSQLリポジトリへのパス
* `-DWITH_DEBUG=1` - DBUG機能とアサーションを有効にした、最適化なしのビルドを行います（開発に推奨）
* `-DWITH_SSL="$(brew --prefix openssl@3)"` - cmakeにOpenSSL 3の場所を指定します。ステップ2で`openssl@3`がインストールされます。ステップ2を省略した場合は、先に`brew install openssl@3`を実行してください。`brew --prefix openssl@3`はパッケージが存在しない場合でもパスを出力するため、cmakeは`Wrong option or path for WITH_SSL=`で停止します。

### その他のCMakeオプション

**プロダクションビルド:**

```bash theme={null}
cmake "$HOME/villagesql-server"
```

**カスタムコンパイルコメント付き:**

```bash theme={null}
cmake "$HOME/villagesql-server" -DWITH_DEBUG=1 \
      -DCOMPILATION_COMMENT="VillageSQL Version of MySQL"
```

> [!NOTE]
>
> 再設定する必要がある場合は、最初にCMakeキャッシュをクリアします（ビルドディレクトリ内から実行します）。
>
> ```bash theme={null}
> rm CMakeCache.txt
> ```

## ステップ4：コードのコンパイル

makeを使用して、並列コンパイルでVillageSQLをビルドします。ビルドディレクトリ内から：

**すべてをビルドします（推奨）:**

```bash theme={null}
make -j10
```

このコマンドは、サーバー、[ステップ7](#step-7-connect-with-mysql-client)で接続に使用する`mysql`クライアント、拡張機能SDK、およびサンプル拡張機能のVEBファイルをビルドします。

**サーバーとクライアントのみをビルドします:**

```bash theme={null}
make -j10 mysqld mysql
```

この組み合わせは高速ですが、拡張機能SDKとサンプルのVEBファイルはビルドされません。そのため、`INSTALL EXTENSION vsql_complex`はインストールするバンドルを見つけられず、`-DVillageSQL_BUILD_DIR`を渡す拡張機能のビルドはSDKを見つけられません。

> [!TIP]
>
> 並列数（`-j10`）は、CPUコア数に基づいて調整します。システムの応答性を維持するために、合計コア数から2〜4を引いてください。たとえば、12コアのマシンでは、`-j10`を使用します。

完了したら、サーバーとクライアントのバイナリがビルドされたことを確認します。

```bash theme={null}
ls "$HOME/build/villagesql/bin/mysqld" "$HOME/build/villagesql/bin/mysql"
```

## ステップ5：データベースの初期化

サーバーを初めて起動する前に、データディレクトリを初期化します。

プロダクション（生成されたパスワードを使用 - 推奨）：

```bash theme={null}
mkdir -p "$HOME/mysql-data/data"
"$HOME/build/villagesql/bin/mysqld" --initialize --datadir="$HOME/mysql-data/data" --basedir="$HOME/build/villagesql"
```

開発（パスワードなし - オプション）：

```bash theme={null}
mkdir -p "$HOME/mysql-data/data"
"$HOME/build/villagesql/bin/mysqld" --initialize-insecure --datadir="$HOME/mysql-data/data" --basedir="$HOME/build/villagesql"
```

> [!NOTE]
>
> プロダクションのような設定では、`--initialize`（パスワード付き）を使用します。ローカル開発およびテストでのみ、`--initialize-insecure`（パスワードなし）を使用します。`--initialize`を使用すると、一時的なパスワードが生成され、コンソールに出力されます：`A temporary password is generated for root@localhost: <password>`

システムデータベースが作成されたことを確認し、初期化が成功したことを検証します。

```bash theme={null}
ls "$HOME/mysql-data/data/mysql"
```

## ステップ6：サーバーの起動

VillageSQLサーバーを起動します。

```bash theme={null}
"$HOME/build/villagesql/bin/mysqld" --gdb --datadir="$HOME/mysql-data/data" --basedir="$HOME/build/villagesql"
```

**rootとして実行する場合（Dockerまたはsudo）：**

```bash theme={null}
"$HOME/build/villagesql/bin/mysqld" --user=root --gdb --datadir="$HOME/mysql-data/data" --basedir="$HOME/build/villagesql"
```

> [!TIP]
>
> `--gdb`フラグは`SIGINT`のブロックを解除するため、ターミナルから実行しているときにCtrl-Cを押すとサーバーが停止します。また、クラッシュ時のバックトレースを抑制し、`--core-file`を無効にするため、クラッシュレポートが必要な場合は指定しないでください。バックグラウンドで実行するには、`mysqld`コマンドに`--daemonize`を追加します。

## ステップ7：MySQLクライアントでの接続

新しいターミナルを開き、MySQLクライアントを使用してサーバーに接続します。

`--initialize-insecure`（パスワードなし）を使用する場合：

```bash theme={null}
"$HOME/build/villagesql/bin/mysql" -u root
```

`--initialize`（生成されたパスワードを使用）を使用する場合：

```bash theme={null}
"$HOME/build/villagesql/bin/mysql" -u root -p
# Enter the temporary password printed during initialization
```

MySQLプロンプトが表示されるはずです。

```
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: <version> Source distribution

mysql>
```

### rootパスワードの変更

`--initialize`を使用した場合は、一時パスワードを変更します。

```sql theme={null}
SET PASSWORD = 'your-secure-password';
```

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

VillageSQLが実行されていることを確認します。

```sql theme={null}
SELECT VERSION();
```

開発ビルドには、バージョン文字列にgitコミットハッシュが含まれます。

```
8.4.11-villagesql-0.0.7-dev-689c74a9-debug
```

## ステップ8：ユーザーとデータベースの設定

### 開発ユーザーの作成

日常的な開発のために、root以外のユーザーを作成します。

```sql theme={null}
-- Create user
CREATE USER developer IDENTIFIED BY 'dev-password';

-- Grant all privileges
GRANT ALL PRIVILEGES ON *.* TO developer;
```

終了して、新しいユーザーとして再接続します。

```bash theme={null}
# Ctrl-D to exit
"$HOME/build/villagesql/bin/mysql" -u developer -p
```

### データベースの作成

```sql theme={null}
CREATE DATABASE my_database;
USE my_database;
```

> [!TIP]
>
> 特定のデータベースに接続します：`"$HOME/build/villagesql/bin/mysql" -u developer -p -D my_database`

## ステップ9：テストの実行

ビルドディレクトリから、VillageSQLのテストスイートでビルドを検証します。テストは一般ユーザーとして実行してください。rootとして実行すると、テストランナーは一部のテストをスキップし、そのうちの1つが失敗します。

```bash theme={null}
cd "$HOME/build/villagesql"
mysql-test/mysql-test-run.pl --do-suite=villagesql --nounit-tests --parallel=auto
```

`--nounit-tests`は、既知の失敗を含むアップストリームMySQLのユニットテストをスキップします。VillageSQLのユニットテストは別途実行します。

```bash theme={null}
make -j10 villagesql-unit-tests && ctest -L villagesql
```

テストが失敗すると、どちらのコマンドもゼロ以外で終了します。

GDBデバッグ、個別のテストの実行、期待される結果の再記録、サーバーコードベースへの貢献については、[サーバー開発ガイド](https://villagesql.com/docs/ja/8.4/stable/server-development.md)を参照してください。

## ネイティブパッケージ（RPM/DEB）のビルド

`villagesql/bld_tools/build_deb.sh`と`build_rpm.sh`は、上記の手動の手順に従う代わりにパッケージマネージャーでインストールできるように、ソースツリーから直接DebianまたはRPMパッケージをビルドします。どちらも事前のCMake configureを必要としません。両方とも、リポジトリのルートにある`VSQL_VERSION`ファイルと`MYSQL_VERSION`ファイルからパッケージのバージョンを導出します。ステップ1〜2を完了した状態で、パッケージングツールと、ステップ2では入らないビルド依存関係をインストールします。Debian/Ubuntuでは`dpkg-dev`、`debhelper`、`libcurl4-openssl-dev`、`libsystemd-dev`、`systemd-dev`、Enterprise Linuxでは`rpm-build`です。その後、リポジトリのルートからどちらかを実行します。

```bash theme={null}
cd "$HOME/villagesql-server"
villagesql/bld_tools/build_deb.sh   # writes to ./debs
# or
villagesql/bld_tools/build_rpm.sh   # writes to ./rpms
```

このツールを追加した[villagesql-server#931](https://github.com/villagesql/villagesql-server/pull/931)によると、生成されたパッケージは、ターゲットホスト上の既存のMySQLインストールと並行してインストールされるのではなく、それを置き換えます。

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

### ビルドが依存関係の欠如で失敗する

セットアップスクリプトをもう一度実行します。[ステップ3](#step-3-configure-with-cmake)ではビルドディレクトリにいるため、スクリプトの絶対パスを指定します。

```bash theme={null}
"$HOME/villagesql-server/villagesql/bld_tools/setup_build_env.sh"
```

エラーメッセージで、欠落している具体的なライブラリを確認します。

### サーバーが起動しない

* データディレクトリが初期化されていることを確認します：`ls "$HOME/mysql-data/data/"`
* 別のMySQL/VillageSQLインスタンスがポート3306を使用していないことを確認します
* `mysqld`がターミナルに出力するメッセージを読むか、`--log-error="$HOME/mysql-data/error.log"`を付けて起動し、そのファイルを読みます

### 拡張機能のインストールが失敗する

* 拡張機能の`.veb`ファイルが`veb_dir`ディレクトリ（ソースビルドでは`$HOME/build/villagesql/lib/veb`）に存在し、そのライブラリがLinuxとmacOSの両方で`<extension_name>.so`という名前であることを確認します
* VillageSQLが拡張機能をロードするために必要な権限を持っていることを確認します
* 拡張機能の名前と`.veb`ファイル名が正しいことを確認します

## 次のステップ

> [card] [拡張機能の使用](https://villagesql.com/docs/ja/extensions/install.md)
>
> VillageSQL拡張機能をインストール、更新、および管理する方法を学びます。

> [card] [拡張機能の作成](https://villagesql.com/docs/ja/extensions/build/create.md)
>
> VillageSQL用の独自のカスタム拡張機能を構築します。

> [card] [インストール](https://villagesql.com/docs/ja/8.4/stable/install-server.md)
>
> VillageSQLのクイックスタートガイド。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.