Documentation

alisql

test alisql at crates.io alisql at docs.rs

SQL ファイル内の Jinja2 {{ ref() }} マクロを解析して、テーブル間の依存関係を抽出・可視化するツールです。


インストール

cargo install alisql

または Releases からプラットフォーム別のバイナリをダウンロードできます。


CLI

deps — 依存関係を表示

# テキスト形式(デフォルト)
alisql deps ./sql

# JSON形式
alisql deps ./sql --format json

# 探索する深さを指定(デフォルト: 5)
alisql deps ./sql --max-depth 3

出力例(text):

[sample]
  <- db.users
  <- role
[sample2]
  <- db.sales
  <- db.sale_detail

出力例(json):

[
  {
    "table": "sample",
    "depends_on": ["db.users", "role"]
  },
  {
    "table": "sample2",
    "depends_on": ["db.sales", "db.sale_detail"]
  }
]

graph — Mermaid 図を出力

# デフォルト(上から下: TD)
alisql graph ./sql

# 向きを指定(TB / TD / BT / RL / LR)
alisql graph ./sql --orientation lr

出力例:

graph TD;
db.users --> sample;
role --> sample;
db.sales --> sample2;
db.sale_detail --> sample2;

GitHub や Notion などで Mermaid をレンダリングすると、次のようなグラフになります。

graph TD;
db.users --> sample;
role --> sample;
db.sales --> sample2;
db.sale_detail --> sample2;

Rust ライブラリとして使う

# Cargo.toml
[dependencies]
alisql = "0.2"

依存関係を取得

let tables = alisql::get_dependencies("./sql", 5);
for table in &tables {
    println!("{} depends on {:?}", table.table, table.depends_on);
}

Mermaid 図を取得

let graph = alisql::get_mermaid("./sql", "TD", 5);
println!("{}", graph);

SQL ファイルの書き方

{{ ref("table") }} または {{ ref("schema", "table") }} の形式で依存テーブルを参照します。

-- sql/orders.sql
select o.*, u.name
from {{ ref("db", "orders") }} as o
left join {{ ref("users") }} as u on o.user_id = u.id

このファイルを解析すると、orders テーブルが db.ordersusers に依存していることが分かります。