Designing SaaS Commerce with State Machines [Part 11]

What You Will Learn Why “string status” breaks down in SaaS commerce Implementation patterns for embedding state machines into Go domain models Design techniques for coordinating multiple state machines Handling edge cases: partial payments, expiration, and optimistic locking The Status Column from Hell When building web applications, you will almost certainly encounter “status” columns. Order status, invoice status, user account status. What starts as a simple active / inactive boolean grows into pending, processing, completed, cancelled, refunded… as the service evolves. ...

February 23, 2026 · 13 分 · ko-chan

SaaSの商取引をステートマシンで設計する [第11回]

この記事で得られること SaaSの商取引で「文字列ステータス」が破綻する理由 Goでステートマシンをドメインモデルに組み込む実装パターン 複数のステートマシンが連携するときの設計手法 部分支払い・期限切れ・楽観的ロックなどのエッジケース対処 statusカラムの地獄 Webアプリケーションを作っていると、ほぼ確実に「ステータス」カラムに出会う。注文の状態、請求書の状態、ユーザーアカウントの状態。最初は active / inactive の2値で済んでいたものが、サービスの成長とともに pending, processing, completed, cancelled, refunded… と増殖していく。 筆者が開発しているSaaS(マルチテナント型サブスクリプション管理システム)では、見積(Quote)、注文(Order)、請求書(Invoice)、決済(Payment)のそれぞれにステータスがある。 最初はシンプルだ。 1 2 3 4 5 CREATE TABLE invoices ( id UUID PRIMARY KEY, status VARCHAR(20) NOT NULL DEFAULT 'draft', ... ); アプリケーション側ではこうなる。 1 2 3 4 5 6 // よくある実装 func (s *InvoiceService) MarkPaid(id uuid.UUID) error { invoice, _ := s.repo.Get(id) invoice.Status = "paid" // ← 文字列を直接代入 return s.repo.Update(invoice) } これは動く。しかし、サービスが成長するにつれて問題が出る。 ...

February 23, 2026 · 7 分 · ko-chan

Building a 200K-Line SaaS Solo with Claude Code [Part 6]

What You’ll Learn The reality of large-scale development with Claude Code What to delegate to AI vs. what requires human judgment Actual workflow with a 200K-line codebase The Project in Numbers Metric Value Lines of code ~200K (Go 84K + TypeScript 113K) Development period ~3 months (Oct 2025–) Commits 311 Developers 1 Portals 4 (System / Provider / Reseller / Consumer) APIs 4 (dedicated to each portal) One person. Three months. 200K lines. ...

January 24, 2026 · 6 分 · ko-chan

Claude Codeで20万行のSaaSを1人で開発している話 [第6回]

この記事で得られること Claude Codeを使った大規模開発のリアル AIに任せていいこと、人間が判断すべきこと 20万行のコードベースでの実際のワークフロー 数字で見るプロジェクト 項目 数値 コード行数 約20万行(Go 84k + TypeScript 113k) 開発期間 約3ヶ月(2025年10月〜) コミット数 311 開発者 1人 ポータル 4つ(System / Provider / Reseller / Consumer) API 4つ(各ポータル専用) 1人で、3ヶ月で、20万行。 正直に言うと、このコードの大半はClaude Codeが書いた。私がやっているのは、方向性を決めて、レビューして、判断すること。 Claude Codeとは Anthropicが提供するCLIベースのAIコーディングエージェント。ChatGPTやCopilotとの違いは: 自律的に動く: 「この機能を実装して」と言えば、ファイルを読み、コードを書き、テストを実行する コンテキストが広い: 20万トークン(約15万行相当)を一度に理解できる CLIネイティブ: VSCodeに依存せず、ターミナルで完結 実際のワークフロー 1日の流れ 朝: Issueを1つ選ぶ ↓ Claude Code: 「この機能を実装して」 ↓ Claude Code: 仕様書(spec.md)を生成 ↓ 私: レビュー、修正指示 ↓ Claude Code: 設計書(plan.md)を生成 ↓ 私: レビュー、承認 ↓ Claude Code: 実装 ↓ 私: 動作確認、コードレビュー ↓ Claude Code: テスト作成 ↓ 私: マージ 私の作業時間は1日2-3時間。残りはClaude Codeが動いている間に別のことをしている。 ...

January 24, 2026 · 2 分 · ko-chan