3
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で初めてアプリ開発してみた—小規模Webアプリを約20分で動作可能なレベルまで開発できた話

3
Posted at

はじめに

システムエンジニアとして働いていますが、業務外でも継続的に勉強しています。
その中で「勉強時間をきちんと記録・分析したい」という個人的な課題があり、自分用のツールとして学習記録アプリを開発することにしました。

開発ツールとして今回初めて Claude Code を使ったところ、開発体験が大きく変わりました。
わずか約20分のユーザー対話で、プロトタイプとして動作するレベルまで実装できました

この記事では、以下について記録します:

  • Claude Code を使った実際の開発プロセス
  • 以前に Google Gemini(思考モード)で開発した時との比較
  • 実装中に発生した仕様変更とその対応

作ったもの

「学習記録アプリ」

  • 科目選択 → タイマー開始・一時停止・再開・終了
  • 日別・週別グラフで学習時間を可視化
  • AI(DeepSeek)が学習パターンを分析してアドバイスを提供
  • データはブラウザのローカルストレージに自動保存
  • 学習内容・備考も記録可能
  • AI分析結果も自動保存・履歴管理

開発プロセス:私とClaude Codeの会話

フェーズ 0: 要件定義と計画(3分)

私の説明

「勉強時間を記録するWebアプリを作りたい。タイマー機能、学習データの保存、グラフ表示、そしてAI分析機能が必要」

Claude Codeの提案

Claude Codeは計画案を提示しました:

  • 🎯 プロジェクト構成(6フェーズに分割)
  • ❓ 不明な点を確認(どのAI使う?ローカル保存?など)
  • 📋 技術スタック案(React + Vite + Tailwind CSS)

重要な学び: Gemini の思考モード(対話で「修正して」と繰り返す)とは違い、Claude Codeは「計画を提案 → 承認待ち → 実装」という3段階で進む。これが修正ループを大幅に減少させる秘訣。


フェーズ 1: プロジェクト初期化(自動実行 30秒、観察 2分)

Claude Codeが自動実施(ユーザーは見守るだけ):

✅ npm create vite
✅ React + TypeScript セットアップ
✅ Tailwind CSS v4 設定(エラー対応含む)
✅ ファイル構造自動生成
✅ ビルド確認

ユーザーの実際の作業: 「プロジェクト初期化してください」と言って、完了を確認する(2分)

発生した問題と自動解決

問題: Tailwind CSS v4の設定ファイル形式が古い方式だった

Error: Cannot apply unknown utility class `bg-white`

Claude Codeでの対応:エラーを検出 → 原因特定 → @tailwindcss/postcss をインストール → 自動修正

所要時間: 数十秒〜数分程度


フェーズ 2-4: コア機能実装(自動実行 5分、確認指示 2分)

実装順序(Claude Codeが自動で実施):

  1. タイマー状態管理 (useTimer.ts)
  2. 学習セッション管理 (useStudySessions.ts)
  3. 統計計算 (useStudyStats.ts)
  4. UIコンポーネント
  5. ページレイアウト

各ファイルが自動生成され、ビルドエラーもリアルタイムで修正される。

ユーザーの実際の作業: 「コア機能実装してください」と言って、ビルド完了を確認する(2分)

ターニングポイント:型定義の拡張

開発途中で新しい要件が出ました:

私の指示:

「学習記録には、科目・時間だけでなく『学習内容』と『備考』も記録したい」

Claude Codeでの対応:

「型定義に content と notes を追加してください」
  ↓
型定義自動更新 → 関連ファイル自動更新 → ビルド確認
  ↓
「完了しました」(2分)

フェーズ 5: AI分析機能実装(自動実行 3分、指示・確認 2分)

初期計画:Gemini APIを使用

const client = new GoogleGenerativeAI(apiKey)
const model = client.getGenerativeModel({ model: 'gemini-2.0-flash' })

途中変更:DeepSeek APIへの切り替え

私の指示:

「APIはDeepSeekに変更します」

理由: DeepSeekはAPIコストが低く、日本語生成精度も十分であったため採用しました。学習記録分析という用途では、高度な推論能力よりも「低コスト + 十分な精度」が優先されました。

Claude Codeでの対応:

「Gemini APIをDeepSeek APIに変更してください」
  ↓
geminiApi.ts を deepseekApi.ts に自動変更
  ↓
import文も自動修正
  ↓
ビルド確認 → 完成
  ↓
(数十秒〜数分で完了)

フェーズ 6: デモ機能と自動保存(自動実行 4分、指示・確認 3分)

モックデータの自動生成

