ER図自動生成のためにLiam ERDを試験導入してみました!

2025/05/26

Liam ERD はER図の自動生成ツールで、 PostgreSQL, MySQL (tbls), Prisma, Ruby on Railsなど様々なフォーマットに対応しています。(対応状況GitHub Trending でも上位にランクインしており、 リリースから3ヶ月で3,000スターを超えるなど注目を集めています。

本記事では、Ruby on Railsプロジェクトで schema.rb からER図を生成する方法を紹介します。

今回作成したサンプル

サンプル用に適当なスキーマをLLMに生成してもらいました。

# schema.rb
create_table "owners", force: :cascade do |t|
  t.string "name", null: false
  t.string "email", null: false
  t.string "phone"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.index ["email"], name: "index_owners_on_email", unique: true
end
 
# 以降、テーブル名のみ表記
create_table "animals", force: :cascade do |t|
end
 
create_table "appointments", force: :cascade do |t|
end
 
create_table "vaccinations", force: :cascade do |t|
end
 
create_table "clinics", force: :cascade do |t|
end
 
create_table "vets", force: :cascade do |t|
end
 
create_table "visits", force: :cascade do |t|
end
 
add_foreign_key "animals", "owners"
add_foreign_key "appointments", "animals"
add_foreign_key "vaccinations", "animals"
add_foreign_key "vets", "clinics"
add_foreign_key "visits", "animals"
add_foreign_key "visits", "vets"

このスキーマから次のコマンドでER図を生成します。

npx @liam-hq/cli erd build --format schemarb --input schema.rb --output-dir dist

生成されたER図は以下のようになります。インタラクティブに操作できるので、マウスオーバーで関連するテーブルを表示したり、テーブルをクリックして詳細を確認したりできます。

生成されたER図
生成されたER図

導入手順

Dockerコンテナ内で schema.rb からER図をビルドし、http-server で配信する方針で進めます。

Dockerfile

# Dockerfile
FROM node:22-slim
 
WORKDIR /app
 
ARG LIAM_VERSION=0.5.5
 
RUN npm install @liam-hq/cli@${LIAM_VERSION} http-server
 
COPY db/schemas/schema.rb .
 
RUN npx @liam-hq/cli@${LIAM_VERSION} erd build \
          --format schemarb --input schema.rb --output-dir dist

Docker Compose

Docker Composeでコンテナ起動時にhttp-serverを実行し、ER図を配信しています。 http-server はデフォルトでCache-Controlヘッダが付いているので、-c-1 オプションを指定してキャッシュを無効化する必要がありそうです。

また、schema.rb からホットリロードできるように、Docker Compose Watch の設定 (developセクション ) を追加しています。 この設定により、schema.rb を変更を検知してコンテナが再ビルドされ、ER図が自動生成されます。

# compose.tools.yaml
services:
  liam:
    build:
      context: .
      dockerfile: Dockerfile
    command: npx http-server --port 1234 dist -c-1
    ports:
      - 1234:1234
    develop:
      watch:
        - action: rebuild
          path: schema.rb

コンテナの起動

Makefile に起動用のコマンドを追加しています。 今回作成したコンテナを含むツール用のコンテナは compose.tools.yaml にまとめており、 -p tools のように別のプロジェクト名を指定することで他のコンテナと分離しています。

# Makefile
tools:
	docker compose -f compose.tools.yaml -p tools watch

社内ネットワークで公開

GitHub ActionsでS3にデプロイします。 本プロジェクトでは、Liam ERD以外にも社内用に公開しているコンテンツがあるため、ビルド先をs3_upload/er-diagram にしています。

name: Deploy Docs to S3
 
on:
  push:
    branches:
      - develop
 
permissions:
  contents: read
  pages: write
  id-token: write
 
env:
  LIAM_VERSION: '0.5.5'
  OPENAPI_GENERATE_HTML_VERSION: '0.4.3'
 
jobs:
  deploy:
    runs-on: ubuntu-latest
 
    steps:
      - name: Checkout
        uses: actions/checkout@v4
 
      - name: Install Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
 
      - name: Cache Node.js modules
        uses: actions/cache@v3
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-${{ env.LIAM_VERSION }}-${{ env.OPENAPI_GENERATE_HTML_VERSION }}
          restore-keys: |
            ${{ runner.os }}-node
 
      - name: Build Liam ERD
        run: |
          mkdir -p s3_upload/er-diagram
          npx @liam-hq/cli@${{ env.LIAM_VERSION }} erd build --format schemarb --input db/schemas/schema.rb --output-dir s3_upload/er-diagram
 
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          role-to-assume: arn:aws:iam::${{ secrets.SAMPLE_AWS_ACCOUNT_ID }}:role/sample-github-actions-role
          aws-region: ap-northeast-1
 
      - name: Deploy to S3
        run: |
          aws s3 sync s3_upload/ s3://${{ secrets.SAMPLE_S3_BUCKET_NAME }} --delete

まとめ

本記事では、Liam ERDを試験導入してRuby on Railsプロジェクトの schema.rb からER図を自動生成する方法を紹介しました。 Dockerを利用した環境構築やホットリロードの設定、GitHub ActionsによるS3へのデプロイ方法についても解説しました。 皆さんのお役に立てれば幸いです。

2025年新卒入社