ハコヅミを作る #76:有料プランを休止できるようにする(冬は止めておける、払った分は再開で引く)

#75 で、支払いが失敗したときの扱いを作りました。今回は、有料プランの休止です。

  • なぜ休止を作るか
  • 休止と凍結は、別のもの
  • 決めておかなかった3つ
  • 調べてから決める
  • ボタンは、ハコヅミに作る
  • 時計を2か月進める
  • 再開すると、¥0 の請求

なぜ休止を作るか

キャンプには、季節があります。冬はほとんど行かない、という人も多いと思います。

その季節にも毎月払うのは、もったいない。でも、解約すると、春にまた申し込み直すことになります。そこで、契約は残したまま、支払いだけを止められる「休止」を作ることにしました(#72 で決めた)。

休止のあいだは、無料のプランと同じ扱いです。登録した内容と画像は消えません。新しく画像を付けられるのが、無料のプランの上限までになるだけです。


休止と凍結は、別のもの

ハコヅミには、前から「凍結」があります。規約に反したときなどに、管理者がアカウントを止めるものです。凍結されると、アプリそのものが使えなくなります。

休止は、本人が自分で選ぶものです。アプリは今までどおり使えて、有料の分が無料のプランの扱いになるだけです。

名前が似ているので、同じしくみで作りたくなります。でも、意味がまったく違うので、別のものとして作る、と前から決めてありました。今回も、凍結の印とは別に、Stripe の契約の状態(休止中)で見分けています。


決めておかなかった3つ

Issue を書いたときに、わざと決めずに、「作るときに決める」としておいたことが3つありました。

  1. 休止を、押したときから効かせるか、払った期間の終わりから効かせるか
  2. 再開したときの支払いは、どうなるか
  3. 休止の長さに、上限を付けるか

どれも、Stripe でどこまでできるかが分からないと決められません。先に決めても、できなければ決め直しになります。


調べてから決める

/implement 351 で取りかかると、Claude Code は、実装の前に、Stripe のパッケージに入っている一時停止のしくみを調べて、こう報告してきました。

  • 一時停止は、押したときにすぐ止まる。「払った期間の終わりから」という指定はない
  • そのかわり、払った期間の残りの日数を、次の請求から引く(クレジットにする)ことはできる
  • 再開すると、その日から新しい1か月が始まり、その日に払うのが既定
  • 一時停止には、自動で再開する日を付ける機能がない

そのうえで、案を出してきました。

  1. 押したらすぐ休止。残りの日数の分は、再開のときの請求から引く
  2. 再開した日から新しい1か月。支払いが成功したときだけ、有料に戻す
  3. 長さに上限は付けない(自動で再開する仕組みが、Stripe にもハコヅミにもないため)

払った期間の終わりから止める形は、時刻で動く仕組み(決まった時刻に処理を走らせるもの)がないと作れません。ハコヅミには、まだそれがありません。そのために仕組みを足すより、「すぐ止めて、残りは後で引く」で、払った分が無駄にならないなら十分だと思いました。

全てその方針でOK

1つだけ、気をつけるところがあります。残りの日数は、返金ではなく、再開のときに引くものです。休止したまま再開しなければ、戻りません。休止の確認の文に、そのことを書きました。

ハコヅミの確認の画面。「有料プランを休止しますか?」。休止のあいだはお支払いが止まり無料のプランと同じ扱いになること、登録した内容と画像は消えないこと、払った期間の残りの日数の分は再開するときのお支払いから引くこと。「やめる」と「休止する」のボタン

休止する前の確認(架空のデータ)


ボタンは、ハコヅミに作る

解約やカードの変更は、#74 で、Stripe の契約の管理の画面に任せました。でも、その画面には、一時停止の項目がありません。設定を見たときにも、ありませんでした。

そこで、休止と再開のボタンは、ハコヅミのアカウントの画面に作りました。押すと、ハコヅミのサーバーが Stripe に「一時停止して」「再開して」と頼みます。

ハコヅミのアカウントの画面。会員区分「有料」、次の支払いの日、「契約を管理する」。その下に「キャンプに行かない季節は、有料プランを休止して、お支払いを止められます。」と「休止する」のボタン

有料の人のアカウントの画面(架空のデータ)

休止のあいだは、「休止中です」と「再開する」が出ます。

ハコヅミのアカウントの画面。会員区分「フリー」、「休止中です(お支払いは止まっていて、無料のプランと同じ扱いです)」、「契約を管理する」と「再開する」のボタン

休止中のアカウントの画面(架空のデータ)

休止できるのは、支払いが滞っていなくて、解約の予定もない人だけにしました。支払いの払い直しのあいだに休止すると、払っていない分がどうなるのか、分かりにくくなるからです。


時計を2か月進める

#74・#75 と同じく、Stripe のテストクロック(時計を進める仕組み)で確かめました。

テストクロックの中で契約を作り、ハコヅミの「休止する」を押すと、Stripe の契約が「一時停止」になりました。次の請求書の欄は、「-」です。

Stripe の顧客の画面のサブスク。ハコヅミ 有料プランが「一時停止」、次の請求書は「-」

Stripe の側でも「一時停止」

そのまま、時計を2か月ほど進めました。本来なら、請求日が2回来ます。でも、請求書は1件も増えず、引き落としは止まったままでした。


再開すると、¥0 の請求

最後に、ハコヅミの「再開する」を押しました。再開にも、確認を出しています。その日に1か月分を払うことになるからです。

再開すると、会員区分が「有料」に戻り、再開した日に、新しい請求書ができました。合計は ¥0 です。

Stripe の顧客の画面の請求書。12/25 の請求書は ¥0 で支払い済み、10/19 の請求書は ¥300 で支払い済み(請求書番号の欄は隠してある)

再開した日の請求は ¥0(請求書番号は隠しています)

今回は、契約を作ってすぐに休止したので、払った期間の残りが、ほぼ1か月分(¥300)ありました。それが、再開のときの ¥300 から、ちょうど引かれたのです。次の請求日は、再開した日の1か月後になっていました。

決めたとおりに動いているのを、数字で見られて、安心しました。

1つ、見え方の違いがありました。Stripe の画面では、次の請求日が「1月25日」なのに、ハコヅミでは「1月26日」と出ました。Stripe の画面は世界標準時、ハコヅミは日本の日付で出しているためでした(世界標準時の夜8時は、日本では次の日の朝5時です)。食い違いではありません。


おわりに

  • 季節のあるものには、休止がほしい。解約より軽く、続けやすい
  • 名前の似た「凍結」とは、別のものとして作る
  • できるかどうか分からないことは、Issue で決めずに「作るときに決める」にしておく。調べてから決める
  • 期間の終わりから止められないなら、すぐ止めて、残りを後で引く
  • 自動の再開は作れない。作れないなら、上限も付けない
  • 時計を進めて、止まっていることと、引かれていることを、数字で見る

これで、課金の「作る」は、あと1つです。次は、退会したときに契約を止めることと、規約とプライバシーポリシーの直しの予定です。

テスタを募集しています。キャンプに行く方、よければ、触ってみてください。

← トップページに戻る