要件:「アプリ起動時に1週間分のモックデータを自動生成したい」

実装の流れ:

私:「起動時に自動でモックデータを生成し、localStorageに保存してください」

Claude Code:
  1️⃣ mockData.ts を自動生成
  2️⃣ 科目別に適切な学習内容を生成
  3️⃣ useStudySessions.ts に初期化ロジック追加
  4️⃣ ビルド確認
  5️⃣ 「完了しました」

結果:すべて自動で完成(1.5分)

AI分析の自動保存

新要件:「AI分析が完了したら、自動的にlocalStorageに保存したい」

私:「分析結果をlocalStorageに保存してください」

Claude Code の対応:
  ✅ AiAnalysis 型を新規定義
  ✅ saveAiAnalysis() 関数を追加
  ✅ AiAdviceModal.tsx に保存ロジック追加
  ✅ HistoryPage.tsx に履歴表示機能追加
  ✅ ビルド確認

所要時間:2分で完了

Claude Code vs Google Gemini(思考モード)

実際に比較対象として、以前 Gemini で開発した同等のアプリ があります。この2つの方法での実装データです。

1. 開発時間の実際

【Gemini での開発】(Flask + Python + CSV)
実際に以前開発した簡易版勉強時間記録アプリ
├── 初回プロンプト作成       10分
├── app.py 実装              40分
├── エラー修正・調整         30分
│  └── 「このエラー修正して」×4回
│  └── 「別の方法で実装」×2回
├── HTMLテンプレート修正     20分
├── APIキー設定・テスト     10分
├── 動作確認・デバッグ      10分
└── 合計                    120分(2時間)

【Claude Code での開発】(React + TypeScript + Vite)
【ユーザー実際の対話時間】
├── 要件説明               3分
├── 計画策定・確認         2分
├── コア機能指示           2分
├── 型拡張指示             2分
├── API変更指示            2分
├── デモ機能指示           2分
└── 確認・調整             5分
──────────────────────
┤ ユーザー実際の作業      18分
│
【自動実行時間(バックグラウンド)】
├── プロジェクト初期化      30秒
├── コア機能自動実装        5分
├── エラー自動修正          数十秒程度
├── AI機能実装             3分
├── デモデータ生成         1.5分
├── 全体ビルド             2分
└── 合計(見守るだけ)     12分

【総経過時間】            約30分

※ ユーザー実際の作業:約18分
※ Claude Codeが自動実行:約12分

時間短縮の実績

項目 開発時間
Gemini 120分(2時間)
Claude Code 30分
短縮率 75% 削減

重要: Gemini での開発では修正ループが複数回発生し、最終的に2時間かかったのに対し、Claude Code は約20分の対話でプロトタイプが完成しました。

2. コード品質の実際

項目 Gemini Claude Code
型安全性 △ エラー修正必要 ◎◎◎ 自動修正
ファイル構成 △ Flask + テンプレート ◎◎ 階層化・最適
エラーハンドリング △ 基本的な実装 ◎◎ 実装済み
テンプレート管理 △ HTML修正が必要 ◎◎ コンポーネント化
仕様変更への対応 △ 複数往復必要 ◎◎◎ 数分で対応

実績データ: Gemini での「エラー修正・調整(30分)」では、型エラーや日付フォーマット関連のバグ修正に複数回の往復が発生しました。


3. 仕様変更への対応力

開発中の仕様変更 3 つ(Claude Code での実装):

① 学習記録の型拡張

要件:学習内容と備考を追加したい

Claude Code:修正時間 2分
  - 型定義変更を指示
  - 関連ファイル自動更新
  - ビルドエラーなし

② APIの変更

要件:Gemini → DeepSeek APIに変更

Claude Code:修正時間 2分
  - 既存コード理解したまま、DeepSeekに置き換え
  - 型定義も自動更新
  - 呼び出し側も自動修正

③ AI分析の自動保存機能追加

要件:分析結果をlocalStorageに自動保存し、履歴表示

Claude Code:修正時間 2分
  - 自動生成 → 完成

重要な気づき: 仕様変更が 3 つ同時 に発生しても、Claude Code なら数分で対応できた。


4. エラー対応の速さ

実際に起きたエラー:Tailwind CSS v4 の設定

エラーメッセージ:
Cannot apply unknown utility class `bg-white`

Claude Code での対応:

ビルドエラー検出
  ↓
Claude Code:「Tailwind v4 の設定ですね」
  ↓
自動修正:@tailwindcss/postcss をインストール
  ↓
postcss.config.js 自動修正
  ↓
