Skip to content

Stripe決済をClaude Codeで実装する

Stripeの決済機能は、実装ミスがそのまま金銭トラブルに直結します。Claude Codeを使えば、安全なコードを素早く生成しながら、見落としがちなセキュリティポイントも一緒に確認できます。今回はCheckout・Webhooks・サブスクリプションの3つを実装する流れを紹介します。

Stripe Checkoutのセッション生成をClaude Codeに任せる

Section titled “Stripe Checkoutのセッション生成をClaude Codeに任せる”

まずはCheckoutセッションの作成から始めましょう。Claude Codeに次のように指示します。

Next.js App RouterのRoute HandlerでStripe Checkoutセッションを生成するAPIを実装してください。
価格IDはPRICE_IDという環境変数から取得し、成功・キャンセル時のリダイレクト先も含めてください。

するとClaude Codeは以下のようなコードを生成します。

app/api/checkout/route.ts
import Stripe from 'stripe';
import { NextResponse } from 'next/server';
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
export async function POST() {
const session = await stripe.checkout.sessions.create({
mode: 'payment',
line_items: [{ price: process.env.PRICE_ID, quantity: 1 }],
success_url: `${process.env.NEXT_PUBLIC_URL}/success`,
cancel_url: `${process.env.NEXT_PUBLIC_URL}/cancel`,
});
return NextResponse.json({ url: session.url });
}

生成されたコードをそのままコピーするのではなく、「このコードに抜けているエラーハンドリングを追加して」と追加指示することで、try-catchや適切なステータスコードも整備できます。

環境変数: APIキーやデータベース接続情報など、コードに直接書きたくない値をOSやサーバーに設定する仕組み。API: Application Programming Interface の略。外部サービスとプログラム間でデータをやりとりするための接続口。

WebhooksのSignature検証を安全に実装する

Section titled “WebhooksのSignature検証を安全に実装する”

WebhookはStripeからのリクエストを受け取る重要なエンドポイントです。署名検証を省略すると第三者からの不正リクエストを受け入れてしまいます。Claude Codeへの指示はこのようにしましょう。

stripe.webhooks.constructEventを使ってSignature検証を行うWebhookハンドラーを書いてください。
payment_intent.succeededイベントを処理し、DBへの注文ステータス更新も含めてください。
エンドポイント: APIにアクセスするためのURL。例: `/api/users` や `/api/posts/123` など。

サブスクリプション処理のライフサイクル管理

Section titled “サブスクリプション処理のライフサイクル管理”

サブスクリプションは、作成・更新・キャンセルといった複数のイベントを扱う必要があります。Claude Codeに「customer.subscription.updatedとcustomer.subscription.deletedも同じハンドラーで処理するように」と指示すると、switch文で整理されたイベントルーターを生成してくれます。さらに「ユーザーのプラン情報をSupabaseのusersテーブルに同期する処理も追加して」と伝えれば、DB更新ロジックまで一気に実装できます。

複雑になりがちなStripe実装も、Claude Codeと対話しながら段階的に組み上げることで、抜け漏れのない堅牢な決済フローを構築できます。