ハコヅミを作る #73:Stripe のアカウントを作り、知らせを受け取る(画面のない課金の土台)

#72 で、課金を作る前に決めることを決めました。今回は、その最初の1歩です。

ただし、ハコヅミの画面は、1つも増えていません。作ったのは、Stripe から届く知らせを受け取って、「この人は有料か、無料か」を切り替える仕組みだけです。

  • Stripe のアカウントを、自分の手で作る
  • 選ばなかったもの
  • 料金に、名前を付けておく
  • 知らせを受け取る入口
  • 同じ知らせが、2回届いても
  • 開発環境の守りに、止められる
  • 本物の契約を作って、確かめる
  • 画面のない変更を、先に本番に出す

Stripe のアカウントを、自分の手で作る

課金を作る目的は、#69 に書いたとおり、Stripe で課金の仕組みを作る経験を積むことです。

なので、Stripe の画面の操作は、全部わたしが自分でやることにしました。Claude Code には、1画面ずつ、何を入れるか、なぜそうするかを説明してもらいます。わたしが画面を撮って見せ、次に進む。その繰り返しです。

Stripeの手順を覚える意図もあるので、順次進めていきたい

途中で、わたしが迷ったところがありました。

氏名を「じるラボ」で登録してしまったが、実際の氏名じゃなくても問題ない?

今の段階では、問題ありませんでした。Stripe には、本物のお金が動かない「サンドボックス」という練習用の環境があります。そこを使うあいだは、ログインする人の名前は、どこにも出ません。本当の氏名が要るのは、本番で売り始めるときの本人確認だけです。


選ばなかったもの

アカウントを作る途中で、いくつか「おすすめ」を出されました。選ばなかったものを、並べておきます。

出されたもの 中身 選ばなかった理由
Stripe Tax 国ごとの税金を計算して集める 日本の人に、税込みの月額で売るだけなので、要らない
Managed Payments 税の申告まで Stripe に任せる 1取引あたり 3.5% の手数料が、上乗せされる
請求書の送信 請求書をメールで送って払ってもらう 毎月カードから自動で引き落とす形なので、要らない
AI ツールから始める Claude などに Stripe の道具をつなぐ お金のアカウントなので、つなぐなら線を引いてから

いちばん迷いやすいのは、Managed Payments でした。「推奨」の札が付いていて、最初に目に入ります。

Stripe の設定の画面。左に「Stripe に任せる(推奨)」、下に「1取引あたり 3.5% の追加手数料」。右に「必要なものを選択」

左の「推奨」は、1取引 3.5% の上乗せ

海外にたくさん売るなら、税の申告まで任せられるのは、心強いと思います。でも、ハコヅミは日本の人に向けた、安めの月額です。3.5% の上乗せは、重すぎます。


料金に、名前を付けておく

サンドボックスに、商品「ハコヅミ 有料プラン」を作りました。料金は、月額の仮の額です。本当の料金は、売り始めるときに決めます。

Stripe の商品カタログの画面。「ハコヅミ 有料プラン」、¥300 JPY 月当たり、有効

サンドボックスの商品(料金は仮の額)

ここで1つ、Claude Code にすすめられて、料金に「検索キー」を付けました。hakozumi_paid_monthly という名前です。

Stripe の料金には、price_ で始まる番号が付きます。この番号は、練習用の環境と本番とで、別々になります。アプリに番号を書くと、本番に出すときに、書き換えが要ります。

検索キーを付けておくと、アプリは「hakozumi_paid_monthly という名前の料金」で探せます。本番の料金にも同じ名前を付ければ、アプリは直さなくて済みます。本当の料金を決めて作り直すときも、同じです。


知らせを受け取る入口

ここからが、ハコヅミの側の作業です。

申し込みも、解約も、支払いも、Stripe の画面で行われます。ハコヅミのサーバーは、それを知りません。Stripe が「この人の契約が作られた」「解約された」と、ハコヅミに知らせてくれます。これを Webhook といいます。

ハコヅミに、その知らせを受け取る入口を1つ作りました。

  • 届いた知らせが本当に Stripe からのものかを、署名で確かめる。合わなければ、何もしない
  • 契約の状態から、有料か無料かを決める。有効なら有料、解約されたら無料
  • 無料に戻っても、上限を超えている画像は消さない(前からの決まり)

署名の確かめは、Stripe の公式のパッケージに任せました。ハコヅミでは、パッケージを足すときは、理由を書く決まりにしています。署名の確かめは、時刻のずれの許し方や、比べ方のこまかい気配りが要るところです。自分で書くより、Stripe が書いたものを使うほうが、安全だと考えました。


同じ知らせが、2回届いても

知らせを受け取る入口には、気をつけることが2つありました。

1つ目は、同じ知らせが、2回届くことがあること。Stripe は、ハコヅミからの返事がなかったり、遅れたりすると、同じ知らせを送り直します。受け取った知らせの番号を覚えておいて、2回目は何もしないようにしました。

2つ目は、知らせの順番が、入れ替わって届くことがあること。「解約された」のあとに、その前の「有効になった」が遅れて届くと、解約した人が有料に戻ってしまいます。知らせが作られた時刻を覚えておいて、それより古い知らせでは、上書きしないようにしました。