ビルド再実行 → 成功
  ↓
(時間:数十秒〜数分)

実装でハマりやすいポイント(技術的な学び)

Claude Codeで自動実装していても、以下のポイントは事前に考慮するとスムーズです:

1. localStorage の初期化タイミング

// ❌ よくある間違い
const [sessions, setSessions] = useState<StudySession[]>([])

useEffect(() => {
  const saved = localStorage.getItem('sessions')
  setSessions(JSON.parse(saved || '[]'))
}, []) // 初回のみ実行(保存後の更新が反映されない問題あり)

// ✅ 推奨
const [sessions, setSessions] = useState<StudySession[]>(() => {
  const saved = localStorage.getItem('sessions')
  return JSON.parse(saved || '[]')
})

ポイント: useState の初期化関数を使うと、不要なレンダリングが減ります。

2. useEffect の依存配列管理

// ❌ 依存配列忘れ → 無限ループ
useEffect(() => {
  const analyses = getAiAnalyses()
  setAiAnalyses(analyses)
}) // ← 依存配列なし = 毎レンダリング実行

// ✅ 明示的に依存配列指定
useEffect(() => {
  const analyses = getAiAnalyses()
  setAiAnalyses(analyses)
}, [showAiAdvice]) // showAiAdviceが変わった時だけ再実行

3. setInterval と Date.now() の組み合わせ

// ❌ カウンター方式(バックグラウンドでスロットル)
const [seconds, setSeconds] = useState(0)
setInterval(() => setSeconds(s => s + 1), 1000) // 正確度が低い

// ✅ Date.now() ベース(推奨)
const [startTime, setStartTime] = useState<Date | null>(null)
const elapsed = startTime ? Math.floor((Date.now() - startTime.getTime()) / 1000) : 0

ポイント: タイマー機能は、カウンター方式より時刻ベースの方が精度が高いです。

4. localStorage の型安全性

// ❌ any を使わない
const data: any = JSON.parse(localStorage.getItem('data') || '{}')

// ✅ 型定義してチェック
interface StudySession {
  id: string
  subject: string
  durationSeconds: number
}
const data: StudySession[] = JSON.parse(localStorage.getItem('data') || '[]')

ポイント: 型定義があると、ビルド時にエラーを検出でき、バグが減ります。


こういう時は何を使う?

🟢 Claude Code向き

  • ✅ 「本格的なアプリを作りたい」
  • ✅ 「複数ファイル、複雑なロジック」
  • ✅ 「デバッグなしで動かしたい」
  • ✅ 「プロトタイプを素早く作る」
  • ✅ 「既存プロジェクトに機能追加」
  • 「開発途中で仕様が変わる」(特にこれ!)

🟡 Gemini向き

  • △ 「簡単なコードスニペット欲しい」
  • △ 「ライブラリの使い方知りたい」
  • △ 「エラーメッセージの意味を説明してほしい」
  • △ 「学習・理解目的でコードを作る」
  • △ 「対話型での開発経験を積みたい」

実績: Flask + Python でのバックエンド開発では2時間かかりましたが、対話型の開発フローには向いていました。ただし修正ループが複数回発生


コスト比較:Claude Pro vs Google Gemini(思考モード)

開発に使用したコストを整理しました:

今回の開発にかかった実際のコスト

【Claude Pro による開発】
- モデル          : Claude Haiku 4.5
- 使用形式        : Claude Pro 月額料金
- 月額コスト      : ¥3,400
- 推定Token使用量 : 約 80,000 tokens程度
  (アプリ実装 + 記事執筆含む)
- 開発時間        : 約20分のユーザー対話
- 総コスト        : 月額 ¥3,400(月10~20プロジェクト分の開発可能)

【Gemini による開発の場合】(簡易版勉強時間記録アプリ)
- 使用形式        : Google Gemini Web(gemini.google.com/app)※ブラウザ上の対話形式
- 開発時間        : 2時間(修正ループ複数回含む)
- 修正リクエスト  : 「エラー修正して」×4回、「別の方法で」×2回
- 総開発コスト    : 約 ¥0(Webサービス、無料枠利用)
- Flask + Python で実装、CSV保存機能
- ※ アプリのAI分析機能には google-generativeai を使用(開発ツールとしてではなく、アプリ機能として)

コスト効率の比較

項目 Claude Code Gemini
1プロジェクトのコスト(概算) ¥100~¥500 ¥300~¥500
開発時間 30分 2時間
修正サイクル ほぼなし 複数往復あり
品質 ◎◎

