メインコンテンツへスキップ
YK
経歴
スキル
プロジェクト
研究・発表
ブログ
GitHub
読み込み中...
ホーム
プロジェクト
定期購入リスト
Web · 進行中
定期購入リスト
定期的に買う商品を購入サイトをまたいで1か所にまとめる自分専用の購入リスト。ブックマークレットで商品を登録し、購入履歴から次回の購入予定日を予測
期間
2026年9月 – 現在
分野
Web
所属
趣味(個人・チーム)
状態
進行中
React
TypeScript
Vite
Vitest
SQLite
Cloudflare
GitHub Actions
概要
アーキテクチャ
技術的挑戦
関連プロジェクト
概要
Amazonのお買い物リストを複数サイト対応にしたような、自分専用の購入リストを開発しています。
商品ページでブックマークレットを押すと、商品名・画像・価格を読み取って登録できます。
ブックマークレットが使えないサイトでは、URLを貼るとサーバーがOGPから情報を補完します。
予想周期と実際の購入間隔から購入周期を予測し、次回予定日・スキップ・購入履歴の編集・アーカイブ・カテゴリ分けに対応しています。
アーキテクチャ
図を拡大して見る
ユーザー
ブックマークレット
DOMから商品情報を抽出
GitHub Actions
本番・PRプレビュー
React SPA
Vite / TanStack Query
API
Hono / zod・サイト別アダプター
Cloudflare D1
Drizzle ORM
購入サイト
図を開く
Vite + React + TypeScriptのフロントエンドと、HonoによるAPIを同じCloudflare Workerで配信しています。
データはCloudflare D1にDrizzle ORMで保存し、UIはTailwind CSS・shadcn/ui・TanStack Query・React Router、入力検証はzodで構成しています。
サイトごとの対応はアダプターとして、サーバー側(URLの判定・正規化)とブックマークレット側(DOMからの抽出)に分けて実装しています。
認証はCloudflare Accessで行い、GitHub Actionsで本番デプロイとPRごとのプレビュー環境の作成・削除を自動化しています。
設計判断はADRとして記録しています。
技術的挑戦
課題
購入サイトをまたいだ商品情報の取得
解決
サイトごとのアダプターでDOMから情報を抽出するブックマークレットと、サーバー側のOGP取得を併用
課題
購入周期の予測
解決
予想周期を初期値に、実際の購入間隔を指数移動平均で反映(手動での固定も可能)
課題
PRごとのプレビュー環境とデータの分離
解決
テーブル名にPR番号の接頭辞を付け、独自のマイグレーションランナーとGitHub Actionsでプレビュー用D1を管理
課題
個人用アプリの認証
解決
Cloudflare Accessのみで保護し、Accessがかからない公開URLを無効化
同じ技術を使ったプロジェクト
空港ラウンジマップ
2026 · Web · TypeScript · Vite
タスクカレンダーツール
2025 · Web · React · TypeScript
通勤ポッド
2026 · モバイル · Expo · React
前のプロジェクト
Real GeoGuessr
次のプロジェクト
通勤ポッド