セットアップ
ldbcを使い始めるための最初のステップへようこそ!このページでは、開発環境とデータベースを準備する方法を説明します。
必要なもの
- JDK 21以上
- Scala 3
- Docker(データベース環境のため)
- Scala CLI(推奨)
データベースセットアップ
まず、Dockerを使用してMySQLデータベースを起動します。以下のdocker-compose.ymlファイルを作成してください:
services:
  mysql:
    image: mysql:8.4.0
    container_name: ldbc
    ports:
      - 13306:3306
    volumes:
      - ./database:/docker-entrypoint-initdb.d
    healthcheck:
      test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ]
      timeout: 20s
      retries: 10次に、databaseディレクトリに以下のSQLファイルを作成して、ユーザーと初期データを設定します:
-- user.sql
CREATE USER 'ldbc'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO ldbc;-- schema.sql
CREATE DATABASE IF NOT EXISTS sandbox_db;
USE sandbox_db;
-- テーブル作成
CREATE TABLE IF NOT EXISTS `user` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(50) NOT NULL,
  `email` VARCHAR(100) NOT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS `product` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(100) NOT NULL,
  `price` DECIMAL(10, 2) NOT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS `order` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `user_id` INT NOT NULL,
  `product_id` INT NOT NULL,
  `order_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `quantity` INT NOT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (user_id) REFERENCES `user` (id),
  FOREIGN KEY (product_id) REFERENCES `product` (id)
);
-- 初期データ投入
INSERT INTO user (name, email) VALUES
  ('Alice', 'alice@example.com'),
  ('Bob', 'bob@example.com'),
  ('Charlie', 'charlie@example.com');
INSERT INTO product (name, price) VALUES
  ('Laptop', 999.99),
  ('Mouse', 19.99),
  ('Keyboard', 49.99),
  ('Monitor', 199.99);
INSERT INTO `order` (user_id, product_id, quantity) VALUES
  (1, 1, 1), -- Alice ordered 1 Laptop
  (1, 2, 2), -- Alice ordered 2 Mice
  (2, 3, 1), -- Bob ordered 1 Keyboard
  (3, 4, 1); -- Charlie ordered 1 MonitorDocker Composeを使ってデータベースを起動します:
docker compose up -dScalaプロジェクトのセットアップ
このチュートリアルではScala CLIを使用して簡単に始められるようにしています。まだインストールしていない場合は、以下のコマンドでインストールできます:
# macOSの場合
brew install Virtuslab/scala-cli/scala-cli
# その他のOSはScala CLIの公式サイトを参照してくださいはじめてのldbcプロジェクト
新しいディレクトリを作成し、最初のldbcプロジェクトを設定します:
mkdir ldbc-tutorial
cd ldbc-tutorial
touch FirstSteps.scalaFirstSteps.scalaに以下のコードを記述します:
//> using scala "3.3.7"
//> using dep "io.github.takapi327::ldbc-dsl:0.4.1"
//> using dep "io.github.takapi327::ldbc-connector:0.4.1"
import cats.effect.*
import cats.syntax.all.*
import ldbc.connector.*
import ldbc.dsl.*
object FirstSteps extends IOApp.Simple:
  // 単純な定数を返すプログラム
  val simpleProgram: DBIO[Int] = DBIO.pure(0)
  
  // データベース接続設定
  val datasource = MySQLDataSource
    .build[IO]("127.0.0.1", 13306, "ldbc")
    .setPassword("password")
    .setDatabase("sandbox_db")
    .setSSL(SSL.Trusted)
  
  // Connectorを作成
  val connector = Connector.fromDataSource(datasource)
  
  def run: IO[Unit] =
    // プログラムの実行
    simpleProgram.readOnly(connector).flatMap { result =>
      IO.println(s"データベースから取得した値: $result")
    }Scala CLIを使ってプログラムを実行します:
scala-cli FirstSteps.scala「データベースから取得した値: 42」と表示されれば成功です!これは実際にはデータベースに問い合わせていませんが、ldbcの基本的な構造と接続の設定ができていることを確認できました。
自動セットアップスクリプト(オプション)
すべてのセットアップを自動で行うScala CLIスクリプトも用意しています:
scala-cli https://github.com/takapi327/ldbc/tree/master/docs/src/main/scala/00-Setup.scala --dependency io.github.takapi327::ldbc-dsl:0.4.1 --dependency io.github.takapi327::ldbc-connector:0.4.1次のステップ
これでldbcを使用する準備が整いました!次はコネクションに進み、データベース接続の詳細について学びましょう。