備考:

  • コスト計算はあくまで概算です。実際の token 使用量、プロンプト品質で大きく変動します
  • Claude Pro(月¥3,400)で複数プロジェクト開発可能と想定
  • Google Gemini Web は対話形式のWebサービスです(無料枠あり)。アプリ内のAI分析機能には別途 API を利用

実感した違い

Gemini での開発の特徴(実体験)

  • コードは提示されるが、ファイルへの適用はユーザーが手動で行う
  • エラーが出ると「修正して」のループが発生する
  • 今回の比較対象では修正リクエストが6回(エラー修正×4、別方法×2)発生した
  • コピペ・テスト・再修正の繰り返しが必要で、合計2時間かかった

「対話型のコード提供」であり、実装の主体はあくまでユーザー側にある

Claude Code での開発の特徴

  • エラー検出 → 該当ファイルの自動修正 → ビルド確認 まで自動
  • 仕様変更3回を、それぞれ2分以内で対応
  • ユーザーは要件を指示するだけで、修正・確認作業は不要

「実装の主体がAIに移った」ことを実感した


開発体験の変化

Gemini での開発では、「AIがコード提示 → エンジニアが修正」というループが発生していました。

Claude Code はそこを大きく改善している:

Gemini での開発:
  AIがコード提示
  → エンジニアが修正する(手作業・複数回)
  → テストして確認
  → エラーが出たら→また修正
  → 総2時間

Claude Code での開発:
  エンジニアが要件を指示
  → AIがコード実装・自動修正
  → 自動ビルド・テスト
  → 完成
  → 総30分

エンジニアの仕事が「コード修正」から「何を作るか指示する」へシフト する可能性が見えています。


他のClaude Code事例から学んだこと

Qiita の他のClaude Code記事を参照すると、さらに高度な実践が見えてきました:

仕様駆動開発(notefolderさんの記事)

従来:「作って」→ コード生成 → エラー修正 ループ

仕様駆動:「要件定義書」を作成 → Claude Code に渡す
  → 設計書も自動生成(Mermaid図含む)
  → コード生成
  → ビルド確認で完了

時間:約40~60分で動作するアプリが完成

ドキュメント戦略(tomadaさんの記事)

開発前に「CLAUDE.md」という司令塔ファイルを用意
  → Claude Code がそれを参照
  → 一貫性のある実装

ドキュメント項目:24個
  - 技術設計(15個)
  - デザインシステム(5個)
  - ライブラリ対策(4個)

結果:拡張・保守が楽になる

UI/UX重視の開発(chatrateさんの記事)

コード実装よりもUI改善に時間を使う
  → 「親指フレンドリー」な設計
  → ユーザビリティ優先

リリース後も改善サイクルを回す
  → 33ダウンロード達成

次のステップ

このアプリは以下への拡張を考えています:

  • 📱 モバイル版 — スマートフォンで常に記録できるように
  • ☁️ クラウド同期 — 複数デバイス間でデータ同期(Supabase)
  • 🎯 グループ機能 — 友人と学習進捗を競う

これらも、Claude Code なら 数時間で実装できそう な気がします。


この記事も Claude Code と一緒に作られました

重要な補足: この記事自体も、アプリ開発と 全く同じフローで Claude Code の支援を受けながら作成 されました。

記事執筆の流れ

開発中(アプリ実装と並行):
  ├─ 私:「開発プロセスを記事に整理してください」
  ├─ Claude Code:「こういう構成で記事を作成します」と提案
  ├─ 私:「いいですね」と承認
  └─ 自動生成:記事の骨組み → セクション作成 → 内容充実

さらに:
  ├─ 私:「Gemini との比較を追加してください」
  ├─ Claude Code:比較表やフローチャートを自動生成
  ├─ 私:「Qiita の他記事も参照して改善点を教えてください」
  ├─ Claude Code:参考記事を検索 → 記事に反映
  └─ 数回の修正・改善を経て完成

メリット

  • 記事と実装が一貫性を保つ — 会話履歴そのものが記事になるので、齟齬がない
  • 開発ストーリーがリアル — 「〇〇という課題が出た → Claude Codeがこう対応した」という実体験が反映される
  • 記事執筆時間も短い — 開発と並行するので、別途「記事書き」の時間が不要
  • 修正が楽 — 「この部分をもっと詳しく」→ 自動生成 → 完成
    以下のように修正すると、背景の明確化とモデル差分の説明が整理されます。

Claude Pro の制限事項

重要な注記: Claude Pro では Claude Code で Opus / Sonnet / Haiku が利用可能です。
ただし本記事の開発では、初回利用時の設定ミスにより一時的に Haiku のみ使用可能な状態となり、そのままアプリ開発を実施しました。

