RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/開発ツール
開発ツール/2026-07-09上級

Amplitude のファネルが一晩で改善したように見えたとき — イベントのスキーマ崩れを自己監査で炙り出す運用メモ

Rork で作ったアプリの Amplitude ファネルで、課金転換率が8%から19%へ跳ね上がったのに売上が動かない。原因はプロパティ名の崩れによる二重計上でした。イベント契約と実行時バリデータで崩れを計測し、段階的に締め直した運用メモです。

Amplitudeアナリティクス3React Native209イベント設計データ品質Expo149ファネル分析2

プレミアム記事

ある朝ダッシュボードを開くと、登録から課金までのファネルで転換率が 8.1% から 19.4% へ跳ね上がっていました。前夜に大きな施策を打った覚えはありません。胸のあたりが少しざわつきました。売上を確認すると、Stripe 側の数字はほとんど動いていません。

転換率だけが二倍になり、入金は横ばい。この食い違いこそ、イベント計測が静かに壊れているときの典型的な兆候でした。

この記事は、Rork で作った React Native / Expo アプリの Amplitude 計測で起きた「スキーマ崩れ」を、実行時のバリデータで炙り出し、崩れ率を計測しながら段階的に締め直した記録です。SDK の入れ方ではなく、入れた後に計測が嘘をつき始めたときにどう気づき、どう立て直すかに絞っています。

数字が嘘をつくとき、SDK はエラーを出さない

Amplitude を含むプロダクトアナリティクスの厄介なところは、壊れても例外が飛ばない点にあります。track('Purchase Completed', { price: '¥580' }) と書いても、price が数値ではなく文字列でも、SDK はそのまま受け取って送信します。ダッシュボードには何食わぬ顔で行が増えていきます。

このときファネルの内部で何が起きていたか、後から追ってみると単純でした。課金完了イベントのプロパティ名が、あるアップデートを境に plan_id から planId(キャメルケース)へ揺れていたのです。Amplitude は両者を別プロパティとして扱います。そしてファネルの定義側は古い plan_id を条件にしていたため、条件に合致しないイベントが「完了扱いされない」――のではなく、この件では逆に、重複した起動経路から Purchase Completed が二回飛んでいて、ユニークではなく総数で数えていた区間が水増しされていました。

崩れは一種類ではありません。私が実際に踏んだものを整理すると、次の四つに分類できました。

崩れの種類症状ファネルへの影響
プロパティ名の揺れplan_idplanId が混在条件フィルタが半分すり抜ける
型の崩れprice が数値だったり文字列だったり金額の集計・平均が壊れる
二重発火画面復帰とマウントで同じイベントが2回転換率が実数より高く出る
イベント名の表記揺れPurchase Completed と purchase_completed片方がファネルから消える

どれも SDK からは正常に見えます。だからこそ、計測の正しさは自分で計測しなければ守れない、というのがこの一件で腹落ちした点でした。

イベント契約を先に決める

立て直しの起点は、飛ばしてよいイベントとそのプロパティを一枚の「契約」として固定することでした。コードのあちこちに散った track() を眺めても崩れは見えません。あるべき姿を先に宣言し、実行時にそこと突き合わせる。この順序が要です。

契約は型として書きました。TypeScript の型は実行時には消えるため、型定義とバリデーション用のスキーマを一つのオブジェクトから導きます。

// analytics/contract.ts
// イベント契約 — 飛ばしてよいイベントとプロパティの正本
export const EVENT_CONTRACT = {
  'Purchase Completed': {
    plan_id: 'string',
    price: 'number',
    currency: 'string',
  },
  'Registration Completed': {
    auth_method: 'string', // 'email' | 'apple' | 'google'
  },
  'Paywall Viewed': {
    source: 'string',
  },
} as const;
 
export type EventName = keyof typeof EVENT_CONTRACT;
export type PropSpec = Record<string, 'string' | 'number' | 'boolean'>;

ここで大切なのは、契約に載っていないイベント名やプロパティを「間違い」として扱うと決めることです。新しいイベントを足したいときは、まず契約に追記する。この一手間が、命名の揺れとプロパティの取りこぼしを入口で止めます。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
イベントは飛んでいるのに数字が嘘をつく「スキーマ崩れ」を、実行時バリデータで違反イベントとして可視化する具体的な実装
崩れ率(contamination rate)を計測し、8%→19%と跳ねた偽の転換率を実数に戻すまでの段階的な締め直し手順
Rork/Expo のアップデートで壊れやすいイベント契約を CI で凍結し、リリース前に検出するチェックの組み方
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

開発ツール2026-04-04
Rork × PostHog でユーザー行動を可視化する — 離脱地点が見えるまでの導入手順
RorkアプリにPostHog(プロダクトアナリティクス)を導入してユーザー行動を可視化する方法を解説。イベントトラッキング・ファネル分析・フィーチャーフラグの実装手順を初心者にもわかりやすくご紹介します。
開発ツール2026-07-15
「、」が行頭に落ちた — Rork が組んだ名言カードと日本語の禁則処理
React Native の Text は日本語の行頭禁則を保証しません。実測した違反率、WORD JOINER による事前結合の実装、onTextLayout での自動監査、Rork Max(SwiftUI)との挙動差までまとめました。
開発ツール2026-07-10
React Compiler を Expo に入れて、手書き memo を 41 箇所消しました
Rork が生成した React Native 画面に React Compiler を導入し、再レンダリング回数を Profiler で実測しました。手書き memo/useCallback の削除判断、効かない箇所の見分け方、CI での回帰検知までをまとめています。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →