Kento
【ShiftB vibe codingハッカソン】もくカフェ 技術選定ポイント(意思決定の記録)
2026年03月25日
見出しはありません
要約を生成中...
今回ハッカソンで作るアプリの技術選定ポイントをまとめようと思います!
ハッカソン期間(1ヶ月・個人開発)でユーザーを獲得(目標)。
そのために「開発スピード」と「ユーザー体験」を最優先に技術を選定した。
MVPスコープは「募集投稿〜参加申請の流れ」に集中し、マッチング機能は対象外に変更とした。
機能: Must
ユーザー登録・ログイン Supabase Auth
プロフィール作成・編集 SNSリンク・Webhook URL登録を含む
募集投稿 エリア・日時入力
AI募集文生成 Gemini 2.5 Flash
募集一覧・詳細表示
参加申請・承認
SNS連携投稿 Twitter/X intentリンク、Slack・Discord Webhook POST
機能 | 担当 |
|---|---|
認証(ログイン・セッション) | Supabase JS Client |
DB操作(CRUD) | Prisma |
レイヤー | 技術 |
|---|---|
フロント + API | Next.js + TypeScript |
DB | Prisma + Supabase PostgreSQL |
認証 | Supabase Auth(JS Client) |
ホスティング | Vercel |
AI | Gemini API(Gemini 2.5 Flash) |
外部API | Google Places API |
決定:Next.js + TypeScript
比較 | Vite + React | Next.js |
|---|---|---|
APIルート | 別途設定が必要 | App Routerに統合 |
サーバーサイド処理 | 仕組みがない | Route Handlerで自然に書ける |
デプロイ | 設定が複雑 | Vercelがファーストクラス対応 |
理由: AIとGoogle Places APIをサーバーサイドで安全に呼ぶ必要がある。
Next.jsならAPIルートが自然に統合されているため、フロントとバックを1プロジェクトで完結できる。
本当は、次の転職先ではNext.jsのタスク担当になる予定なので、キャッチアップ含めて変更した笑
決定:Prisma + Supabase PostgreSQL
理由: Supabase JS ClientだけでもDB操作は可能だが、SQLライクな記法になりコードの可読性が下がる。
PrismaはTypeScriptファーストなORMで、スキーマ定義→型自動生成の流れが明快。
個人開発でも迷わずに書けることを優先した。
決定:Supabase Auth(JS Client)
理由: DBとAuthが同一サービスで完結するため、ユーザーIDとDBレコードの紐付けが自然にできる。独自認証を実装するコストを省き、開発スピードを確保する。
決定:Vercel
理由: Next.jsの開発元が提供するホスティングのため、デプロイ設定がほぼゼロ。
Prismaのpostinstall設定と環境変数を入れるだけで動く。ハッカソンで余計な設定に時間を使わないため。
決定:Gemini API、無料枠使用・募集文生成のみに限定
理由: ハッカソン期間中のコストをゼロに抑えるため無料枠を使う。
GPT-4系は有料のため除外。Gemini 2.5 Flashは速度と精度のバランスが良く、募集文生成ユースケースに適している。
制約の受け入れ: 無料枠の制限(250リクエスト/日)があるが、Geminiの用途を募集文生成のみに絞ることで枯渇リスクを最小化できる。マッチング機能はMVPスコープ外のため、AI消費の大半を募集文生成に集中できる。
決定:Google Places API(Could機能)
理由: カフェ提案・カフェ情報表示はMustではなくCould。
無料枠(月$200クレジット)でハッカソン規模なら十分賄える。
Must機能が完成した後に着手する。
決定:intentリンク + Webhook POSTの組み合わせ
サービス | 方式 | ユーザーが設定するもの |
|---|---|---|
Twitter/X | intentリンク(API不要) | プロフィールURL(表示用のみ) |
Slack | Webhook POST | Webhook URL |
Discord | Webhook POST | Webhook URL |
理由: OAuthは各サービスへのアプリ申請・認証フロー実装が必要。
WebhookはユーザーがURLを1つ設定するだけで直接チャンネル投稿が可能。Twitter/XはintentリンクでAPIキー不要のまま実現できる。
フロー: プロフィールページでWebhook URLを登録 → 募集投稿時にアイコンをクリック → Slack・DiscordはRoute Handler経由でWebhookにPOST → チャンネルに自動投稿。
決定:bulletproof-reactのフォルダ構成を採用
理由: 機能ごとにフォルダを分けるフィーチャーベース構成により、機能追加・修正時に「どこを触ればいいか」が明確になる。
個人開発でも開発が進むにつれてコードが散らかるのを防ぐ。
決定 | 優先した価値 |
|---|---|
Next.js統一 | 開発スピード・デプロイの簡単さ |
Prismaを採用 | コードの可読性・型安全性 |
Geminiを募集文生成のみに絞る | 無料枠の持続性・スコープの明確化 |
SNS連携をWebhook方式に | OAuth実装コストの排除 |
マッチング機能をCould化 | MVPに集中・開発スピード確保 |
bulletproof-react | 機能追加時の迷いをなくす |
要約
コメント
まだコメントはありません。