スヌーズすると課金されるアラームアプリを作った。Appleが1通のメールで葬った。
https://capsaicin.site/blog/2026-07-01
8週間の開発。実機。本物のStripe課金。そして、Cupertinoから届いた3文のメール。
スマホは手の中にあった。アラームが鳴っている——シミュレータではなく、僕の実際のiPhoneで。そしてスヌーズボタンの裏には、本物のStripe課金が仕込まれていた。それが目の前で起きるのを、僕はただ見ていた。8週間の作業が、たった一つの瞬間に凝縮されて、そして——動いた。
その1時間後、Appleから届いたメールが、3文でこのプロジェクトに幕を引いた。
https://capsaicin.site/static/a602caa548546bb684483910a9b785e5/e2f57/img1.jpg
SnoozePayのオンボーディング画面。ダークネイビーの背景に赤い目覚まし時計のアイコン、太字の白いアプリ名、「スヌーズを押すと課金するアラーム時計」というタグライン、3つの機能説明、オレンジ色の「Get Started」ボタン。
SnoozePay ― スヌーズを押すと課金するアラーム時計。
アイデアはシンプルだった
あまりにシンプルすぎて、てっきり誰かがもうやっているものだと思い込んでいた。スヌーズを押すたびにクレジットカードへ課金するアラーム。ポイント制でもなければ、厳しめの通知でもない。実際にお金が、消える。ベッドから起き上がれなかった、というだけの理由で。名前は SnoozePay にした。
僕は筋金入りのスヌーズ魔だ。スヌーズが体に悪いという話は知っている——要するに睡眠サイクルを繰り返し痛めつけているだけで、実質的なメリットは何もない。でも、それを知っていたところで一度もベッドから出られた試しがない。僕に必要だったのは、本当に牙のある「代償」だった。
仕組みはこうだ。アラームをセットし、スヌーズ料金を紐づける(最低$1.99)。アラームが鳴ったら選択肢は二つ。無料で「解除」するか、金を払って「スヌーズ」するか。スヌーズを重ねれば、自分で設定した1日の上限に達する。シンプルで、ちょっと意地悪で、そしてできれば効果があってほしい。
https://capsaicin.site/static/2e6b0f1fae2c8130b85428f312ed7d2d/c0c3d/img2.jpg
SnoozePayのアラーム設定画面。時刻ピッカーは午後10時21分、繰り返しは月〜金がオレンジでハイライト、スヌーズ料金は$1.99、スヌーズ時間は5分を選択、5種類の着信音からClassicを選択、1日の上限は$10.00。
スヌーズ料金、時間、着信音、1日の上限 ― アラームが鳴る前にすべて設定する。
なぜ$1.99が下限だったかというと、これは適当な数字じゃない。Stripeの手数料(2.9% + $0.30)を引くと、これより安く設定した場合の手取りが$1を切ってしまう。「代償」を売りにするアプリとしては、それはさすがに格好がつかなかった。
技術スタック
・React Native + Expo(TypeScript)
・Firebase — Firestore、Cloud Functions、Auth
・Stripe — Payment Intents、SetupIntent、Webhooks
・取引メールに SendGrid
・ビルドに EAS
Expoを選んだのは、素のReact Nativeのビルド地獄を味わうことなくクロスプラットフォーム対応をしたかったから。Firebaseは、単純にもう慣れていたから。Stripeは、ユーザーの金をこっそり溶かしたりしないと信頼できる唯一の決済プロセッサだったから。
開発全体を通して、Claudeをコーディングの相棒として使った。松葉杖というより、どんな間抜けな質問にも苛立たない、動きの速いシニアエンジニアといった感じだ。組み立てて、レビューして、直して、次へ。とにかく速く進んだ。