ナミスマート合同会社

あるくとまる — 固定費ゼロで動く越境ECサイト

約30商品を世界に向けて販売する小規模EC。Cloudflare + Stripe のみで構成し、サーバの月額固定費をかけずに運用しています。

担当範囲
設計・開発・運用(フルスタック)
期間
開発・運用中
技術スタック
Astro (静的生成) React + Tailwind CSS Hono / Cloudflare Workers Cloudflare D1 + R2 d1zzle Better Auth Stripe Storyblok (Headless CMS)

何を解決するプロダクトか

商品数が数十点の小さなショップにとって、月額数万円の EC プラットフォーム利用料は 売上に対して重すぎます。あるくとまるは、Cloudflare の従量課金と Stripe の 決済手数料以外に固定費がかからない構成で、世界中からの注文を受けられる 自社 EC を実現したプロジェクトです。

構成

pnpm workspaces + Turborepo のモノレポで、3 つのアプリに分かれています。

アプリ内容
apps/web公開ストアフロント。Astro(静的)+ React + Tailwind
apps/admin商品管理 SPA。Vite + React、Cloudflare Access で保護
apps/apiHono の REST API。Cloudflare Workers 上で D1 / R2 を扱う

API は REST で、フロントからは Hono の型付き RPC クライアント(hc<AppType>) 経由で呼び出します。ルートのハンドラをメソッドチェーンで書いている限り、 API の型がそのままフロントの型になり、エンドポイントの変更はビルド時に検出されます。

商品画像は R2、ブログや読み物などの編集コンテンツのみ Storyblok(ヘッドレス CMS)で 管理し、商品データそのものは CMS に置かない切り分けにしています。

決済後の処理をどう壊さないか

EC で最も壊れてはいけないのは「支払いは通ったのに、その後の処理が落ちた」状態です。 このプロジェクトでは Stripe の Webhook 起点の副作用をリース獲得方式で処理し、 各ステップが自分専用の永続マーカーを持つ冪等な単位になっています。途中で失敗しても、 再実行すれば残りのステップだけが進みます。

こうした判断は ADR(Architecture Decision Record)として docs/decisions/ に残し、 採用した案だけでなく 却下した案とその理由 まで書いています。半年後の自分と AI エージェントの両方が、同じ問いを二度検討せずに済むようにするためです。