A5:SQLを使って、テーブル定義書を自動で作成してみた話

この投稿は、アイスタイル Advent Calender 2021の4日目の投稿です。

ご挨拶

どうも、こんにちは!アイスタイル21新卒エンジニアのishidakです!!
この記事では、僕が配属されたての時に任された「テーブル定義書の作成」という業務の経験をお話します。

テーブル定義書を作成する事になった経緯

部署に配属されてから2週間経ったある日、上司から「稼働中のSQL Serverのテーブル定義書の作成」を任されました。

今回の対象となるデータベースのテーブル定義書は一部作成されていたものはあっても全量はありませんでした。
そこで、改めてテーブル定義書を整備し、不要なテーブルの洗い出しや、今後継続してメンテナンスしていくこととなりました。
また、僕は新人なので、どのようなテーブルが存在するのかを知る事も兼ねて作成してほしいという内容でした。

そして、そのDBの中身を見てみると・・・128テーブル!!?
僕がDB管理ツールとして利用しているSQL Server Management Studioでは、テーブル定義書を出力できないので、「テーブルとフィールドの論理名、物理名、データ型、キー情報等」を手入力で作成する事になります。
となると、果てしなく時間がかかる・・・。

「A5:SQL」との出会い

僕は、断固として「手入力だけはしたくない!」と思ったので、効率化を図る手段を探しました。

いろいろ探した結果、「Google Apps Script」を用いてSQL Serverからテーブル設定を取得して「スプレッドシート」にテーブル情報を出力する事によって、テーブル定義書を作成する手段があることを発見したので、上司にそれを提案しました。
しかしながら、個人情報も入っているDBを扱う上で、「Google Apps Script」のような外部のサービスを使うことは、セキュリティー面でNGだと告げられました。
希望が途絶えたと思ったその時、僕らの話を見ていた先輩が、「A5:SQL」を使った方法を提案してくれました。
ん??「A5:SQL」??(初耳)

A5:SQLとは

フリーの汎用SQLクライアントソフトです。
SQLを実行したり、テーブルを編集することはもちろん、なんとこのソフトは、テーブル定義書を出力することができます!

dockerでローカルDBを構築する

今回は、稼働中のDBからローカル環境へDBを複製します。これは、僕がまだDBを扱うのに慣れていない新人である故の誤操作防止のためです。そこで、dockerを使って、DBを構築しました!

準備

以下の2つのファイルを含めたディレクトリを用意する。
– SQL Serverからテーブル情報をダンプしたsqlファイル
– 任意の設定をしたdocker-compose.ymlファイル

version: '3'
services:
  mssql:
    image: mcr.microsoft.com/mssql/server:2017-latest
    container_name: mssql-server
    ports:
      - 1433:1433
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=<任意のパスワード>
      - MSSQL_PID=Express # SQL Serverのエディションまたはプロダクトキー
      - MSSQL_LCID=1041 #ロケールID 日本語
      - MSSQL_COLLATION=Japanese_CI_AS # 照合順

手順

  1. 準備したディレクトリ内で以下のコマンドを実行し、コンテナを作成
docker-compose up -d
  1. sqlファイルの配置
docker cp  ./init.sql mssql-server:/tmp/init.sql
  1. コンテナに入る
docker exec -it mssql-server bash
  1. sqlファイルを適用
/opt/mssql-tools/bin/sqlcmd -i /tmp/init.sql -U <任意のユーザーID> -P <任意のパスワード>

「A5:SQL」でテーブル定義書を自動作成する

  1. A5:SQLを起動
  2. 「データベースの追加と削除」をクリック
  3. 「追加」をクリック
  4. 「追加するデータベースの接続タイプを選択」で「Microsoft SQL ServerとSQL Server Compact(S)」をクリック
  5. データベースの内容を登録する
    ※<>内は、docker-compose.ymlで設定した適切な値を入れる
  6. DB名(localhost)の左の▶で「接続」をクリック

    7.ツールバーの「データベース」をクリックし、「テーブル定義書の作成」をクリックする。
     出力方式を選ぶと出力が開始されます。

これで、テーブル定義書が自動で作成されました!!

最後に

最後まで見ていただきありがとうございます!
今回は、A5:SQLを使うことによって、テーブル定義書を自動で作成してみました。
手入力で作ると途方のもない作業でしたが、ツールを使うと一瞬で作成できるので、ぜひテーブル定義書を作る時は、参考にしてみてください!