> ## 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をビルドすると、最新の機能を利用でき、特定の環境に合わせてビルドをカスタマイズできます。

## 前提条件

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

* **Git** - リポジトリのクローン用
* **CMake** 3.16以降 - ビルドシステムジェネレーター
* **C++コンパイラー** - GCC 8+、Clang 8+、またはMSVC 2019+
* **ビルドツール** - make、ninja、または同等のもの
* **開発ライブラリ** - OpenSSL、ncurses、pkg-config、bison、およびその他のMySQL依存関係

### 依存関係のインストール

**Ubuntu/Debian:**

```bash theme={null}
sudo apt install cmake libssl-dev libncurses5-dev pkg-config bison \
                 libtirpc-dev rpcsvc-proto build-essential zlib1g-dev
```

**macOS（Homebrewを使用）:**

まず、まだインストールしていない場合は、Homebrewをインストールします。

```bash theme={null}
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

次に、依存関係をインストールします。

```bash theme={null}
brew install cmake openssl pkgconf bison libtirpc rpcsvc-proto
```

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

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

```bash theme={null}
cd $HOME
git clone --depth 1 https://github.com/villagesql/villagesql-server.git
cd villagesql-server
```

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

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

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

**Linux:**

```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 -DCMAKE_INSTALL_PREFIX=$HOME/mysql
```

**macOS:**

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

# Configure with CMake
cmake ~/villagesql-server -DWITH_DEBUG=1 -DCMAKE_INSTALL_PREFIX=~/mysql -DWITH_SSL=system
```

<Note>
  **Linuxユーザー:** 絶対パスには`$HOME`を使用します。**macOSユーザー:** `~`（チルダ）を使用します。リポジトリのパスが異なる場合は、実際のクローン場所に置き換えてください。
</Note>

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

* `<path-to-repo>` - クローンされたVillageSQLリポジトリへのパス（Linuxでは`$HOME`、macOSでは`~`を使用）
* `-DWITH_DEBUG=1` - デバッグシンボルを有効にします（開発に推奨）
* `-DCMAKE_INSTALL_PREFIX=~/mysql` - インストールディレクトリを設定します
* `-DWITH_SSL=system` - システムのOpenSSLライブラリを使用します（macOSでは必須）

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

**デバッグシンボルなしのプロダクションビルド:**

Linux:

```bash theme={null}
cmake $HOME/villagesql-server -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
```

macOS:

```bash theme={null}
cmake ~/villagesql-server -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
```

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

Linux:

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

macOS:

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

**より厳格な警告付きの開発者モード:**

Linux:

```bash theme={null}
cmake $HOME/villagesql-server -DMYSQL_MAINTAINER_MODE=ON -DWITH_DEBUG=1
```

macOS:

```bash theme={null}
cmake ~/villagesql-server -DMYSQL_MAINTAINER_MODE=ON -DWITH_DEBUG=1
```

<Note>
  再設定する必要がある場合は、最初にCMakeキャッシュをクリアします（ビルドディレクトリ内から実行します）。

  ```bash theme={null}
  rm CMakeCache.txt
  ```
</Note>

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

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

**サーバーのみをビルドします（開発に推奨）:**

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

**すべてをビルドします:**

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

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

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

**Linux:**

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

**macOS:**

```bash theme={null}
ls ~/build/villagesql/bin/mysqld
```

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

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

**Linux:**

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

```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
```

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

rootとして実行する場合（例：Docker内）、MySQLは`--user=root`フラグが必要です。

```bash theme={null}
# Initialize as root
$HOME/build/villagesql/bin/mysqld --user=root --initialize-insecure --datadir=$HOME/mysql-data/data --basedir=$HOME/build/villagesql
```

**macOS:**

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

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

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

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

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

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

**Linux:**

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

**macOS:**

```bash theme={null}
ls ~/mysql-data/data/mysql
```

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

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

**Linux:**

```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
```

**macOS:**

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

<Tip>
  `--gdb`フラグは、`SIGINT`ハンドラーをインストールするため、Ctrl-Cを押すとサーバーが正常に停止します。ターミナルから対話的に実行する場合に便利です。バックグラウンドで実行するには、`mysqld`コマンドに`--daemonize`を追加します。
</Tip>

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

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

**Linux:**

`--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
```

**macOS:**

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

```bash theme={null}
~/build/villagesql/bin/mysql -u root
```

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

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

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

```
Welcome to the VillageSQL Server for MySQL monitor.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

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

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

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

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

```
8.4.10-villagesql-0.0.5
```

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

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

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

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

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

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

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

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

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

**Linux:**

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

**macOS:**

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

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

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

<Tip>
  特定のデータベースに接続します：`mysql -u developer -p -D my_database`
</Tip>

GDBデバッグ、テストの実行、サーバーコードベースへの貢献については、[サーバー開発ガイド](/docs/ja/mysql-8.4/0.0.5/server-development)を参照してください。

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

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

プラットフォームに必要な開発パッケージをインストールします。エラーメッセージで特定の欠落しているライブラリを確認します。

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

* データディレクトリが初期化されていることを確認します：`ls ~/mysql-data/data/`
* 別のMySQL/VillageSQLインスタンスがポート3306を使用していないことを確認します
* `~/mysql-data/data/*.err`でエラーログを確認します

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

* 拡張機能ライブラリ（`.so`または`.dll`）がビルド出力に存在することを確認します
* VillageSQLが拡張機能をロードするために必要な権限を持っていることを確認します
* 拡張機能の名前と`.veb`ファイル名が正しいことを確認します

## 次のステップ

<CardGroup cols={3}>
  <Card title="拡張機能の使用" icon="puzzle-piece" href="/docs/ja/mysql-8.4/0.0.5/install">
    VillageSQL拡張機能をインストール、更新、および管理する方法を学びます。
  </Card>

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

  <Card title="はじめに" icon="rocket" href="/docs/ja/mysql-8.4/0.0.5/index">
    VillageSQLのクイックスタートガイド。
  </Card>
</CardGroup>
