Rust(actix-web)の CRUD API をスキーマから自動生成する
テーブルの列を定義すると、d-bye は actix-web の CRUD REST API を Rust で生成します。型付きの構造体・ハンドラ・入力バリデーション・外部キー整合を含みます。API 単体ではなく、フロント(React)と PostgreSQL の DDL まで同じ設計書から横断一貫で生成され、ZIP で全文エクスポートできます。
actix-web の CRUD 生成とは
actix-web は Rust の高速な Web フレームワークです。CRUD API は、あるテーブルに対して作成・取得・更新・削除を行う REST エンドポイント群で、どのテーブルでも似た形になるためスキーマから自動生成するのに向いています。
d-bye は「設計書を起点」として、テーブル・列・制約・外部キーを定義すると、そこから actix-web のハンドラと型付き構造体を生成します。AI は生コードではなく設計書を書き、その後に型検証+コンパイルチェックを通すため、コンパイルの通らない Rust を出しません。
言語を問わず生成したい場合は「CRUD API の生成(Rust/Node 切替)」を、DB スキーマから始めたい場合は「テーブル定義書のテンプレートと書き方」も参照してください。
生成される actix API に含まれるもの
テーブルごとに、最低限これらがまとめて生成されます。
- GET /(一覧)
- ページング・並び替え対応の一覧取得ハンドラ。
- GET /{id}(単体)
- 主キーによる 1 件取得。
- POST /(作成)
- serde でデシリアライズ+バリデーション付きの作成。
- PUT/PATCH /{id}(更新)
- 部分更新・全更新。
- DELETE /{id}(削除)
- 削除(必要なら論理削除に切替可)。
- 型付き構造体 / FK 整合
- テーブルに対応する Rust 構造体、型・必須・外部キー参照の整合。
まずはスキーマを定義(コピーして使えるひな形)
下は「商品(products)」テーブルの例です。コピーして自分のテーブルに書き換え、d-bye で同じ内容をビジュアルに作ると、この定義から下のような actix-web の CRUD が生成されます。
template
| 論理名 | 物理名 | データ型 | 主キー | NOT NULL | 説明 | |--------|--------|----------|:------:|:--------:|------| | ID | id | uuid | ○ | ○ | 主キー | | 商品名 | name | varchar(120) | | ○ | 必須 | | SKU | sku | varchar(40) | | ○ | ユニーク | | 単価 | price | numeric(10,2) | | ○ | 0 以上 | | 仕入先 | supplier_id | uuid(FK) | | ○ | suppliers を参照 |
actix-web CRUD を生成する手順
- テーブルと列(型・NOT NULL・既定値・FK)を定義する。
- バックエンドのスタックを Rust(actix-web)にする。
- CRUD API を設計書から生成する。
- プレビュー/生成コードでエンドポイントの挙動を確認する。
- コードを生成し、ZIP でエクスポートする。
- cargo で自社環境にデプロイ、手で拡張する。
d-bye なら:定義から actix-web の CRUD が“動く形”で出る
上の products 定義をビジュアルに作ると、CRUD の一部はおおよそ次のような Rust コードとして生成されます(actix-web + sqlx の抜粋)。
生成される Rust コード(例・抜粋)
// products.rs — generated by d-bye (actix-web + sqlx, excerpt)
#[get("/products")]
async fn list(db: web::Data<PgPool>) -> Result<HttpResponse, ApiError> {
let rows = sqlx::query_as::<_, Product>(
"SELECT * FROM products ORDER BY created_at DESC",
)
.fetch_all(db.get_ref())
.await?;
Ok(HttpResponse::Ok().json(rows))
}
#[post("/products")]
async fn create(
db: web::Data<PgPool>,
body: web::Json<ProductInput>,
) -> Result<HttpResponse, ApiError> {
let p = body.into_inner();
let row = sqlx::query_as::<_, Product>(
"INSERT INTO products (name, sku, price, supplier_id) \
VALUES ($1, $2, $3, $4) RETURNING *",
)
.bind(&p.name).bind(&p.sku).bind(p.price).bind(p.supplier_id)
.fetch_one(db.get_ref())
.await?;
Ok(HttpResponse::Created().json(row))
}- ✓API だけでなく、フロント(React)の CRUD 画面と PostgreSQL DDL まで一括生成。
- ✓すべて同じ設計書から導かれるので、API・UI・DB がスタック横断で一致する。
- ✓型検証+コンパイルチェックを通すので、コンパイルの通らない Rust を出さない。
- ✓生成物は ZIP で全文エクスポート。自社インフラで起動でき、ロックインがない。
よくある質問
- PostgreSQL スキーマから actix-web の CRUD を生成できますか?
- はい。テーブルと列(型・制約・外部キー)を定義すると、actix-web の CRUD ハンドラと型付き構造体を Rust で生成します。同じ設計書からフロントと PostgreSQL DDL も生成されます。
- Node.js との切り替えはできますか?
- できます。バックエンドは Rust(actix-web) と Node.js(Express) を切り替えられます。汎用の解説は「CRUD API の生成」を参照してください。どちらも同じ設計書から生成されるため整合が保たれます。
- 生成後にコードを手で直せますか?
- 生成物は普通の Rust コードで、ZIP で全文エクスポートできます。読んで・直して・テストを足して・cargo で任意のホストにデプロイできます。設計を変えたい場合は設計書を直して再生成します。
- AI が出す Rust コードはコンパイルが通りますか?
- d-bye は AI に生コードでなく設計書を書かせ、その後に型検証+コンパイルチェックのゲートを通します。仕組みの詳細は Learn の「ちゃんと動く AI コード生成」をご覧ください。
次の一歩
- →無料の Sandbox でテンプレの API・画面を動くプレビューで試す
- →在庫・勤怠・申請・顧客の動くテンプレートから着手できる
- →全文ダウンロードは Personal プラン以上(設計・プレビューはクレカ不要)