SchemaSPYドキュメントの生成

この章では、LDBCで構築したテーブル定義を使用して、SchemaSPYドキュメントの作成を行うための方法について説明します。

プロジェクトに以下の依存関係を設定する必要があります。

libraryDependencies += "io.github.takapi327" %% "ldbc-schemaspy" % "0.3.0-beta8"

LDBCでのテーブル定義方法をまだ読んでいない場合は、テーブル定義の章を先に読むことをオススメしましす。

以下のコード例では、以下のimportを想定しています。

import ldbc.core.*
import ldbc.schemaspy.SchemaSpyGenerator

テーブル定義から生成

SchemaSPYはデータベースへ接続を行いMeta情報やテーブル構造を取得しその情報を元にドキュメントを生成しますが、LDBCではデータベースへの接続は行わずLDBCで構築したテーブル構造を使用してSchemaSPYのドキュメントを生成します。 データベースへの接続を行わないためシンプルにSchemaSPYを使用して生成したドキュメントと乖離する項目があります。例えば、現在テーブルに保存されているレコード数などの情報は表示することができません。

ドキュメントを生成するためにはデータベースの情報が必要です。LDBCではデータベースの情報を表現するためのtraitが存在しています。

ldbc.core.Databaseを使用してデータベース情報を構築したサンプルは以下になります。

case class SampleLdbcDatabase(
  schemaMeta: Option[String] = None,
  catalog: Option[String] = Some("def"),
  host: String = "127.0.0.1",
  port: Int = 3306
) extends Database:

  override val databaseType: Database.Type = Database.Type.MySQL

  override val name: String = "sample_ldbc"

  override val schema: String = "sample_ldbc"

  override val character: Option[Character] = None

  override val collate: Option[Collate] = None

  override val tables = Set(
    ... // LDBCで構築したテーブル構造を列挙
  )

SchemaSPYのドキュメント生成にはSchemaSpyGeneratorを使用します。生成したデータベース定義をdefaultメソッドに渡し、generateを呼び出すと第2引数に指定したファイルの場所にSchemaSPYのファイル群が生成されます。

@main
def run(): Unit =
  val file = java.io.File("document")
  SchemaSpyGenerator.default(SampleLdbcDatabase(), file).generate()

生成されたファイルのindex.htmlを開くとSchemaSPYのドキュメントを確認することができます。

データベース接続から生成

SchemaSpyGeneratorにはconnectメソッドも存在しています。こちらは標準のSchemaSpyの生成方法と同様にデータベースに接続を行いドキュメントの生成を行います。

@main
def run(): Unit =
  val file = java.io.File("document")
  SchemaSpyGenerator.connect(SampleLdbcDatabase(), "user name", "password" file).generate()

データベース接続を行う処理はSchemaSpy内部のJavaで書かれた実装で行われます。そのためEffectシステムでスレッドなどが管理されていないことに注意してください。