4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeでマイクロサービスを構築してみた

Last updated at Posted at 2025-06-12

はじめに

本格的なマイクロサービスアーキテクチャの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:

  1. フレームワーク制約の事前調査(Next.js環境変数、Azure制約等)
  2. サードパーティライブラリの評価(ZXing-js性能等)
  3. ブラウザAPI依存機能の制約確認(HTTPS要件、カメラアクセス等)

まとめ

Claude Code活用の成果

  1. 高速開発: 11時間でマイクロサービス完成
  2. 品質: テストカバレッジ85%達成
  3. 機能性: 商用レベルの実用的なPOSシステム
  4. 技術実装: 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が担うという協働スタイルは、開発と知識共有の新しい形を示しているのかもしれません。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?