レシピ · 4手 · 1プロンプト実装

既存アプリを @event/* へ収束させる(Phase A)

xdeal-lp / spikes-lp / ivs-cms のような既存アプリを、挙動を変えずに @event/* パッケージへ寄せる第一歩

解説 ch.43

一気に移さない。機能的に等価なコードから置換する(リスクゼロの Phase A)。

> 実地訂正(2026-07、xdeal-lp で実施): 当初「バイト同一」と書いていたが、実測すると > diff 行数は大きい(xdeal↔ivs の 4s-session は各ファイル数十行差)。ただし差分は > 圧倒的に表層(single/double quote・prettier 設定・コメント量・pickpickStr 命名)で、 > ロジックは同一(PROD_API/base 解決/HANDOFF_QUERY/verify4SUser の戻り型まで一致)。 > 判定は diff 行数でなく export シグネチャと分岐ロジックの照合で行うこと。

Phase A — 抽出 & 並走(挙動変更なし)

対象は「3アプリで既にほぼ同一」のもの。ここだけは差し替えても挙動が変わらない。

1. 4S セッションハンドオフ

src/lib/4s-session/*(xdeal / ivs にほぼ同構成・spikes は env/verify のみ)を @event/fours-sdk(この3アプリから harvest したので機能等価)に置換:

前提=配布方式の決定: 別リポの app から @event/* を import するには、internal-packages パターン(raw TS + transpilePackages・ビルド成果物なし)を保つ配布が要る。選択肢: (a) 対象 app を event-manual monorepo に吸収(管理一元・移行大) / (b) git submodule で packages/ を持ち込み transpilePackages 追加(非破壊寄り・Vercel submodule 設定要) / (c) 各パッケージにビルド段を足して private npm 公開(no-build 原則に反する・非推奨)。 コード置換の前にこれを決める。

2. 死コード削除

削除前に必ず被参照を grep で証明する(「分析で未使用」でも現役参照が残っていることがある)。

buyer accept-invitation・buyer profile)あり。Phase B 以降で @event/fours-sdk へ段階置換

意図的 scaffold(4S OAuth 公開待ちのプレースホルダ)

3. contentStore / auth

@event/corecreateContentStore(ivs canonical + sha リトライ統合版)と createSharedPasswordAuth(constant-time 統一 — spikes の平文 === を修正)へ。

4. 検証

各置換ごとに型チェック + 該当フローを1つ手で叩いて挙動一致を確認してから次へ。

Phase B 以降(別 PR)

原則

一度に1論理単位 = 1コミット。export シグネチャ照合で機能等価を確認できるものから。 「エンジンコードをアプリに残さない」— ロジックはパッケージへ、アプリには config だけ。