Minefolio で利用している外部サービスと、依存しているライブラリを分けて整理したドキュメント。
サービス = ホスティング先・SaaS・外部 API 等の運用基盤
ライブラリ = package.json で管理する npm パッケージ
| サービス |
用途 |
| Vercel |
アプリのホスティング、SSR/サーバレス実行、Cron Trigger、エッジ CDN |
| Vercel Blob |
カスタムスキン・ガイド画像のオブジェクトストレージ |
Vercel OG(/og-image) |
OGP 画像の動的生成 |
| Vercel Analytics |
アクセス解析 |
| サービス |
用途 |
| Turso (libSQL) |
本番 DB(SQLite 互換のエッジ向け分散DB) |
| Discord OAuth |
ログイン手段(better-auth 経由) |
| サービス |
用途 |
| Mojang API |
MCID ↔ UUID 変換、スキンテクスチャ取得 |
| PaceMan API |
リアルタイムランペース取得 |
| MCSR Ranked API |
Ranked プレイヤー統計取得 |
| Speedrun.com API |
スピードラン記録取得 |
| YouTube Data API |
動画・ライブ配信取得 |
| Twitch Helix API |
ライブ配信取得(App Access Token) |
| サービス |
用途 |
| Resend |
メール送信(フィードバックフォーム等) |
| ライブラリ |
用途 |
| react / react-dom |
UI ライブラリ |
| react-router / @react-router/node / @react-router/serve / @react-router/dev |
フレームワーク本体(SSR・ルーティング・loader/action) |
| typescript |
型システム |
| vite |
ビルドツール・dev サーバ。@/ パスエイリアスは Vite 8 ネイティブの resolve.tsconfigPaths で解決 |
| isbot |
ボット判定 |
| ライブラリ |
用途 |
| drizzle-orm |
スキーマ定義・型安全な SQL クエリ |
| drizzle-kit |
マイグレーション生成・適用 |
| @libsql/client |
Turso 接続クライアント |
| @paralleldrive/cuid2 |
プライマリキー用 ID 生成 |
| ライブラリ |
用途 |
| better-auth |
認証コア(セッション・OAuth) |
| @better-auth/drizzle-adapter |
better-auth ↔ Drizzle の橋渡し |
| ライブラリ |
用途 |
| tailwindcss / @tailwindcss/vite |
ユーティリティ CSS フレームワーク |
| @tailwindcss/typography |
prose クラス(マークダウン本文のスタイル) |
| tw-animate-css |
Tailwind 拡張アニメーション |
| shadcn/ui |
コンポーネント集(New York スタイル、Slate base) |
| @radix-ui/react-* / radix-ui |
shadcn の土台。アクセシビリティ重視のヘッドレスコンポーネント |
| lucide-react |
アイコンセット |
| next-themes |
ダーク/ライトテーマ切替 |
| class-variance-authority |
コンポーネントのバリアント定義 |
| clsx / tailwind-merge |
cn() ユーティリティの基盤 |
| cmdk |
コマンドパレット(コンボボックス・検索 UI) |
| sonner |
トースト通知 |
| ライブラリ |
用途 |
| react-hook-form |
フォーム状態管理 |
| @hookform/resolvers |
バリデーションリゾルバ |
| zod |
スキーマバリデーション |
| ライブラリ |
用途 |
| @tiptap/core / @tiptap/react / @tiptap/pm / @tiptap/starter-kit |
リッチテキストエディタ本体(ProseMirror ベース) |
| @tiptap/extension-bubble-menu ほか各種拡張 |
コードブロック・カラー・ハイライト・画像・リンク・プレースホルダー・テーブル・YouTube 等 |
| xss |
サーバ側で表示時に HTML をサニタイズ(app/lib/guide-sanitize.server.ts) |
| react-markdown + remark-gfm + rehype-sanitize |
/developers/api /developers/changelog /privacy /terms で app/content/*.md をレンダリング |
| ライブラリ |
用途 |
| @dnd-kit/core / @dnd-kit/sortable / @dnd-kit/utilities |
サーチクラフトのドラッグ並べ替え等 |
| ライブラリ |
用途 |
| skinview3d |
プロフィール画面の 3D スキン全身表示(three.js ベース、OrbitControls 操作対応) |
| @bafv4/mcitems |
Minecraft 1.16 のアイテムアイコン・検索 |
| ライブラリ |
対応サービス |
| @vercel/blob |
Vercel Blob(ファイルアップロード) |
| @vercel/og |
Vercel OG(OGP 画像生成) |
| @vercel/analytics |
Vercel Analytics |
| resend |
Resend(メール送信) |
| ライブラリ |
用途 |
| date-fns |
日付フォーマット・相対時刻 |
| ライブラリ |
用途 |
| vitest / @vitest/coverage-v8 / @vitest/ui |
テストランナー(pnpm test / test:ui / test:coverage) |
| tsx |
TypeScript スクリプトの直接実行 |
| dotenv |
.env ローダー(drizzle-kit やスクリプト用) |
| @types/node / @types/react / @types/react-dom |
型定義 |
- 自前実装(
app/lib/messages/)。外部ライブラリ非依存
pages-ja.ts で日本語メッセージを管理
t("dotPath.key", { params }) でアクセス、{param} 補間
- デフォルトロケール
ja、Cookie + Accept-Language 検出
[ブラウザ]
↓ HTTPS
[Vercel Edge / Serverless]
├─ React Router 8 SSR (loader/action)
├─ @vercel/og (OGP 生成)
├─ Cron Triggers (PaceMan / Rankings / YouTube 同期)
└─ better-auth (Discord OAuth)
↓
├─ Turso (libSQL) ← Drizzle ORM
├─ Vercel Blob (画像)
├─ Resend (メール)
└─ 外部 API (Mojang / PaceMan / SRC / MCSR Ranked / YouTube / Twitch)
- データの正本: Turso (DB) と Vercel Blob (画像)
- キャッシュ: API レスポンスは DB の
api_cache テーブルや CDN キャッシュヘッダーで吸収
- 静的アセット: Tailwind ビルド + Vite チャンク分割(vendor 等)