RORK LABEN
RORKMAX — Rork MaxはReact NativeではなくネイティブSwiftアプリを生成します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro・iMessageに対応しますNATIVE — Rork MaxはAR/LiDARやMetalの3D、ウィジェット、Dynamic Island、Live Activities、HealthKit、HomeKit、NFC、Core MLなど、React Nativeでは届かない機能を解放しますPUBLISH — 2クリックでのApp Store公開に対応し、生成から公開までの手数が大きく減りましたSIM — ブラウザ内のストリーミングiOSシミュレータで、XcodeやMacを用意せずに実機に近いApple環境でテストできますSTANDARD — 標準のRorkは自然言語でアプリを記述すると、React Native(Expo)の動くコードを生成しますPRICING — 料金は無料で始められ、有料プランは月25ドルから、Rork Maxは月200ドルですRORKMAX — Rork MaxはReact NativeではなくネイティブSwiftアプリを生成します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro・iMessageに対応しますNATIVE — Rork MaxはAR/LiDARやMetalの3D、ウィジェット、Dynamic Island、Live Activities、HealthKit、HomeKit、NFC、Core MLなど、React Nativeでは届かない機能を解放しますPUBLISH — 2クリックでのApp Store公開に対応し、生成から公開までの手数が大きく減りましたSIM — ブラウザ内のストリーミングiOSシミュレータで、XcodeやMacを用意せずに実機に近いApple環境でテストできますSTANDARD — 標準のRorkは自然言語でアプリを記述すると、React Native(Expo)の動くコードを生成しますPRICING — 料金は無料で始められ、有料プランは月25ドルから、Rork Maxは月200ドルです
記事一覧/ビジネス
ビジネス/2026-07-19上級

プッシュ通知を1日3件に増やしたら、翌週の再訪が減っていたとき — 通知頻度を D7 リテンションとオプトアウト率で測り直す運用メモ

プッシュ通知を厚くすれば再訪は増えるはず、という思い込みが D7 リテンションを削っていました。通知頻度をコホート別の D7 とオプトアウト率で測り直し、1日3件から1件へ減らすまでの計測と判断の運用メモです。

retention2push-notification2cohort-analysisD7engagement

プレミアム記事

Rork で作った学習記録アプリの再訪が伸び悩んでいて、私はプッシュ通知を厚くしました。それまで1日1件だったものを、朝・昼・夜の3件へ。理屈はいたって素朴です。思い出す回数が増えれば、戻ってくる回数も増えるはず。

最初の数日、通知経由の起動数は確かに増えました。ダッシュボードのその数字だけを見て、私はしばらく満足していました。ところが2週間後、インストールから7日後の継続率(D7 リテンション)を週ごとに並べたとき、線が下を向いていることに気づきます。通知を増やした週のコホートだけ、D7 が 14.2% から 9.8% へ落ちていました。

戻ってきてほしくて通知を足したのに、その通知が離脱を早めていた。このアプリの収益は AdMob のインタースティシャル広告に乗っているので、D7 が落ちることは翌週の広告表示回数がそのまま減ることを意味します。再訪の数字は、私にとって手触りのある売上の数字でもありました。この記事は、その思い込みを数字で解くまでの記録です。個人開発で回している小さなアプリの話ですが、通知頻度を「感覚」ではなく「コホート」で決めるやり方は、規模を問わず効くはずです。

通知経由の起動数は、増えたように見えるだけでした

最初につまずいたのは、見ていた指標が間違っていたことでした。「通知をタップして開いた回数」は、通知を3倍送れば当然ある程度増えます。送った数が増えたのだから、タップの絶対数が増えるのは自明で、これは施策の成功を意味しません。

本当に見たかったのは、通知の有無にかかわらず「そのユーザーが1週間後も戻ってきているか」でした。通知経由の起動と、通知なしの自発的な起動を、最初から分けて記録しておくべきだったのです。

// lib/analytics.js — 起動を「きっかけ別」に記録する
// これを分けておかないと、通知の効果を過大評価する
 
export function trackAppOpen({ source, userId }) {
  // source: 'push' | 'organic' | 'deeplink'
  analytics.capture('app_open', {
    userId,
    source,                          // ← ここが後の切り分けの生命線
    ts: Date.now(),
  });
}
 
