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

リポジトリには、コンパイラー、CMake、およびビルドに必要な開発ライブラリをインストールするスクリプトが含まれています。ステップ2でこのスクリプトを実行するため、これらのパッケージを自分でインストールする必要はありません。

## ステップ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：ビルド依存関係のインストール

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

```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`を読み、同等のパッケージを各自のパッケージマネージャーでインストールしてください。
</Note>

<h2 id="step-3-configure-with-cmake">
  ステップ3：CMakeによる設定
</h2>

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

```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では、CMakeがHomebrewのOpenSSLを見つけられるように`-DWITH_SSL=system`を追加します。

```bash theme={null}
cmake "$HOME/villagesql-server" -DWITH_DEBUG=1 -DCMAKE_INSTALL_PREFIX="$HOME/mysql" -DWITH_SSL=system
```

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

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

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

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

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

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

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

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

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

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

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

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

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

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

**サーバーとクライアントをビルドします（開発に推奨）:**

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

`mysql`ターゲットは、[ステップ7](#step-7-connect-with-mysql-client)で接続に使用するクライアントをビルドします。`make -j10 mysqld`だけではサーバーのみがビルドされるため、ステップ7で実行するクライアントがありません。

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

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

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

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

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

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

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

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

```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を押すとサーバーが正常に停止します。ターミナルから対話的に実行する場合に便利です。バックグラウンドで実行するには、`mysqld`コマンドに`--daemonize`を追加します。
</Tip>

<h2 id="step-7-connect-with-mysql-client">
  ステップ7：MySQLクライアントでの接続
</h2>

新しいターミナルを開き、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 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コミットハッシュが含まれます。

```
9.7.2-villagesql-0.0.6-dev-5a64e122090
```

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

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

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

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

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

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

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

セットアップスクリプトをもう一度実行します。[ステップ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を使用していないことを確認します
* `$HOME/mysql-data/data/*.err`でエラーログを確認します

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

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

## 次のステップ

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

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

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