Slide 1

Slide 1 text

Aurora DSQLを使って Todoアプリ作ってみた 2025/01/08 KDDIアジャイル開発センター 平井 友樹

Slide 2

Slide 2 text

1 KDDI Agile Development Center Corporation 自己紹介 平井 友樹 (Tomoki Hirai) @AllJokin KDDIアジャイル開発センター株式会社(KAG) • Webアプリエンジニア/モバイルアプリエンジニア • AWS, React, Flutter, GCPなど

Slide 3

Slide 3 text

2 KDDI Agile Development Center Corporation Amazon Aurora DSQL 最近発表されたPostgreSQL互換の分散データベース(Preview) • サーバレス • PostgreSQL互換 • 事実上無限のスケーラビリティ • マルチリージョン対応 • Google Spannerに比べて4倍早い CEO Keynote with Matt Garman

Slide 4

Slide 4 text

3 KDDI Agile Development Center Corporation Aurora DSQLでアプリを作った目的 • Aurora DSQLを実際に使ってみて制約を理解する • 気になるライブラリを触ってみる ◦ Hono:日本製のWebアプリケーションフレームワーク ◦ Drizzle:Headless Typescript ORM AWS Cloud Amazon Aurora DSQL AWS Lambda

Slide 5

Slide 5 text

4 KDDI Agile Development Center Corporation

Slide 6

Slide 6 text

5 KDDI Agile Development Center Corporation LambdaからAurora DSQLへの接続 Drizzleクライアントでデータの取得を行う ① スキーマの定義 ② クライアントの作成 serialは非対応なのでUUIDを使う 外部キーが使えない ③ データ取得 Password 取得 Drizzleクライアント作成

Slide 7

Slide 7 text

6 KDDI Agile Development Center Corporation HonoでAPIの実装 hono/aws-lambda を使ってLambdaで実行 • app.getでGETメソッド、app.postでPOSTメソッドを実装 • app.useでMiddlewareを使用 ◦ c.setでコンテキストにclientをセット、各APIではc.var.clientでClientを使う (使い方合ってるかわからないけど…) Contextにクライアントをセット クライアントを呼び出し

Slide 8

Slide 8 text

7 KDDI Agile Development Center Corporation Drizzle x Aurora DSQLで困ったこと ① Migration(drizzle migrate)を実行できない 自動生成されるテーブルにserialを使われている 対応されるかも? [FEATURE]: Allow for non sequential primary key for id of migrationsTable ② 一部使えないAPIがある findFirst関数で別テーブルのデータを取得しようとすると Data type json not supported select "todoTable"."id", "todoTable"."title", "todoTable"."category_id", "todoTable_category"."data" as "category" from "todo" "todoTable" left join lateral (select json_build_array("todoTable_category"."id", "todoTable_category"."name") as "data" from (select * from "category" "todoTable_category" where "todoTable_category"."id" = "todoTable"."category_id" limit $1) "todoTable_category") "todoTable_category" on true limit $2 const todoFindFirstWithCategory = await client.query.todoTable.findFirst({ with: { category: true, }, }); 実際に発行されるSQL 実装 CREATE TABLE IF NOT EXISTS "drizzle"."__drizzle_migrations" ( "id" serial PRIMARY KEY, "hash" text NOT NULL, "created_at" bigint );

Slide 9

Slide 9 text

8 KDDI Agile Development Center Corporation まとめ • Aurora DSQLのいろいろな制約を考慮する必要がある。 ◦ 外部キーが使えない、使えないデータ型がある等 • 現状はORMの機能をフルで使えないと思った方がよさそう • Honoはいい感じだった

Slide 10

Slide 10 text

Be a Change Leader. アジャイルに力を与え 共に成長し続ける社会を創る