GitHub Actions上でtblsを使ってスキーマ情報を取得してAIでSQLを生成する

Table of Contents

背景・動機

日頃から k1LoW/tbls を 利用しているが、個人的に気に入ってる運用をメモしておく。

試したこと・やったこと

1. GitHub ActionsでDBに入れつつtblsを実行する

tblsをセットアップするGitHub Actionとしてsetup-tbls(を作るツールとしてgh-setup)を作った にもあるとおり、k1low/setup-tbls を利用すればGitHub Actions上でtblsを簡単に利用できる。

以下はISUCONで使っているGitHub Actionsだが、Laravelでも同じように php artisan migrate すればよい。 main branchにpushされたら更新される。

  1. MySQLのセットアップ
  2. tblsをインストール
  3. DBにスキーマ情報を反映
  4. tbls docを実行する
  5. dbdoc branchに ./dbdoc を反映してpushする
name: Run db_tbls

on:
  workflow_dispatch:
  push:
    branches:
      - main

permissions:
  contents: write

jobs:
  db-tbls:
    runs-on: ubuntu-latest
    timeout-minutes: 300
    services:
      mysql:
        image: mysql:8
        options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10
        ports:
          - 3306:3306
        env:
          MYSQL_DATABASE: isuride
          MYSQL_ROOT_PASSWORD: isucon
          MYSQL_ROOT_HOST: '%'
    steps:
      - uses: actions/checkout@v4
      - uses: k1low/setup-tbls@v1

      - name: Run schema.sql
        run: mysql --host="127.0.0.1" --port=3306 --user="root" --password="isucon" isuride < webapp/sql/1-schema.sql

      - name: Run tbls for generate database document
        run: tbls doc --dsn "mysql://root:isucon@127.0.0.1:3306/isuride"

      - name: Deploy dbdob
        uses: peaceiris/actions-gh-pages@v4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./dbdoc
          publish_branch: dbdoc

2. dbdoc repoを用意する

<repo-name>-dbdoc> を用意する。

$ ghq get git@github.com:takeokunn/test-repo.git
$ mv ~/ghq/github.com/takeokunn/test-repo ~/ghq/github.com/takeokunn/test-repo-dbdoc
$ git checkout origin/main

個人的Local環境のGit Branch運用について にも書いたとおり、local branchを作らずに定期的に git fetch -p をする。

$ cd ~/ghq/github.com/takeokunn/test-repo-dbdoc
$ git fetch -p
$ git branch -D main

3. AI AgentでSQLを生成する

自分の場合は aider だが、適当なAI AgentにSQLを作成させる。

ユーザ数を計算するSQLを作成して

得られた結果・所感

運用フローが固まったのでかなりSQLを書くハードルが下がった。 tblsがCIフレンドリーだからこそできる運用フローなので作者のk1Lowさんに感謝。

今後の展開・検討事項

SQLを精度高く生成させるプロンプトを用意する。