すべての記事
AI再生成に壊されない設計 — Rork の生成コードと手書きロジックを分ける境界の引き方
Rork へ追加指示を出すたびに手書きのロジックが消える。プロンプトで守るのは対症療法です。生成コードと自分の所有コードを層で分け、再生成が届かない境界を設計で引く方法を、Zustand と service 層の実装例つきでお伝えします。
Rork が生成した fetch コードに、Zod の検証境界を1枚だけ挟む
Rork が生成したネットワークコードは、レスポンスの形を暗黙に信頼します。APIが変わると画面は静かに真っ白になります。生成UIとネットワークの間にZodのparse層を1枚だけ差し込み、壊れ方を予測可能にする実装を、実運用の数値とともに紹介します。
WebViewのpostMessageは投げたら終わり — 相関IDで要求と応答を結ぶブリッジを設計する
WebView と React Native の postMessage は片道通信で、送った処理が成功したのか分かりません。相関IDと応答を組み込んだ要求・応答型ブリッジを、動く TypeScript コードで設計します。
「{n}件」で多言語が崩れる — CLDR複数形カテゴリとIntl.PluralRulesで数量表現を設計する
「1なら単数、それ以外は複数」という前提はロシア語やアラビア語で崩れます。CLDRの複数形カテゴリを地図として持ち、Intl.PluralRulesとi18nextで数量表現を正しく出すための実装を、個人開発の壁紙アプリを多言語化した経験からまとめました。
Detox と Maestro の E2E が全部緑なのに本番でクラッシュが出ていたとき — 自動リトライが握りつぶした不安定テストをフレーク率で炙り出す運用メモ
E2Eが全部緑なのに本番クラッシュが出る。原因は自動リトライがフレークを握りつぶしていたこと。テスト単位でフレーク率を計測し、隔離とリトライ予算で本物の失敗だけを残す運用メモです。
HealthKitの差分同期でデータを取りこぼす — HKAnchoredObjectQueryのアンカーを設計する
HealthKitの差分同期で歩数や睡眠が二重に数えられたり欠けたりする原因は、HKQueryAnchorの永続化設計にあります。newAnchorとdeletedObjectsを正しく扱い、再インストールやバックグラウンド更新をまたいでも整合するローカル取り込みの実装を、動くSwiftコードでまとめました。
Rork Maxのアプリで、アイコンを気持ちよく動かすsymbolEffect実装メモ
Rork Maxが生成したSwiftアプリで、SF Symbolsをbounce・pulse・variableColor・contentTransitionで動かす実装を、動くコードとOSバージョンの出し分け、そして動かしすぎて後悔した落とし穴つきで整理します。
取り消しを押しても戻らない——編集履歴を安全に巻き戻すUndo/Redoの設計
状態を丸ごと保存するUndoは、数十手でメモリを圧迫します。コマンド履歴とスナップショットを使い分け、微調整の合体・上限・セッション跨ぎの永続化まで備えたUndo/Redoを、動くTypeScriptで設計します。
Rork Max で App Clip を実装する — QR を読んだ瞬間にアプリの核だけを届ける設計メモ
Rork Max が出力するネイティブ Swift を土台に、App Clip の15MB制約・起動URLの受け取り・親アプリへの状態引き継ぎまでを実装ベースで整理します。
Sentry のイベント枠を数日で使い切ったとき — 送る前にノイズを削って本当のエラーを残す運用メモ
Sentry のイベント枠が月初で尽きる原因はノイズの偏りです。beforeSend・サンプリング・グルーピングで送信前に量を絞り、重要なエラーだけを枠内に残す実装と、実際に送信量を測って立て直した運用手順をまとめました。
端末の時計は動かせる — 日替わり機能とトライアル判定を時刻操作から守る設計
端末の時計を進めるだけで日替わり特典を先取りできてしまう——壁紙アプリのログで見つけた実例を起点に、壁時計・単調時計・サーバー時刻の3層で時刻源を使い分け、時計の巻き戻しにも耐える日替わりロジックとトライアル判定の設計をまとめました。
StoreKit 2 の署名付きトランザクションを Cloudflare Worker で検証する
端末が申告した課金状態をそのまま信じると、改ざんされたエンタイトルメントを通してしまいます。StoreKit 2 の署名付きトランザクション(JWS)を Cloudflare Worker 側で検証し、端末を信用せずに権利を付与する設計と実装を、動くコードとともに整理します。