モデルの違い(概要)

モデル 特徴 向いている用途
Haiku 高速・軽量、コスト効率が高いが推論力は控えめ シンプルな実装、反復作業、小規模開発
Sonnet バランス型、精度と速度の両立 記事作成、設計、一般的な開発タスク
Opus 高精度・高推論力、複雑処理に強い 高度な設計、複雑ロジック、分析

今回の制約と影響

  • 簡単なアプリ開発には影響なし
    小~中規模のフロントエンド開発であれば、Haiku でも十分対応可能

  • 記事作成にはやや不利
    高度な分析や複雑なリライトでは Sonnet / Opus の方が効率的

  • 複雑なロジックやバックエンド開発
    推論力が必要な場面では制約を感じる可能性あり

  • ⚠️ 開発は実質 Haiku のみで実施
    設定ミスにより途中で Sonnet へ切り替えできず、
    最終的な記事の仕上げのみ Sonnet を使用

補足

今回の記事は、Haiku の制約下でも
「対話による段階的な改善」 を繰り返すことで実装・執筆が可能でした。

つまり本記事は、Claude Code の実用性と生産性を示す一例です。

アプリ開発だけでなく、技術記事の執筆においても Claude Code は有効に活用できます。


まとめ

Claude Code を使うと、わずか約20分の会話で、従来のAI開発手法の数倍高速にプロトタイプを実装できる

修正ループが少なく、エラー修正が自動化され、中途での仕様変更に素早く対応できる

エンジニアの仕事は「コードを書く」から「何を作るかを考える」へシフトする

これが僕の結論です。

ただし、以下の点は重要です:

  • ✅ 小規模アプリ(フロント中心)であることが前提
  • ✅ 要件が明確であること
  • ✅ 大規模プロジェクトやチーム開発では結果が異なる可能性

特にSIER業界のように「納期が短い」「試作が多い」「仕様変更が頻繁」という環境では、Claude Code は有力な選択肢になります。

次のプロジェクトからは、Claude Code を試してみる価値があると思います。


最後に

Claude Code と Gemini—どちらを選ぶかは、プロジェクトの性質や目的によって異なります。

  • 🚀 プロトタイプを素早く作りたいClaude Code(30分で完成)
  • 🤔 学習しながら開発したいGemini(2時間かかるが、対話的)

ただし、「本気でアプリを作りたい」「仕様が変わる可能性がある」「品質を保ちたい」「開発時間を短縮したい」なら、Claude Code を試す価値は十分にあります。


参考記事

注記: 本記事は個人の見解であり、所属企業とは関係ありません。小規模フロントエンドアプリ・個人開発での検証結果です。大規模プロジェクトやチーム開発では結果が異なる場合があります。

この記事を執筆する際に参考にさせていただいた、他のClaude Code実践記事です:

仕様駆動開発の実践

コードが読めなくてもAIで品質の高いソフトウェアが作れる:仕様駆動開発【Claude Code実践例】

  • 著者: notfolder さん
  • 学んだ点: 要件定義書 → 設計書自動生成 → コード実装という3段階プロセスの有効性、レビュー対象の最適化

ドキュメント戦略とプロジェクト管理

【Claude Code】マネできる!個人開発するときに最初に用意したドキュメント24種と機能要件書を全公開

  • 著者: tomada さん
  • 学んだ点: 開発前の「CLAUDE.md」という司令塔ファイルの重要性、24個のドキュメント戦略

実装と試行錯誤のバランス

iOSアプリ開発未経験者がClaudeCodeを使って1週間でリリースしたお話

  • 著者: chatrate さん
  • 学んだ点: UI/UX改善に時間を使うこと、デフォルト値の落とし穴、リリース後の改善サイクルの重要性

その他の参考資料


記事作成: 2026年3月31日
開発環境(今回): Claude Code + Vite + React + TypeScript + Tailwind CSS + DeepSeek API
使用モデル: Claude Pro(Haiku 4.5) — ユーザー対話約20分 / 自動実行含む総経過約30分
比較対象: Google Gemini Web + Flask + Python — 簡易版勉強時間記録アプリ(約2時間)
結果: Claude Code は Gemini 対比 75% の時間削減を実現


本アプリの一部スクリーンショットを添付します。

同様の環境でAI開発ツールの選択に悩んでいる方の参考になれば幸いです。

タイマー.png
タイマー_当日学習記録.png
履歴.png
AI分析結果.png
統計.png

3
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
3
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?