オレオレwebアプリ開発
ざっくりとした利用技術
- Next.js
- Prisma
- openapi
- supabase
- redoc
- bun
- storybook
Next.js
触れることがむしろない
Prisma
ORM。
マイグレーションもいける。
後述するsupabaseもマイグレーションの機能あるけど、個人的にはprismaでやるほうがイケてる感じになりそう
ER図の作成
prisma-erd-generatorでいける。
参考にした記事
DB定義とapi側の実装のスキーマを共通化して利用できるので熱い
Openapi
想定した開発フローは以下のような感じ
- openapiの定義を修正
- 型を再生成
- 型不整合となった部分を修正
openapi-typescript
型ファイルを吐き出してもらう。
吐き出してもらった型ファイルを元にapiとclientの開発。
axiosをいい感じにする記事
type-festからGETがなくなったようなので、その部分の修正が必要そう。supabase
自前でDBを持つかで迷ったけどsupabaseを使うことにした。
cloud runでデプロイしたいと考えており、その場合DBを時前で持つのは厳しいとなりsaasを使おうとなった。
catnose氏のしずかなインターネットの技術構成記事より、Planet Scale使おうと考えていたけれど、どうも無料プランが無くなったらしく、コスト的に厳しい
色々悩んだ結果supabaseを採用することに。
supabase cli
docker in dockerでの運用を一瞬考えたりしたのだけど、自分の技術力だと運用で厳しい思いをしそうな気がしており、ホストマシンにsupabase cliを導入する形とした。
supabase start
で立ち上げたDBを開発用として進めていく気持ち。
Redoc
個人的にドキュメントは以下3点セットを自動で作りたい(メンテ大変だし、面倒くさいので)
- ER図
- API仕様
- 画面見た目
ER図についてはprismaで対応したので、API仕様はRedocで対応という形にした。
Next.jsで/docsから確認できるように実装。publicにopenapiを置くとなると色々厳しいため、apiから取れるように。
openapiはファイル分割したので、json化する際にはbundle化する必要があった。
そのため取り急ぎこんな感じで実装した。
import { NextRequest, NextResponse } from 'next/server';
import SwaggerParser from '@apidevtools/swagger-parser'
export async function GET(req: NextRequest) {
const openapi = await SwaggerParser.bundle('openapi/index.yaml', )
return NextResponse.json(openapi);
}
bun
友人に教えてもらった上記動画で使ってみたいなぁとなり使ってみた。かなり良い
tsファイルをそのまま実行できたりするし、とにかく速い、すごい。
testもいけるらしいので試していきたい所存です。
storybook
ドキュメント3点セットの最後。画面レイアウト用
安易にいれると結構辛い目に合うらしいので以下の記事を参考にしながら、できる限りの自動化を目指したい。
prismaのschema分割
v5.15.0からできるようになったらしい。
それ以前はprisma-importというのを使ってた様子。
最終的に以下になった
- nextjs
- supabase
- prisma
- hono
- bun