もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

tblsを使ってDBのドキュメントを自動生成するようにした

はじめに

こんばんは。

先週は自分の家の引っ越し、今週は両親の引越の手伝いで、ブログが全く書けていなく、WBEW退会待ったなしになっている私です。

今回はお世話になっているお仕事で、 以前ブログにも書いた tbls を使ってドキュメントを自動生成した話をブログに残します。

退会が迫っているので一気になぐり書きしたので、間違ってる箇所あるかもです。。。

今回は circleciを使って、developブランチにマージされた段階で tblsの自動生成が走るようにしました。

たぶん自動更新というよりは、 tbls diff を使って、ドキュメント更新を促すというのが本来の使い方なのかなと思っていますが、今回は circleci で pushまでしちゃってます。

ちなみに tblsの以前の記事はこちらです。

kojirooooocks.hatenablog.com

kojirooooocks.hatenablog.com

やってみた

circleciの config.ymlは以下のとおりです。 ブログ化するために消しちゃったのですが、本来はphpunitを実行するための記述とかもあるので、少し冗長な感じになっております。

Laravelプロジェクトのマイグレーションを実行して、circleciのDBにテーブルを作成して、そこからtblsでドキュメントを作成しています。

前提として、circleciで登録している githubssh keyに Allow write access がついている必要があります。

version: 2.1

executors:
  default:
    docker:
      - image: circleci/php:7.3.5-apache
      - image: circleci/mysql:5.7-ram

commands:
  setup_infrastructure:
    steps:
      - run: sudo apt update
      - run: sudo apt-get install -y libpng-dev graphviz
      - run: sudo docker-php-ext-install pdo_mysql gd
  setup_application:
    steps:
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "composer.json" }}
            - v1-dependencies-
      - run: composer install -n --prefer-dist
      - save_cache:
          key: v1-dependencies-{{ checksum "composer.json" }}
          paths:
            - ./vendor
      - run: php artisan config:clear
  execute_tbls:
    steps:
      - run:
          command: |
            cd ./vendor
            wget https://github.com/k1LoW/tbls/releases/download/v1.19.0/tbls_v1.19.0_linux_amd64.tar.gz
            tar zxvf tbls_v1.19.0_linux_amd64.tar.gz
            ./tbls doc mysql://$DB_USERNAME:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_DATABASE ../docs/schema -f


jobs:
  tbls:
    executor:
      name: default
    environment:
      - APP_DEBUG: false
      - APP_ENV: develop
      - DB_DATABASE: circle_test
      - DB_HOST: 127.0.0.1
      - DB_USERNAME: root
      - DB_PASSWORD: ""
      - DB_PORT: 3306
      - MYSQL_ALLOW_EMPTY_PASSWORD: true
    steps:
      - checkout
      - add_ssh_keys:
          fingerprints:
            - "4d:f1:9a:38:98:3a:cb:3d:c6:c9:e7:bd:75:57:fe:14"
      - setup_infrastructure
      - setup_application
      - run: php artisan migrate:fresh
      - execute_tbls
      - run: ./.circleci/push_database_documents.sh develop


workflows:
  version: 2
  build:
    jobs:
      - tbls:
          filters:
            branches:
              only: develop

PRにDB構造の変化がない場合は、git commit 時にエラーステータスが返ってきちゃうので、そのへんの判断は シェルでやっちゃいました。

MODIFY_FILE_COUNT=`git status | grep docs/schema | wc -l`
if [ $MODIFY_FILE_COUNT -ne 0 ]; then
  git config user.email "example_kojircok@gmail.com"
  git config user.name "circleci"
  git add docs/schema
  git commit -m 'update database documents'
  git push origin $1
fi

現状は問題は特に出ておらず、いい感じです。

終わりに

WBEW発足者として退会になるわけにはいかないという理由でなんとか書きました。

マジで危なかった。

もっとこうしたほうがいいとかあれば教えてもらいたいです!

現場からは以上です。

あと 光の開通工事までレンタルで貸し出された Softbank Air死ぬほど重い。