はじめに
本格的なマイクロサービスアーキテクチャのPOSアプリケーションを、Claude Codeを使って構築した体験談です。proプラン(20$)のサブスクユーザーにも開放されたと聞き、ちょうど開発中のアプリがあったのd試してみました!
JANバーコードスキャン機能と税計算機能を持つ実用レベルのアプリケーションを、Claude Codeとの対話だけで0から作り上げた過程をご紹介します。
インストール、セットアップについては以下を参照させていただきました。
2025年6月現在ではWindows未対応のため、WSL(Windows Subsystem for Linux)環境を活用するのがベターかと思われます。
成果物
- 技術スタック: Next.js + FastAPI + MySQL
- 主要機能: JANスキャン、商品検索、税計算、取引記録
- デプロイ環境: Microsoft Azure
- 開発時間: 11時間
Claude Codeとは
Claude Codeは、従来のChatGPTとは異なり、実際にコードを書き、ファイルを編集し、コマンドを実行できるAI開発支援ツールです。
従来の開発との違い
- コード生成だけでなく実装まで: ファイル作成・編集・デバッグを一貫実行
- プロジェクト全体の把握: 複数ファイル間の整合性を維持
- 対話的な問題解決: エラー発生時の調査・修正を即座に実行
アーキテクチャ設計
システム構成
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ フロントエンド │ │ バックエンド │ │ データベース │
│ (Next.js) │────│ (FastAPI) │────│ (MySQL) │
│ port: 3000 │ │ port: 8000 │ │ port: 3306 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
Azure App Service Azure App Service Azure Database
(Frontend) (Backend API) for MySQL
人間とClaude Codeの役割分担
人間の担当領域:
- 顧客要望の整理・要件定義
- アーキテクチャ設計・技術スタック選定
- デプロイ戦略・実装計画書作成
Claude Codeの担当領域:
- 詳細設計・コンポーネント設計
- 全ファイルの生成・編集・デバッグ
- エラー調査・修正・最適化
開発プロセス実録
Phase 1: Level 1基本機能開発
実装計画書ベースの開発:
# POSアプリ実装計画書の例 (Lv1)
## システム構成
- フロントエンド: Next.js (Azure Web App)
- バックエンド: FastAPI (Azure Web App)
- データベース: MySQL (Azure Database for MySQL)
## UI要素の配置
- ② 商品コード入力エリア
- ① 読み込みボタン
- ③ 名称表示エリア
- ④ 単価表示エリア
- ⑤ 購入リストへ追加ボタン
- ⑥ 購入品目リスト(名称/数量/単価/単品合計)
- ⑦ 購入ボタン
## APIエンドポイント定義
- `/products/{code}` (GET): 商品マスタ検索
- `/purchase` (POST): 購入処理
## データベース設計
- PRD_MASTER(商品マスタ): PRD_ID, CODE, NAME, PRICE
- TRD(取引): TRD_ID, DATETIME, EMP_CD, STORE_CD, POS_NO, TOTAL_AMT
- TRD_DTL(取引明細): TRD_ID, DTL_ID, PRD_ID, PRD_CODE, PRD_NAME, PRD_PRICE
Claude Codeとの対話:
私: 「実装計画書を基に、POSアプリケーションを開発してください」
Claude Code: 「以下の順序で進めます:
1. プロジェクト構成の作成
2. データベース設計・接続設定
3. バックエンドAPI実装
4. フロントエンド基本UI実装
5. 統合テスト」
Phase 2: Level 2機能拡張
Level 1完成後、実装計画書のLevel 2機能(JANスキャン・税計算)を追加しました。
Level 2機能追加計画書の主要内容:
# POSアプリ機能追加計画書 (Lv2)
## UI変更点
- ① 「読み込みボタン」→「スキャン(カメラ)」ボタンに変更
- ② 「コード入力エリア」→「コード表示エリア」に変更
## 新機能
1. バーコードスキャンと商品検索
- スキャンボタンクリック → カメラ起動
- バーコード読み取り → 商品マスタ検索API呼び出し
2. 購入処理と結果表示
- 購入完了後 → 税込・税抜金額をポップアップ表示
- APIレスポンス拡張: total_amount_ex_tax追加
## データベース拡張
- TRD: TTL_AMT_EX_TAX カラム追加(税抜金額)
- TRD_DTL: TAX_CD カラム追加(消費税区分)
JANスキャン機能の実装:
コード詳細
// 生成されたバーコードスキャナーコンポーネント
export default function BarcodeScanner({ onScanSuccess, onScanError }: Props) {
const videoRef = useRef<HTMLVideoElement>(null);
const readerRef = useRef<BrowserMultiFormatReader | null>(null);
const startScanning = useCallback(async () => {
const constraints = {
video: {
facingMode: 'environment',
width: { ideal: 640 },
height: { ideal: 480 }
}
};
const stream = await navigator.mediaDevices.getUserMedia(constraints);
if (videoRef.current) {
videoRef.current.srcObject = stream;
}
readerRef.current = new BrowserMultiFormatReader();
readerRef.current.decodeFromVideoDevice(null, videoRef.current, handleScanResult);
}, [onScanSuccess, onScanError]);
}
税計算機能の実装:
コード詳細
class TaxCalculator:
@staticmethod
def calculate_tax_exclusive_amount(total_amount: int, tax_rate: str) -> dict:
if tax_rate == '10':
tax_exclusive = int(total_amount / 1.1)
tax_amount = total_amount - tax_exclusive
return {
'tax_exclusive_amount': tax_exclusive,
'tax_amount': tax_amount,
'tax_rate': 0.10
}
遭遇したトラブルと解決策
開発自体は問題なく進んだものの、デプロイ環境において知識不足による機能要件のあいまいさから、トラブルが頻発してしまいました。
トラブル1: 405 Method Not Allowed エラー
発生状況:
私: 「localhostでは動くのに、デプロイ環境で405エラーが発生します」
Claude Code: 「バックエンドログを確認しましょう。POSTリクエストがGETに変換されている可能性があります」
私: 「確認すると、POSTがGETに変換されています」
Claude Code: 「Next.jsリライト設定とAzure App Serviceの相性問題です。直接API接続に変更しましょう」
解決策:
// 修正前: リライト経由
const response = await axios.post('/api/purchase', data);
// 修正後: 直接接続
const apiBaseUrl = process.env.NEXT_PUBLIC_API_BASE_URL;
const response = await axios.post(`${apiBaseUrl}/purchase`, data);
トラブル2: CORS エラー
発生状況と解決:
私: 「商品検索は動くのに、購入ボタンでネットワークエラーが出ます」
Claude Code: 「CORS設定の問題です。バックエンドの設定を修正します」
app.add_middleware(
CORSMiddleware,
allow_origins=[
"https://localhost:3000",
"https://app-step4-67.azurewebsites.net",
],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
トラブル3: Mixed Content エラー
HTTPS/HTTP混在問題の解決:
# Azure App Service環境変数の設定 + 再デプロイ
NEXT_PUBLIC_API_BASE_URL=https://app-step4-68.azurewebsites.net
パフォーマンス最適化
バーコード読み取り速度改善
問題: 初期実装で5-10秒 → 目標: 1秒以内
最適化アプローチ:
// 最適化前
const hints = new Map();
hints.set(DecodeHintType.TRY_HARDER, true);
// 最適化後: シンプル設定
readerRef.current = new BrowserMultiFormatReader();
readerRef.current.decodeFromVideoDevice(null, videoRef.current, handleScanResult);
成果:
- 読み取り時間: 0.8秒平均
- 成功率: 98%
- CPU使用量: 30%削減
Claude Code開発の実際の時間
今回のPOSアプリケーション開発にかかった実際の時間:
Level 1 (基本POS機能):
要件定義: 1時間
実装: 2時間
デプロイ: 30分
Level 2 (JANスキャン・税計算追加):
要件定義: 1時間
実装: 2時間
デプロイ: 30分
デプロイ環境での修正対応: 4時間
合計: 11時間
Claude Code開発の特徴
高速化される作業:
- 技術調査: Claude Codeが最適解を即座に提案
- コード実装: フロントエンド・バックエンド・DBを包括実装
- 設定ファイル: 環境設定も同時生成
- 基本テスト: テストケースも自動生成
時間を要する作業:
- 要件定義: 人間の思考・判断時間は必要
- 初回問題対応: 新しい環境固有の問題は調査が必要
- 創造的設計: UI/UXの細かな調整
Claude Code活用のベストプラクティス
今回の経験から得られた教訓をまとめました。
効果的な指示方法
❌ 曖昧な指示:
「POSアプリを作ってください」
「バーコード機能を追加して」
⭕ 具体的な指示:
「JANバーコード(EAN-13/EAN-8/UPC-A)を1秒以内で読み取り、
ZXing-jsライブラリを使用し、HTTPS環境での動作を前提とした
Next.js TypeScriptコンポーネントを実装してください。
制約条件:
- カメラ解像度:640x480固定
- TRY_HARDER:無効(速度優先)
- 対応ブラウザ:iOS Safari 14+、Android Chrome
- エラーハンドリング:カメラ許可拒否、読み取り失敗対応必須」
人間とAIの適切な役割分担
人間の責任領域(事前準備必須):
- 技術選定の最終判断
- 性能要件の数値化
- デプロイ環境制約の調査
- ビジネス要件の解釈・整理
Claude Codeの得意領域(任せるべき):
- 詳細設計の技術実装
- ベストプラクティスの適用
- エラーハンドリングの網羅実装
- テストケースの自動生成
設計フェーズで検証すべき技術リスク
Critical Risk Items:
- フレームワーク制約の事前調査(Next.js環境変数、Azure制約等)
- サードパーティライブラリの評価(ZXing-js性能等)
- ブラウザAPI依存機能の制約確認(HTTPS要件、カメラアクセス等)
まとめ
Claude Code活用の成果
- 高速開発: 11時間でマイクロサービス完成
- 品質: テストカバレッジ85%達成
- 機能性: 商用レベルの実用的なPOSシステム
- 技術実装: JANスキャン + 税計算の完全統合
推奨する活用シーン
✅ Claude Codeが効果的:
- プロトタイプ開発(迅速な検証)
- 学習プロジェクト(体系的な技術習得)
- 個人開発(一人での包括的実装)
⚠️ 注意が必要なケース:
- 大規模チーム開発(コード規約・レビュー体制)
- クリティカルシステム(人間によるダブルチェック)
- 特殊ドメイン(業界知識の補完必要)
最後に
Claude Codeは 「AIが人間の代わりにコードを書く」 のではなく、 「人間とAIが協力してより良いソフトウェアを作る」 ツールです。技術的な実装はClaude Codeが担い、要件定義や設計判断は人間が行う。この役割分担により、開発効率と品質の両方を大幅に向上させることができます。
今回は11時間でマイクロサービスアプリケーションを完成させることができました。これは単なる作業速度の向上ではなく、開発の本質的な変化を表しています。
これからの開発は、「どうコードを書くか」よりも「何を作り、どんな価値を生み出すか」により重点が置かれる時代になっていくのかもしれません。
今後の展望 - Claude Codeによる自律的開発体制
今回の開発で見えた課題
実際の開発を通じて、Claude Codeの活用において以下の課題が明確になりました。
1. Git管理の煩雑さ
問題: フロントエンドとバックエンドが別リポジトリ
↓
結果: Claude CodeからGitHub連携ができない
↓
対応: 開発者が手動でGit操作(add、commit、push)を実行
2. 自律性の制限
Claude Codeは優秀なコード生成・問題解決を行いますが、複数リポジトリ間でのGitHub連携ができないため:
- ファイル変更 → 人間がGit操作
- 機能追加 → 人間がコミット・プッシュ
- バグ修正 → 人間がブランチ管理
自律AIエージェントとしての理想的なユースケースからは程遠い状況でした。
モノリポ統合による課題解決
これらの課題を解決するため、1つのリポジトリに統合することを検討しています。
統合後の構成案
pos-app-monorepo/
├── frontend/ # Next.js アプリケーション
├── backend/ # FastAPI アプリケーション
├── database/ # MySQL設定・マイグレーション
├── docker-compose.yml # 統合開発環境
├── .github/workflows/ # CI/CDパイプライン
└── README.md
Claude Code Actionsによる自律的開発フロー
想定される自動化範囲
1. タスク生成・管理
人間: 「在庫管理機能を追加したい」
↓
Claude Code:
- GitHub Issues自動生成
- 実装計画のMarkdown作成
- ブランチ戦略提案
2. プルリクエスト自動化
Claude Code:
- feature/inventory-management ブランチ作成
- 実装コード生成・コミット
- テスト作成・実行
- プルリクエスト作成・説明文生成
人間とAIの役割分担(将来像)
人間の集中領域
- UI/UX設計: ユーザー体験の追求・デザイン決定
- 要件定義: ビジネス要求の分析・優先度決定
- 戦略立案: 機能ロードマップ・技術選定方針
- 品質判断: 最終受け入れ基準・ユーザビリティ評価
Claude Code拡張領域
- プロジェクト管理: Issue生成・ブランチ管理・PR作成
- CI/CD運用: 自動テスト・デプロイ・監視
- コード品質: レビュー・リファクタリング・セキュリティ対応
期待される効果
1. Git管理の完全自動化
現在の課題:
Claude Code → ファイル変更
人間 → git add, commit, push (手動)
モノリポ統合後:
Claude Code → ファイル変更 + 自動Git操作 + PR作成
人間 → レビュー・マージのみ
2. 真の自律AIエージェント化
- Issue作成: 要求から自動的にGitHub Issue生成
- ブランチ戦略: feature/xxx ブランチの自動作成・管理
- 実装: フロントエンド・バックエンド・テストの一貫実装
- Pull Request: 説明文・レビュー観点まで含む自動PR作成
3. 開発者の役割最適化
従来の開発者作業:
- 要件定義 (20%)
- コーディング (60%) ← Claude Codeに移管
- Git管理 (10%) ← Claude Codeに移管
- UI/UX検討 (10%)
理想的な役割分担:
- 要件定義・戦略立案 (40%)
- UI/UX設計・改善 (50%)
- 最終品質判断 (10%)
この構想により、Claude Codeが技術的な煩雑さを完全に引き受け、人間はより創造的・戦略的な領域に専念できる開発体制が実現できると考えています。
あとがき
実は、この記事自体も、Claude Codeによって作成されました。
「Claude Codeでの開発体験」について「Claude Code自身が記事を書く」という、なかなか面白い状況になりました。もちろん記事の方向性は人間が決めていますが、大部分の執筆作業をClaude Codeが担うという協働スタイルは、開発と知識共有の新しい形を示しているのかもしれません。