🌊

Pythonと無料で使用できるAIでテーブル定義書を自動生成してみた

に公開

はじめに

業務で初めてPythonに触れたのをきっかけに、何かひとつ形になるものを作ってみたいと思っていました。
せっかくならAIも軽く使ってみたいな〜という気持ちもあり、アイデアを探していたところ、
「あ、そういえば昔の案件でテーブル定義書を作ってなかったな…」とふと思い出しました。

慌てて対応したものの、テーブル数が多くてめちゃくちゃ大変だったので、
「これは自動化できたら便利かも!」ということで、テーブル定義書自動生成スクリプトをPythonで作ってみました。

なお、A5:SQL Mk-2 や SchemaSpy などの優れたツールがすでにあるのは承知していますが、
あくまで Pythonの学習とGCPまわりの勉強 を兼ねて、自作してみたという位置づけです。

技術スタック

  • 言語: Python
  • クラウドサービス: Google Cloud Platform
    • Google Drive API(スプレッドシート作成)
    • Google Spreadsheet API(シート操作)
    • OAuth認証(サービスアカウント使用)
  • AI連携: Google AI Studio(API Key 経由でプロンプトを実行)

やったこと

MySQLのスキーマ情報(テーブル名、カラム名、型、NULL許容、デフォルト値、コメントなど)を取得し、Googleスプレッドシートに定義書形式で出力するスクリプトを書きました。

全体の処理フローは以下の通りです:

  1. PythonでMySQLに接続し、INFORMATION_SCHEMAからスキーマ情報を取得
  2. GoogleのOAuth認証を通じて、DriveとSpreadsheet APIにアクセス
  3. スキーマ情報を定義書フォーマットに整形
  4. Google Spreadsheetとして新規ファイルを作成&出力

実行すると・・・

目次 テーブル定義

Github

https://github.com/kaede-popcorn/python-auto-db-schema
(環境構築、実行手順はREADMEに記載されていますので、そちらをご参考ください)

解説

起動解説

名前設定

処理を実行すると、名前を設定入力欄が表示されます
スプレッドシートの作成者欄に記載する名前を入力してください

Oauth認証

初回実行、認証有効期限切れ 時に 認証コード の入力欄が表示されます
コード入力欄上部に認証用のURLが表示されているため、こちらを開きます

選択するユーザはGoogleCloudのOauth設定で追加したユーザを選択
その後、アクセス権を付与する画面に遷移するので、すべてのチェックボックスにチェックをしてください

チェック後続行を押下すると、認証コードが出力されます
こちらをコピーして、コマンドの認証コード入力欄に貼り付けます

認証が成功すると、自動作成が開始されます。

処理解説

AI補完(ai_utils.py)

  • システム名/テーブル論理名/用途に関して、テーブル名/カラム名をもとに下記プロンプトを使用して取得しています。
あなたは、データベースのテーブル定義から特定の情報を抽出する専門家です。
次の入力から「システム名(system_name)」「テーブルの論理名(table_name_kana)」「用途(purpose)」の3つを日本語で抜き出して JSON 形式で返してください。
出力例: {"system_name": "○○", "table_name_kana": "△△", "purpose": "□□"}
考え方:
  1. システム名は、テーブルが属するシステムの名前を指します。 (例: テーブル名が「users」の場合、システム名は「ユーザシステム」)
  2. テーブルの論理名は、テーブルの日本語名を指します。(例: テーブル名が「users」の場合、論理名は「ユーザ」)
  3. 用途は、テーブルが何のために使用されるかを説明する文を指します。 (例: テーブル名が「users」の場合、用途は「ユーザの基本情報を管理」)

以下のようなテーブル定義があります。
  テーブル名:{table_name}
  カラム: {cloums}
  • 15件以上のテーブル + 無料モデル を使用する場合、1分間の実行上限エラーに引っかかるため、指定された再起動までの時間+5秒程度処理が一時的に止まります(時間経過後、リトライされます)

MySQL処理(mysql_utils.py)

  • MySQLに接続して、対象のデータベースに含まれる全テーブルとそのカラム情報を取得しています。
    テーブル一覧は INFORMATION_SCHEMA.TABLES、カラムの詳細はINFORMATION_SCHEMA.COLUMNSから取得しています。

スプレッドシート処理(sheet_exporter.py)

  • スキーマ情報から各テーブルのカラム構成を取得し、それを Google スプレッドシートの各シートに出力しています。
  • すべてのシートにテーブル情報を出力後、出力情報をもとに目次を作成しています

やってみた感想

  • 意外としっかりしたものが作れて嬉しかった
  • 処理を書いただけで「ツール」と言えるかは微妙だけど、初GitHubに残せたのはよかった
  • できれば、ER図まで自動で生成できるようにしたかった
  • AI APIが無料で使えるGoogleさん優しい

おわりに

今回は、業務で初めて触れた Python を使って、MySQL のスキーマ情報を Google スプレッドシート形式の定義書として自動出力する処理を作成した内容をご紹介しました。

定義書生成ツールは色々ありますが、「自分で一から作ってみる」という経験は技術的にも学びが多く、ちょっとした達成感にもつながりました。

本来は設計段階でしっかり定義書を整備しておくのが理想ですが、どうしても手が回らない状況や後追い対応になってしまうこともあると思います。
そんなときに、少しでも自動化で助けになる部分があれば嬉しいです。

今後も、実務の中で「これ自動化できそう」「学習にちょうどよさそう」と思えるネタがあれば、また試して記事にしてみようと思います!

BLT SDC Tech Blog

Discussion