// 通知タップ時
Notifications.addNotificationResponseReceivedListener(() => {
  trackAppOpen({ source: 'push', userId: currentUser.id });
});
 
// コールドスタート(通知以外の自発起動)
if (!launchedFromNotification) {
  trackAppOpen({ source: 'organic', userId: currentUser.id });
}

source を分けて記録し始めてから、絵がはっきりしました。通知経由の起動は週あたり約 1.9 倍に増えていた一方で、自発的な起動(organic)は逆に 12% 減っていたのです。通知で無理に引き戻したユーザーが、自分から開く習慣を失っていく。合計するとプラスに見えず、むしろ D7 を削っていました。

インストール週でコホートを切り、指標を並べます

「通知を増やしたら悪くなった」を主張するには、増やす前と後を同じ物差しで比べる必要があります。私はインストールした週でユーザーを束ね、コホートごとに D1・D7・D30 とオプトアウト率を並べました。

インストール週通知頻度D1D7D30通知オプトアウト率
第1週(基準)1日1件31.4%14.2%6.1%4.3%
第2週1日3件30.9%11.6%9.7%
第3週1日3件31.1%9.8%13.1%

D1 はほとんど動いていません。通知頻度は初日の体験には効かないからで、これは筋が通っています。効いていたのは D7 とオプトアウト率でした。通知を厚くした2週は D7 が下がり続け、通知の許可を切るユーザーの割合が 4.3% から 13.1% へ跳ね上がっています。一度オプトアウトされると、そのユーザーへは二度と通知が届きません。目先の再訪と引き換えに、将来の再訪チャネルを焼いていたわけです。

コホートを切る SQL は難しくありません。イベントログさえ source 付きで貯めておけば、あとは集計するだけです。

-- インストール週ごとの D7 リテンション
-- installs: user_id, install_date
-- opens:    user_id, ts, source
SELECT
  date_trunc('week', i.install_date)               AS cohort_week,
  count(distinct i.user_id)                         AS installs,
  count(distinct case
    when o.ts::date = i.install_date + interval '7 day'
    then o.user_id end)                             AS d7_returned,
  round(100.0 * count(distinct case
    when o.ts::date = i.install_date + interval '7 day'
    then o.user_id end) / count(distinct i.user_id), 1) AS d7_rate
FROM installs i
LEFT JOIN opens o ON o.user_id = i.user_id
GROUP BY 1
ORDER BY 1;

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

この記事の続きを読む

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

この記事で得られること
通知頻度を変えた週ごとにインストールコホートを切り、D1/D7/D30 とオプトアウト率を並べて比較する計測の組み方
「通知経由の起動」だけを見ると増えて見えるのに、総 D7 が落ちる錯覚を、通知なし起動と分けて可視化する手順
1日3件から1件へ減らして D7 が回復した実測と、頻度を上げてよいユーザー層の線引き
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

ビジネス2026-07-02
コントロールセンターに自作コントロールを置く — Rork Max アプリの起動導線を増やす ControlWidget 設計
iOS 18 の ControlWidget でコントロールセンター・ロック画面・アクションボタンに自作コントロールを置く実装。ControlWidgetButton と ControlWidgetToggle の動くコード、起動導線としての価値、リテンションへの効かせ方を解説します。
ビジネス2026-07-19
アプリを手放す日の実務 — App Store の「Appを転送」で引き継がれるもの・作り直すもの
App Store Connect の「Appを転送」でアプリを売却・移管する際の条件と実務を整理します。評価やサブスク購読者など引き継がれるもの、TestFlight や APNs キーなど作り直すもの、ユーザーの再ログインが発生する箇所まで公式情報に基づいてまとめました。
ビジネス2026-07-19
役目を終えたアプリをどう畳むか — 更新停止から完全終了までを先に設計する
収益がサーバ費を下回ったアプリを、どの順番で畳むか。更新停止・販売取り下げ・完全終了の3段階の判断表、サーバ由来の終了告知フラグとデータ持ち出し口のTypeScript実装、自動更新購読の後始末までを個人開発の実感から整理しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →