Java + SQL Server でデータベースの全テーブル構造をMarkdownドキュメントに自動エクスポートする

特に複数人でのプロジェクト開発において、データベースのテーブル構造ドキュメントは欠かせないものです。しかし、手作業で整理するのは効率が悪く、エラーも発生しやすいのが実情です。

本記事では、Javaを使用してSQL Serverに接続し、全てのテーブル構造を自動でMarkdownファイルにエクスポートするツールを紹介します。これにより、チームで構造を確認したり、技術ドキュメントを作成したりするのが容易になります。

機能概要

  • データベース内の全テーブルを走査
  • 各テーブルのフィールド名、データ型、NULL許容性、フィールドコメントを取得
  • Markdown形式のテーブルとして出力し、構造が明確なドキュメントを生成

以下のようなシチュエーションに最適です:

  • 新規プロジェクト開始前のテーブル設計書の整理
  • DBAや開発者間での構造確認
  • プロジェクトドキュメントの資産化

技術スタック

  • Java 8 以上
  • SQL Server JDBC ドライバ
  • 標準のテキストIO(追加ライブラリ不要)

コード構成

プロジェクトは以下の2つのクラスで構成されます:

  • Exporter.java:メインプログラム。データベースに接続し、全テーブルを走査します。
  • MdWriter.java:テーブル構造をMarkdownファイルに書き込む処理を担当します。

完全なコード

Exporter.java

import java.sql.*;
import java.util.*;
import java.io.*;

public class Exporter {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:sqlserver://localhost:1433;databaseName=your_db"; // データベース名に置き換え
        String user = "sa";            // ユーザー名に置き換え
        String password = "password";  // パスワードに置き換え

        Connection conn = DriverManager.getConnection(url, user, password);
        DatabaseMetaData metaData = conn.getMetaData();

        ResultSet tables = metaData.getTables(null, null, "%", new String[]{"TABLE"});

        while (tables.next()) {
            String tableName = tables.getString("TABLE_NAME");
            List<String[]> rows = new ArrayList<>();
            ResultSet columns = metaData.getColumns(null, null, tableName, null);

            while (columns.next()) {
                String colName = columns.getString("COLUMN_NAME");
                String type = columns.getString("TYPE_NAME");
                String nullable = columns.getInt("NULLABLE") == DatabaseMetaData.columnNullable ? "YES" : "NO";
                String remarks = columns.getString("REMARKS");
                rows.add(new String[]{colName, type, nullable, remarks});
            }

            MdWriter.writeTable(tableName, rows);
        }

        conn.close();
        System.out.println("✅ エクスポート完了!");
    }
}

MdWriter.java

import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

public class MdWriter {
    public static void writeTable(String tableName, List<String[]> rows) throws IOException {
        FileWriter writer = new FileWriter(tableName + ".md");
        writer.write("### テーブル:" + tableName + "\n\n");
        writer.write("| フィールド名 | 型 | NULL許容 | 説明 |\n");
        writer.write("|--------------|------|----------|------|\n");

        for (String[] row : rows) {
            writer.write(String.format("| %s | %s | %s | %s |\n",
                    row[0], row[1], row[2], row[3] != null ? row[3] : ""));
        }

        writer.close();
    }
}

使い方

1. SQL Server ドライバの導入

Microsoft JDBC Driver for SQL Server をダウンロードし、プロジェクトに追加してください。

例えば、プロジェクトディレクトリに配置し、IDEで以下のように設定します:

sqljdbc4.jar

または、Mavenを使用する場合:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>9.4.1.jre8</version>
</dependency>

2. 接続情報の修正

Exporter.java 内の以下の部分を、実際のデータベース情報に置き換えます:

String url = "jdbc:sqlserver://localhost:1433;databaseName=your_db";
String user = "sa";
String password = "your_password";

3. 実行

メインメソッドを実行すると、プロジェクトディレクトリに各テーブルに対応した .md ファイルが生成されます。例えば、以下のような出力が得られます:

テーブル:User
フィールド名NULL許容説明
idINTNO主キー
nameVARCHARYESユーザー名

まとめ

本ツールは、データベース構造の整理を支援する実用的なものです。特に以下のような場面で役立ちます:

  • チームでのテーブル設計書の作成
  • データ構造変更時のバージョン管理
  • ドキュメントの標準化と可視性の向上

タグ: Java SQL Server JDBC Markdown データベース

7月24日 16:26 投稿