AI再生成に壊されない設計 — Rork の生成コードと手書きロジックを分ける境界の引き方
Rork へ追加指示を出すたびに手書きのロジックが消える。プロンプトで守るのは対症療法です。生成コードと自分の所有コードを層で分け、再生成が届かない境界を設計で引く方法を、Zustand と service 層の実装例つきでお伝えします。
端末の時計は動かせる — 日替わり機能とトライアル判定を時刻操作から守る設計
端末の時計を進めるだけで日替わり特典を先取りできてしまう——壁紙アプリのログで見つけた実例を起点に、壁時計・単調時計・サーバー時刻の3層で時刻源を使い分け、時計の巻き戻しにも耐える日替わりロジックとトライアル判定の設計をまとめました。
どの生成でこの不具合が入ったのか — Rork アプリに生成来歴を刻む長期運用設計
AI ビルダーで同じ画面を何度も作り直していると、ある日現れた不具合がどの生成で入ったのか追えなくなります。ビルドスタンプ・生成台帳・テレメトリ埋め込みの3層で生成来歴を残し、リグレッションを世代単位で絞り込む設計をまとめました。
設定画面を1枚のスキーマから組み立て、複数アプリで使い回す
設定画面をアプリごとに手作業で作ると、運用するアプリが増えるほど破綻します。宣言的なスキーマから画面を組み立て、複数アプリで共通の土台を共有する設計を、動くコードとともに整理します。
壊れたキャッシュで毎回起動時に落ちるアプリ——ユーザーが自力で抜け出せる「セーフモード起動」を設計する
永続化したキャッシュが壊れて起動のたびに同じ場所で落ちると、ユーザーには再インストールしか残りません。アプリ自身が早期クラッシュの連続を数え、対話可能になって初めて起動を確定し、危険な状態だけを段階的にリセットするセーフモードを、Expo(React Native)の実装で設計します。
広告の本当のeCPMを自分で測る — Impression-Level Ad Revenue を計測基盤に流し込む実装記録
AdMob の管理画面が見せる平均eCPMだけでは、どの地域やプレースメントが本当に稼いでいるかは分かりません。1インプレッションごとの収益を paidEventListener で受け取り、解析基盤に流して本当のeCPMを出すまでの実装と運用をまとめました。
壁紙アプリ6本を1つのコードベースから出し分ける — app.config.ts と EAS で組むホワイトラベル構成
似た構造の壁紙アプリを別々のリポジトリで保守していると、修正が6箇所に分散して破綻します。1つのコードベースから APP_VARIANT で6本のアプリを出し分けるホワイトラベル構成を、app.config.ts と eas.json の実コードと、設定ドリフトを防ぐ検証スクリプトまで含めてまとめました。
起動時間を『予算』として管理する — 6本のアプリでSDK初期化を後ろ倒しにした設計記録
起動時間を場当たり的に速くするのではなく、フェーズごとに予算を割り当てて守る運用に切り替えた記録です。Rork で書き出した6本のアプリでSDK初期化を後ろ倒しにし、CIで予算超過を止めるまでをまとめました。