😛
話にオチをつけてくれるアプリを作った
はじめに
日常生活で「面白い話して」とか「で、オチは?」と聞かれることはありませんか?そんな時に使えるアプリをリリースしました!
アプリURL: https://ochi.lydear.com/
使い方
まずは出来事を入力して、

好きなスタイルを選んでオチを作成するだけです。

こういう感じの話が生成されます。


画面の右下に助言おじさんがいるので、出来事をどう書けば良いか分からなければ話の膨らませ方を聞くこともできます。


変換した話はすべて保存されるので、いつでも見返せます。飲み会の前にサッと確認すれば、話のネタに困ることはありません。
システム構成
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Next.js App │────▶│ Fast API │────▶│ PostgreSQL │
│ (Vercel) │ │ (REST API) │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Firebase │ │ OpenAI API │
│ Authentication │ │ (AI変換) │
└─────────────────┘ └─────────────────┘
認証
Googleログインに対応し、Firebase ID TokenをバックエンドAPIに送信することで、セキュアなユーザー認証を実現しています。
保護されたルートの実装
App Routerのルートグループ機能を活用し、(protected)ディレクトリ配下のページは認証必須にしました。未ログインユーザーは自動的にランディングページへリダイレクトされます。
app/
├── (protected)/
│ ├── diaries/
│ │ ├── [id]/page.tsx # 認証必須
│ │ └── page.tsx # 認証必須
│ └── layout.tsx # AuthGuardでラップ
├── page.tsx # 誰でもアクセス可
└── ...
また、今回初めてshadcnを使ってみました。必要なコンポーネントだけ読み込め、カスタムもしやすいので使いやすいと感じました。
DB設計
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ users │────▶│ diaries │────▶│diary_comedies│
└──────────────┘ └──────────────┘ └──────────────┘
│ │
│ ▼
│ ┌──────────────┐
│ │comedy_styles │
│ └──────────────┘
▼
┌──────────────┐
│ user_usage │
└──────────────┘
- users: Firebaseと連携したユーザー情報
- diaries: ユーザーが入力した出来事
- comedy_styles: 変換テイストのマスターデータ
- diary_comedies: AIが生成した変換結果
- user_usage: 日次の利用回数管理
変換テイストに関してバックエンドから取得することにより、今後テイストを変更したり、増やしたりしたい場合にも対応できるようにしています。
あとがき
このアプリは旦那に「なんか面白い話をして」と無茶振りをしていた時に思いつきました。実際試してみると結構クスッと笑えるものが多く、なかなか楽しいです。
今は1日の回数制限付きですが、無料で遊べるのでぜひ遊んでみていただけると嬉しいです。
Discussion