エージェント向け指示: セッション開始時にこのファイルを確認し、次のタスクを把握すること。 タスク完了後は必ずこのファイルを更新して進捗を永続化すること。
最終更新: 2026-03-09 | テスト: 273/273 pass + E2E 9件 | カバレッジ: 95.94%+ | Playwright MCP 導入済み
- ✅ 完了(テスト含む)
- 🔨 実装済み・テスト不足
- ❌ 未実装
⚠️ 要確認・ブロッカーあり
- Next.js 14 App Router セットアップ
- TypeScript + Tailwind CSS 設定
- shadcn/ui + Radix UI インストール
- Privy + wagmi + viem インストール
- Supabase クライアント設定 (
lib/supabase.ts) - wagmi 設定 (
lib/wagmi.ts) — Sepolia Testnet のみ - Vitest + Testing Library 設定 (
vitest.config.ts) - Playwright E2E 設定 (
playwright.config.ts) - ディレクトリ構造 (
app/,components/,hooks/,lib/,types/) - 型定義 (
types/database.ts) - Providers 設定 (
app/providers.tsx)
-
POST /api/groups— グループ作成 (テスト: 6件) -
GET /api/groups/[id]— グループ詳細取得 (テスト: 3件) -
POST /api/groups/[id]/expenses— 支出追加 (テスト: 6件) -
DELETE /api/groups/[id]/expenses/[expenseId]— 支出削除 (テスト: 2件) -
GET/POST /api/groups/[id]/notes— 日付メモ CRUD (テスト: 6件) -
POST /api/groups/[id]/analyze— AI 分析 (テスト: 3件) -
POST /api/groups/[id]/transactions— トランザクション記録 ✅ (テスト: 6件)
-
lib/calculate-settlement.ts— 清算計算アルゴリズム (テスト: 10件) -
lib/format-currency.ts— 通貨フォーマット JPY/USD/EUR (テスト: 10件) -
lib/parse-web3-error.ts— Web3 エラーパース (テスト: 11件) -
lib/contracts.ts— コントラクトアドレス管理 -
lib/erc20-abi.ts— ERC-20 ABI
-
hooks/use-group.ts— グループ・メンバー取得/操作 (テスト: 16件) -
hooks/use-expenses.ts— 支出 CRUD (テスト: 14件) -
hooks/use-settlement.ts— 清算計算 hook (テスト: 4件) -
hooks/use-token-balance.ts— ERC-20 残高取得 (テスト: 3件) -
hooks/use-gas-estimate.ts— ガス代見積もり (テスト: 2件) -
hooks/use-token-transfer.ts— トークン送金 (テスト: 1件)
-
components/shared/LoadingSpinner.tsx— ローディング (テスト: 1件) ✅ -
components/shared/ErrorDisplay.tsx— エラー表示 (テスト: 3件) ✅ -
components/group/GroupForm.tsx— グループ作成フォーム (テスト: 3件) ✅ -
components/expense/ExpenseForm.tsx— 支出追加フォーム (テスト: 1件) ✅ -
components/settlement/SettlementList.tsx— 清算リスト (テスト: 3件) ✅ -
components/wallet/WalletConnect.tsx— ウォレット接続 (テスト: 6件) ✅ -
components/note/NoteEditor.tsx— 日付メモ編集 (テスト: 5件) ✅ -
components/ai/AIAnalysisModal.tsx— AI 分析結果モーダル (テスト: 7件) ✅
-
app/page.tsx— ホーム (グループ作成) ✅ -
app/g/[id]/page.tsx— グループ詳細ページ ✅- ✅ NoteEditor 統合済み
- ✅ AI 分析ボタン統合済み
- ✅ PaymentModal 統合済み
-
WalletConnect.tsx— Privy login/logout 実際に呼び出す ✅ - Sepolia Testnet 自動切り替え ✅
useSwitchChainで自動チェーン切り替え- 間違ったチェーンの場合は警告バナー + Switch ボタン表示
- WalletConnect にトークン残高表示 ✅
- Sepolia 接続時に USDC / JPYC / EURC 残高表示
-
components/payment/PaymentModal.tsx— 決済フロー ✅ (テスト: 10件)- ウォレット未接続チェック
- トークン選択 (USDC/JPYC/EURC) + 残高表示
- 確認画面(宛先/トークン/金額)
- MetaMask 承認待ち (
isPending) - ブロックチェーン処理中 (
isLoading) - 完了 + Etherscan リンク
-
SettlementList.tsxに「支払う」ボタン追加 ✅ (テスト: 5件)- PaymentModal を開くトリガー
-
app/g/[id]/page.tsxに PaymentModal 統合 ✅
-
app/api/groups/[id]/transactions/route.ts— トランザクション記録 ✅ (テスト: 6件)POST: tx_hash, from/to member, amount, token 記録
-
lib/exchange-rate.ts— Exchangerate-API + フォールバック ✅ (テスト: 8件) -
hooks/use-exchange-rate.ts— 為替レート hook ✅ (テスト: 5件)
-
components/payment/TransactionHistory.tsx✅ (テスト: 実装済み) - グループページに「送金履歴」セクション追加 ✅
-
hooks/use-transactions.ts— 取引履歴フェッチ hook ✅ (テスト: 5件)
-
components/note/NoteEditor.tsx— 日付メモ ✅ (既存) - グループページに日付別メモセクション追加 ✅ (既存)
-
components/layout/Header.tsx— レスポンシブヘッダー ✅ (テスト: 5件) - モバイル: カードレイアウト、デスクトップ: テーブルレイアウト ✅
- タッチ操作最適化 (ボタン 44x44px min-h-[44px]) ✅
-
components/group/ShareButton.tsx— URL シェアボタン ✅ -
components/shared/ErrorBoundary.tsx— エラーバウンダリ ✅ -
components/group/MemberManager.tsx— メンバー追加/削除 UI ✅ (テスト: 4件) - グループページに MemberManager セクション統合 ✅
- グループ設定編集 (名前・通貨変更) ✅
components/group/GroupSettings.tsx(テスト: 4件)
-
e2e/group-flow.spec.ts— グループ作成・表示フロー ✅ (3件, API モック使用) -
e2e/expense-flow.spec.ts— 支出追加・表示フロー ✅ (3件, API モック使用) -
e2e/blockchain/payment.spec.ts— 決済 UI フロー ✅ (3件, API モック使用, ウォレット未接続シナリオ)
- ルート
README.mdを追加(英語、開発導線と主要ドキュメントへの入口を整理) - UI 言語切り替えを追加(英語デフォルト / 日本語タブ切り替え対応、主要画面とモーダル文言を翻訳)
- マルチ通貨支出の為替レートを自動補完(支出保存時に JPY 換算レートを保存、既存
rate=1データは読込時に補完) - Vercel preview deploy の既定 scope を
akinobu-onos-projectsとしてドキュメント化 -
.env.localの値を Vercel preview / production 環境変数へ同期 - Vercel production deploy 完了 (
https://mvp-test-mu.vercel.app, 2026-03-09) - Vercel 新規 project
walipay-mvpを作成し production deploy 完了 (https://walipay-mvp.vercel.app, 2026-03-09) - ホーム Hero のキャッチコピーを短文化し、上下余白を拡張 (
app/page.tsx, 2026-03-09) - GitHub Actions で push 時の Vercel 自動 deploy を追加 (
.github/workflows/vercel-deploy.yml, 2026-03-09)
| ファイル | テスト数 | ステータス |
|---|---|---|
app/api/groups/route.test.ts |
6 | ✅ |
app/api/groups/[id]/route.test.ts |
3 | ✅ |
app/api/groups/[id]/expenses/route.test.ts |
6 | ✅ |
app/api/groups/[id]/expenses/[expenseId]/route.test.ts |
2 | ✅ |
app/api/groups/[id]/notes/route.test.ts |
6 | ✅ |
app/api/groups/[id]/analyze/route.test.ts |
3 | ✅ |
hooks/use-expenses.test.ts |
14 | ✅ |
hooks/use-group.test.ts |
16 | ✅ |
hooks/use-settlement.test.ts |
4 | ✅ |
hooks/use-token-balance.test.ts |
3 | ✅ |
hooks/use-gas-estimate.test.ts |
2 | ✅ |
hooks/use-token-transfer.test.ts |
1 | ✅ |
lib/calculate-settlement.test.ts |
— | ✅ |
lib/format-currency.test.ts |
10 | ✅ |
lib/parse-web3-error.test.ts |
11 | ✅ |
components/group/GroupForm.test.tsx |
3 | ✅ |
components/expense/ExpenseForm.test.tsx |
1 | ✅ |
components/settlement/SettlementList.test.tsx |
3 | ✅ |
components/shared/ErrorDisplay.test.tsx |
3 | ✅ |
components/shared/LoadingSpinner.test.tsx |
1 | ✅ |
components/wallet/WalletConnect.test.tsx |
6 | ✅ |
components/note/NoteEditor.test.tsx |
5 | ✅ |
components/ai/AIAnalysisModal.test.tsx |
7 | ✅ |
components/payment/PaymentModal.test.tsx |
10 | ✅ |
app/g/[id]/page.test.tsx |
8 | ✅ |
app/page.test.tsx |
1 | ✅ |
components/group/GroupSettings.test.tsx |
4 | ✅ |
| 合計 | 199 | 全 pass |
| ディレクトリ | 目標 | 現在 | ステータス |
|---|---|---|---|
lib/ |
90%+ | 76.5% | |
hooks/ |
85%+ | 98.8% | ✅ |
components/ |
80%+ | ~96% | ✅ |
app/api/ |
85%+ | ~94% | ✅ |
| 全体 | 80%+ | 92.8% | ✅ |
注意:
lib/contracts.ts,lib/supabase.ts,lib/wagmi.tsは設定ファイルのため実質テスト不可。 vitest.config.ts のexcludeに追加することでカバレッジ目標を達成可能。
bunx vitest run # ユニットテスト
bunx vitest run --coverage # カバレッジ確認
bun run test:e2e # E2E テスト
bun run test:e2e:blockchain # Blockchain E2E
bun dev # 開発サーバー起動 (http://localhost:3000)
⚠️ bun testは Bun 組み込みランナーが動くため 使用禁止。必ずbunx vitest runを使うこと。
Claude Code は Playwright MCP を使って実ブラウザで UI を確認できる。
実装後は bun dev → Playwright MCP で確認 → E2E テスト作成の順で進める。
詳細: docs/browser-verification.md
memo2.md 要件 — 2026-03-01 実装完了。テスト: 224/224 pass | カバレッジ: 95.94%
-
components/group/GroupForm.tsx— メンバー行ごとに「ウォレットアドレス / ENS (任意)」入力フィールド追加 -
hooks/use-group.ts—createGroup()の引数を{name: string, wallet_address?: string}[]に変更 (MemberInput型) -
app/api/groups/route.ts—membersを{name, wallet_address?}[]形式で受け取り DB へ保存 (string[] 後方互換あり) - テスト更新:
GroupForm.test.tsx,app/api/groups/route.test.ts,use-group.test.ts
-
app/page.tsx— ヘッダーに<WalletConnect />を追加 -
app/api/groups/route.tsにGETメソッド追加 —?wallet_address=0x...クエリで所属グループ一覧を返す -
hooks/use-my-groups.ts新規作成 — 接続ウォレットアドレスでグループ一覧を取得 -
app/page.tsx— ウォレット接続時に「あなたのグループ」セクションを表示 - テスト:
GET /api/groupsroute test (4件),use-my-groups.test.ts(5件)
-
SettlementList.tsx—connectedWalletAddress?: string,paidPairs?: Set<string>props 追加 -
from.wallet_addressと接続ウォレットの照合 (case-insensitive) でボタン有効/無効制御 -
paidPairsに含まれる精算に「一部支払済み」バッジ表示 -
app/g/[id]/page.tsx—useAccount()で address 取得, paidPairs 導出, SettlementList に渡す - テスト:
SettlementList.test.tsx更新 (9件 → wallet制限・支払済みバッジ)
-
lib/calculate-settlement.ts—calculateBalances()にpaidTransactions引数追加 -
hooks/use-settlement.ts—transactionsを受け取り completed 分だけ抽出して計算に渡す -
app/g/[id]/page.tsx—transactionsをuseSettlement()に渡す - テスト:
calculateBalances(3件) +calculateSettlementwith paid (3件) 追加
要件: 支出ごとに通貨を設定可能(JPY/USD/EUR 混在 OK)、グループレベルの通貨設定を廃止。
-
components/group/GroupForm.tsx— 通貨ドロップダウン削除 -
components/group/GroupSettings.tsx— 通貨ドロップダウン削除 -
hooks/use-group.ts—createGroup()のcurrency引数削除(内部で 'JPY' デフォルト) -
app/api/groups/route.ts—currency省略可能にする(デフォルト 'JPY')
-
components/expense/ExpenseForm.tsx— 通貨セレクター追加(JPY/USD/EUR) -
components/expense/ExpenseEditModal.tsx— 通貨セレクター追加、expense.currencyで初期化、currencyプロップ削除 -
app/g/[id]/page.tsx— 支出一覧に通貨表示、ExpenseEditModal のcurrencyプロップ削除
-
lib/calculate-settlement.ts—expense.amount * (expense.rate ?? 1)で JPY 換算して計算
-
GroupForm.test.tsx—createGroup呼び出しの通貨引数を削除 -
GroupSettings.test.tsx— 通貨関連テスト更新 -
ExpenseForm.test.tsx— 通貨セレクター追加テスト -
lib/calculate-settlement.test.ts— マルチ通貨テスト追加 -
app/api/groups/route.test.ts— 通貨省略可能テスト更新
-
app/g/[id]/page.tsx— 清算セクションに ¥円/USD/EUR タブ追加 -
useExchangeRate('JPY', displayCurrency)で JPY→選択通貨レートを取得 -
displayedSettlements— 全精算金額をレート換算して SettlementList に渡す -
app/g/[id]/page.test.tsx— タブ表示テスト 2件追加
Phase 5・6 実装完了。テスト: 259/259 pass。
- ブラウザ動作確認 —
bun dev→ Playwright MCP で支出追加(通貨選択)フローを検証 - 実 Sepolia E2E — MetaMask 拡張 + テストウォレット + Sepolia ETH が必要な場合のみ実施