どちらも、ふだんはめったに起きません。でも、お金と「有料かどうか」に関わるところです。めったに起きないことほど、起きたときに気づきにくいので、最初から入れておきました。


開発環境の守りに、止められる

入口を作って、開発環境に出したところで、Claude Code が1つ気づきました。

ハコヅミの開発環境は、Cloudflare Access という仕組みで、わたししか開けないようにしてあります。そのままだと、Stripe のサーバーからの知らせも、Access のログインの画面に止められて、届きません。

開発環境の守りは、外したくありません。そこで、入口のパスだけ、Access を通さない設定を足しました。

入口では、Stripe の署名で本物かを確かめています。だれかが入口に何かを送っても、署名が合わなければ、何も変わりません。Access を外すのは入口だけで、ほかの画面は、今までどおり守られています。

設定のあと、ログインしていない状態で、2つを開いて確かめました。トップページは、今までどおり Access のログインの画面へ。入口は、Access を通って、ハコヅミまで届きました。


本物の契約を作って、確かめる

次は、Stripe に「この入口に知らせて」と登録します。受け取る知らせは、契約の作成・変更・削除の3つだけにしました。

Stripe のイベントを選ぶ画面。customer.subscription で検索し、created と deleted にチェック。選択されているイベントは 3

受け取る知らせを選ぶ(updated も選んでいて、全部で3つ)

登録すると、署名の鍵ができます。この鍵を、開発環境のサーバーに入れました。鍵は、チャットにも貼らず、わたしが写して入れます。Claude Code は、鍵を見ません。

確かめ方は、少し回り道をしました。Stripe の画面には「テストイベントを送信する」というボタンがあります。押すと、Stripe の道具(CLI)を入れてください、という画面が出ました。

道具を入れる代わりに、サンドボックスで、本物の契約を作ることにしました。

  1. テストの顧客を作る
  2. テスト用のカード番号(4242 4242 4242 4242)を付ける
  3. 「ハコヅミ 有料プラン」の契約を作る。契約のメモ(メタデータ)に、ハコヅミの利用者の番号を入れる

契約を作ると、ハコヅミの開発環境のアカウントの画面で、会員区分が「有料」に変わりました。Stripe で契約をキャンセルすると、「フリー」に戻りました。

Stripe の Webhook の「イベントの配信」の画面。customer.subscription.deleted と customer.subscription.created が、どちらも 200 OK

Stripe の側でも、2つの知らせが届いたことが分かる

テストの知らせではなく、本物の契約の知らせで確かめられたのは、よかったと思います。署名が合うこと、守りに止められないこと、だれの契約かを読めること。全部を、一度に確かめられました。


画面のない変更を、先に本番に出す

この段階で本番に出すかを、Claude Code に聞きました。

このタイミング(348)の段階で本番に一度出しておいた方がいいの?

返事は「出しておくほうがよい」でした。理由の中で、いちばん大きかったのは、これです。

ハコヅミの本番リリースは、「開発中のものを、まるごと本番へ」という形です。次の段階では、アカウントの画面に「有料プランにする」のボタンが入ります。それが開発中のものに入ったあとで、別の急ぎの直しを本番に出したくなると、そのボタンも一緒に、本番に出てしまいます。本番には、まだ Stripe の鍵を入れていないので、押しても申し込めません。

今回の土台は、画面が変わりません。今のうちに出せば、開発中のものを、きれいな状態に戻せます。本番では、鍵がないので、入口は何もしません。

もう1つ、ここで決まりを足しました。課金の画面は、Stripe の鍵が入っている環境でだけ出す。開発環境では見えて試せて、本番では、売り始めるまで見えません。これなら、課金の画面が開発中のものに入ったままでも、ほかの直しを、いつでも本番に出せます。


小さなつまずき

作っている途中で、2つ、つまずきました。

1つは、管理の画面のテストが、手元で時間切れになったこと。前に書いたフォローのテストで、500人の利用者を作っていました。それが、テストを流すたびに手元のデータベースにたまり、5,000人近くになっていました。全員を並べる管理の画面が、遅くなっていたのです。たくさん作るテストは、終わったら消すようにしました。

もう1つは、わたしの側の決まりの話です。手元のパソコンからは、サーバーに出すコマンドを打たない、と決めています。Claude Code が、出来上がりの大きさを測るために、「試しに組み立てるだけ」の形でそのコマンドを打ちました。どこにも出してはいません。でも、決まりの文字どおりには外れるので、そう報告してきて、もう使わないことにしました。


おわりに

  • 手順を覚えたいなら、画面は自分で操作する。1画面ずつ、理由を聞きながら
  • 「推奨」の札は、自分の事情に合うとは限らない。手数料の行まで読む
  • 環境ごとに変わる番号は、アプリに書かない。名前を付けて、名前で探す
  • 署名の確かめのような細かいところは、公式のものに任せる
  • 同じ知らせが2回届く、順番が入れ替わる。めったに起きないことほど、最初から入れておく
  • 守りを外すなら、外すところだけ。外したところには、別の守りがあることを確かめる
  • テストのボタンが使えなければ、本物を小さく作って確かめる
  • 画面の変わらない変更は、先に出しておく。まだ出せないものを、開発中にためない

次は、申し込みと解約の画面の予定です。

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

← トップページに戻る