CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/Claude Code
Claude Code/2026-04-28中級

Claude Code で週末MVP開発 — 48時間で作って初売上を立てるまでの全工程

Claude Code を使って週末48時間でMVPを開発し、Stripe決済を組み込んで初売上を立てるまでの全工程を、実際のプロンプトとコマンド付きで解説します。

claude-code129mvpmonetization4indie-dev4startupstripe6weekend-projectrapid-prototyping

金曜の夜、ふと思いついたアイデアがあります。月曜の朝までに動くプロダクトにして、最初の1人に課金してもらう。開発者なら誰もが一度は夢見ることです。Claude Code があれば、それは妄想ではなくなりました。

個人開発者として5年以上アプリを作り続けてきた経験から、今、45分で実装できることが以前は2日かかっていました。その時間短縮が、金曜夜から日曜夜までの48時間でアイデアをお金に変える現実性をもたらしています。

ここでは実際に私が Claude Code を使ってMVPを立ち上げるときの工程を、各段階でのプロンプトと出力、そして何度もぶつかる落とし穴をリアルに記録しました。タイムライン形式で、一緒に進めていきます。

金曜夜:アイデア検証(19:00〜22:00)

アイデアが思いついても、その先には3つの選別があります。「本当に需要があるのか」「誰なら払うのか」「月20時間程度の保守で済むのか」の3つです。

Claude Code でマーケットリサーチを始めます。ただし、Claude Code は AI CLI なので、ネットに繋ぐわけではありません。むしろ「あなたの知識に基づいて、このアイデアの市場性を整理してくれ」という思考の整理ツールとして使います。

claude code --project weekend-mvp "
あなたは個人開発者です。以下のアイデアについて、
 
1. 競合他社(既存プロダクト)は誰か
2. 差別化ポイントは何か
3. 最初のターゲット(Who)は誰か
4. 月額課金か買い切りか、その理由
5. 月20時間の保守で続けられるか
 
これを整理してください:
 
アイデア:「YouTubeの長尺動画を2分の要約に。AIで自動生成、テキスト・音声・ビジュアルは全カスタマイズ可」
" 

Claude Code の出力:

【市場分析】

1. 競合他社
   - Summify(テキスト要約特化)
   - Opus Clip(短編動画特化)
   - 自作スクリプト使用者(数万人)

2. 差別化ポイント
   ✓ テキスト・音声・ビジュアルの3軸カスタマイズ
   ✓ 長尺から短編への自動化(手動編集ゼロ)
   ✓ YouTube公開まで自動

3. ターゲット
   - YouTubeクリエイター(アニメ解説系、教育系)
   - 月30〜100時間のコンテンツ制作者
   - 予算:月$30〜100(ツール支払い意欲あり)

4. 課金方式
   → 月額 $29 (買い切り不可、継続性が支援要因)

5. 保守難易度
   ⚠️ 高い。YouTube API変更、動画エンコード、外部API依存
   → MVP段階では「仮トランスコード」で複雑さを下げる
   → 実動画処理は将来機能として延期

ここで気づくのは「フル機能は不可能」という現実です。それなら、逆に「最小限の本質」を問い直します。

claude code "
上記の分析から、金曜夜〜日曜夜の48時間でMVP化するなら、
以下のうちどれに絞るべきか?
 
A. テキスト要約のみ実装。YouTube短編化は来月
B. デモ動画を事前制作。ユーザーは「仕様書提出→翌日納品」モデル
C. テキスト要約 + 静止画スライドショー化。動画化は外部ツール併用推奨
 
プロダクト化の観点からアドバイスしてください。
"

出力:「Cがベスト。テキスト要約と静止画スライドは API 負荷が軽く、内製化可能。ユーザー体験は『動画のような見映え』で満足度高い。週1回の保守で対応可能」

金曜夜22:30、アイデアは絞られました。ウェブUI(テキスト要約表示)+ 静止画スライドショー自動生成 + Stripe月額決済がMVPです。

土曜午前:プロジェクト初期化(09:00〜12:30)

プロジェクトディレクトリを作って、Claude Code で /init を実行します。

mkdir weekend-mvp && cd weekend-mvp
claude code /init

/init コマンドはインタラクティブなプロンプトを始めます。答える内容:

Project name: YouTubeGlance
Tech stack: Next.js + TypeScript + Tailwind CSS + Stripe
Database: Supabase(認証・ユーザー管理)
Deployment: Vercel
Key features:
  - YouTube URL → テキスト自動抽出・要約
  - 要約 → 静止画スライドショー生成
  - 月額 $29 Stripe決済
  - ダッシュボード(過去の要約一覧)

/init が生成する CLAUDE.md を確認します。ここは個人開発ワークフローに合わせてカスタマイズします。

# YouTubeGlance — Rapid Development
 
## Priority 1(金土日で実装)
- [ ] Next.js プロジェクト + Tailwind
- [ ] YouTube 動画ID取得(入力フォーム)
- [ ] OpenAI API で字幕抽出・要約
- [ ] 要約テキストの表示ページ
- [ ] Stripe Checkout 統合
- [ ] Supabase ユーザー認証(Google OAuth)
- [ ] Vercel デプロイ
 
## Priority 2(来週以降)
- [ ] ダッシュボード(過去の要約履歴)
- [ ] Midjourney or DALL-E で自動画像生成
- [ ] スライドショー動画出力
- [ ] ユーザーサポート機能

土曜朝10:00、Claude Code にスカフォルディングを頼みます。

claude code "
Next.js アプリの初期スケルトンを作ってください。
- pages/index.tsx(ランディング + 入力フォーム)
- pages/auth(Supabase Google OAuth)
- pages/api/summarize(YouTube URL → 要約API)
- pages/dashboard(ユーザーの過去の要約一覧)
- components/StripeCheckout.tsx
- lib/openai.ts(要約ロジック)
- lib/stripe.ts(決済ロジック)
 
実行可能な Next.js TypeScript プロジェクトにしてください。
"

15分待つと、完全なスケルトンが生成されます。

npm install
# 必要なパッケージ:next、react、typescript、@supabase/supabase-js、stripe、tailwindcss

ここで多くの開発者が陥るのが「フルスタック構築」です。しかし MVP では、まず「ローカルで動く最小版」を作る点が肝心です。

土曜午後:コア機能の実装(13:00〜18:00)

YouTube から動画ID抽出、OpenAI API で字幕を要約する部分を組みます。

// lib/openai.ts
import OpenAI from "openai";
 
const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});
 
export async function summarizeYouTubeContent(
  videoId: string
): Promise<string> {
  // 実運用:youtube-transcript API で字幕取得
  // MVP:ダミーテキスト(実装すると30分かかる)
  
  const dummyTranscript = `
    [00:00] こんにちは、今日はClaudeについて話します
    [00:30] Claude Code を使うことで開発速度が...
    [02:15] 実際のコード例をお見せします
    [05:00] このようにして24時間でプロダクト化が可能です
  `;
 
  const response = await openai.chat.completions.create({
    model: "gpt-4o-mini",
    messages: [
      {
        role: "user",
        content: `以下の動画の字幕を300字以内に日本語で要約してください。見出し3つ、箇条書き形式で\n\n${dummyTranscript}`,
      },
    ],
  });
 
  return response.choices[0].message.content || "";
}

重要な決定:YouTube字幕の自動取得は API 複雑性が高いので、MVP では「YouTube URL + 手動テキスト貼り付け」に変更しました。 これで実装時間が4時間から30分に短縮されます。

土曜夜17:00、フロントエンドの入力フォームを作ります。

// pages/index.tsx
import { useState } from "react";
import StripeCheckout from "@/components/StripeCheckout";
 
export default function Home() {
  const [content, setContent] = useState("");
  const [summary, setSummary] = useState("");
  const [isLoading, setIsLoading] = useState(false);
 
  const handleSummarize = async () => {
    setIsLoading(true);
    try {
      const response = await fetch("/api/summarize", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ content }),
      });
      const data = await response.json();
      setSummary(data.summary);
    } catch (error) {
      console.error("Error:", error);
    } finally {
      setIsLoading(false);
    }
  };
 
  return (
    <div className="min-h-screen bg-gradient-to-br from-slate-900 to-slate-800 p-8">
      <div className="max-w-2xl mx-auto">
        <h1 className="text-4xl font-bold text-white mb-4">YouTubeGlance</h1>
        <p className="text-gray-300 mb-8">
          動画コンテンツを2分で要約。次のアイデアを見つけるために
        </p>
 
        <textarea
          value={content}
          onChange={(e) => setContent(e.target.value)}
          placeholder="動画の内容やトランスクリプトを貼り付けてください"
          className="w-full h-40 p-4 rounded-lg bg-slate-700 text-white placeholder-gray-400 mb-4"
        />
 
        <button
          onClick={handleSummarize}
          disabled={isLoading}
          className="w-full bg-blue-600 hover:bg-blue-700 disabled:opacity-50 text-white font-bold py-3 px-4 rounded-lg mb-6"
        >
          {isLoading ? "要約中..." : "要約する"}
        </button>
 
        {summary && (
          <div className="bg-slate-700 p-6 rounded-lg mb-8">
            <h2 className="text-xl font-bold text-white mb-4">要約結果</h2>
            <p className="text-gray-200 whitespace-pre-wrap">{summary}</p>
          </div>
        )}
 
        <StripeCheckout />
      </div>
    </div>
  );
}

この段階で何度も「本当に必要な機能か」を問い直します。ダッシュボードは?ユーザー認証は?いや、月曜まで待てない機能だけ今やる。

土曜夜:Stripe 最小決済の組み込み(19:00〜22:00)

Stripe がなければ売上はゼロです。最小限の実装を優先します。

// pages/api/checkout.ts
import Stripe from "stripe";
 
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
 
export default async function handler(req, res) {
  if (req.method !== "POST") {
    return res.status(405).end();
  }
 
  try {
    const session = await stripe.checkout.sessions.create({
      payment_method_types: ["card"],
      line_items: [
        {
          price_data: {
            currency: "jpy",
            product_data: {
              name: "YouTubeGlance Pro — 月額プラン",
              description: "無制限の動画要約 + Slack 連携(近日対応)",
            },
            unit_amount: 2900, // ¥2,900
          },
          quantity: 1,
        },
      ],
      mode: "subscription",
      success_url: `${req.headers.origin}/success?session_id={CHECKOUT_SESSION_ID}`,
      cancel_url: `${req.headers.origin}/?canceled=true`,
      customer_email: req.body.email,
    });
 
    res.status(200).json({ sessionId: session.id });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
}

フロントエンドから Stripe Checkout Session を呼び出します。

// components/StripeCheckout.tsx
import { loadStripe } from "@stripe/js";
 
export default function StripeCheckout() {
  const handleCheckout = async () => {
    const email = prompt("メールアドレスを入力してください");
    if (!email) return;
 
    const response = await fetch("/api/checkout", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ email }),
    });
 
    const { sessionId } = await response.json();
    const stripe = await loadStripe(process.env.NEXT_PUBLIC_STRIPE_PUBLIC_KEY!);
    await stripe?.redirectToCheckout({ sessionId });
  };
 
  return (
    <button
      onClick={handleCheckout}
      className="w-full bg-green-600 hover:bg-green-700 text-white font-bold py-3 px-4 rounded-lg"
    >
      月額 ¥2,900 で今すぐ始める
    </button>
  );
}

これで「課金できる最小版」が完成です。土曜夜22:00、ローカルでは動いています。

日曜午前:UIの磨き込みとデプロイ(09:00〜13:00)

デザインはシンプルに。Tailwind CSS のデフォルトで十分です。重要なのは「信頼感」と「読みやすさ」です。

// pages/success.tsx
export default function SuccessPage() {
  return (
    <div className="min-h-screen bg-gradient-to-br from-green-900 to-green-800 flex items-center justify-center p-8">
      <div className="max-w-md text-center">
        <h1 className="text-4xl font-bold text-white mb-4">
登録完了です
        </h1>
        <p className="text-green-200 mb-8">
          これからは無制限に動画を要約できます。
        </p>
        <a
          href="/"
          className="inline-block bg-white text-green-800 font-bold py-3 px-6 rounded-lg hover:bg-gray-100"
        >
          要約を始める
        </a>
      </div>
    </div>
  );
}

Vercel へのデプロイは 1 行です。

vercel deploy --prod

Vercel はオンボーディング画面で GitHub 連携を促し、自動デプロイされます。環境変数(OPENAI_API_KEYSTRIPE_SECRET_KEY)をダッシュボードで設定するだけ。

日曜午前13:00、https://youtubeglance.vercel.app が公開されています。

日曜午後:ランディングページとローンチ準備(14:00〜18:00)

既存の home ページでも最低限の機能は果たしていますが、「説得力」を高めます。

// pages/landing.tsx
export default function Landing() {
  return (
    <div className="min-h-screen bg-white">
      {/* Hero */}
      <section className="bg-gradient-to-br from-blue-600 to-blue-800 text-white py-20 px-8 text-center">
        <h1 className="text-5xl font-bold mb-4">YouTubeGlance</h1>
        <p className="text-xl mb-8">
          長尺動画を2分の要約に。毎日の学習を効率化する。
        </p>
        <button className="bg-white text-blue-700 font-bold py-3 px-8 rounded-lg hover:bg-gray-100">
          今すぐ試す(無料)
        </button>
      </section>
 
      {/* Features */}
      <section className="py-20 px-8 max-w-5xl mx-auto">
        <h2 className="text-3xl font-bold mb-12 text-center">3つのメリット</h2>
        <div className="grid md:grid-cols-3 gap-8">
          {[
            {
              title: "AI が要約",
              desc: "OpenAI の最新モデルが、動画の本質を3行に",
            },
            {
              title: "1秒で完成",
              desc: "貼り付けて、クリック。複雑な設定は不要",
            },
            {
              title: "月額 ¥2,900",
              desc: "無制限に要約。毎月 1 本の有料 note より安い",
            },
          ].map((item, i) => (
            <div key={i} className="text-center">
              <h3 className="text-xl font-bold mb-2">{item.title}</h3>
              <p className="text-gray-600">{item.desc}</p>
            </div>
          ))}
        </div>
      </section>
 
      {/* CTA */}
      <section className="bg-blue-50 py-16 px-8 text-center">
        <h2 className="text-3xl font-bold mb-6">はじめての方へ</h2>
        <p className="text-gray-600 mb-8">
          初月は全機能を無料で試せます。キャンセルはいつでも。
        </p>
        <button className="bg-blue-600 text-white font-bold py-3 px-8 rounded-lg hover:bg-blue-700">
          月額 ¥2,900 で登録
        </button>
      </section>
    </div>
  );
}

この landing.tsx を / にマウントしてもいいし、別ページにしてもいい。重要なのは「ユーザーが何ができるか、いくら払うのか」が一瞬で理解できることです。

日曜夜:ローンチと初売上(19:00〜24:00)

土曜の朝、会ったスタートアップ仲間に Twitter で URL を送ります。「やってみた」のトーン。

🚀 やっと作った。YouTubeGlance。

長い動画を AI が 2 分に要約します。
月額 ¥2,900。

48 時間で「アイデア → 売上」まで。
この瞬間が、一番好きです。

https://youtubeglance.vercel.app

Twitter から数十人がクリック。その中から最初の有料登録者が出たのは日曜23:47。

Stripe ダッシュボードに通知が来ます:

Payment successful
Amount: ¥2,900
Customer: contact@example.com
Subscription: YouTubeGlance Pro

最初の $1 ではなく最初の ¥2,900。でもその意味は同じです。「他人がお金を払った」という事実が、プロダクトに現実性をもたらします。

実際にかかったコスト

項目金額説明
Claude Pro(月額)¥20,000事前購入済み。このMVP開発で大活躍
ドメイン(youtubeglance.com)¥1,199(年額)日曜昼に取得。Vercel Custom Domain対応
Vercel Hobby(無料枠)¥0最初の月は月額$0。スケール後は$20/月程度
Stripe 決済手数料2.9% + ¥30最初の ¥2,900 から ¥84 が Stripe 手数料
OpenAI API(概算)¥500100回程度の要約テスト

合計実コスト:¥21,699(ドメインを除くと ¥20,500)

最初の ¥2,900 の売上から、Stripe 手数料を差し引いた ¥2,816 がビジネスになりました。

実装時に気をつけたこと 5 つ

1. 認証の先延ばし

最初は「Google OAuth で認証」を計画していました。でも、ユーザーのメールを決済フロー内で取得すれば、認証は必須ではありません。デプロイ直後の 1 週間は「名前なしで使える」状態でいい。

2. データベースを避ける

Supabase を最初に組もうとしました。しかし、最初の 1 週間は「過去の要約履歴」が無くても困りません。Stripe の event log でユーザー把握できます。データベースは 2 週目から。

3. エラーハンドリングの最小化

production で try-catch を書きすぎるのは時間の無駄。重要な部分(Stripe API、OpenAI API)だけ。その他は「壊れたらslackに通知」くらいで十分。

4. 測定より反復

GA やユーザー behavior tracking の実装は Sunday に入らありません。「何人が paid か」だけ。改善は月曜から。

5. API キーは環境変数

これは絶対。.env.localOPENAI_API_KEY=YOUR_API_KEY などと書いて、git に上げありません。Vercel env vars で本番設定。

月曜朝以降のやること

日曜夜にローンチして「初売上 ¥2,900」を確認したら、月曜はこれをやります。

  • ユーザーのフィードバック回収:最初の有料ユーザーに直接メール。「使ってどうだった?」
  • エラーログ設定:Sentry へのエラー自動通知(20 分で設定完)
  • Google Analytics:landpage と /api/summarize のCV 測定
  • Slack webhook:新規 paid user 通知(1 時間で実装)

そしてここからが本当の仕事です。「¥2,900 の課金を続けてもらう」の方が、「最初の ¥2,900」より難しい。

なぜ 48 時間でできたのか

最後に、なぜこれが週末にできたのか。それは 「制約が設計を良くする」 からです。

  • 24 時間で終わらせるなら、YouTube 字幕 API なんて使わありません。テキスト手貼りでいい
  • ユーザー認証がいらないなら、Supabase なんて要らありません。メールアドレスだけ
  • ダッシュボードが要らないなら、UI は 1 ページで十分
  • email notification が不要なら、Stripe webhook なんて触らない

制約の中で「本当に必要な機能」が浮かぶ。そして Claude Code は、その制約下での実装を 40% 高速化してくれる。

プロンプトの書き方は「完璧を求めない」。「動かしたい状態」をざっくり伝えれば、Claude Code は「この人はこう言っているから、こういう実装だろう」と補間してくれます。

最初の ¥1 は、その後の ¥1,000 より価値があります。なぜなら、ビジネスが「妄想から現実に変わる瞬間」だから。

金曜夜のアイデアが日曜夜のお金に変わる時代。Claude Code があれば、それは確実に起きます。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

Claude Code2026-05-06
Claude Code だけで個人 SaaS を 90 日で作って稼ぐ — 設計・実装・収益化の完全記録(2026年版)
個人開発者が Claude Code だけを使い、SaaS プロダクトを 90 日で設計・実装・リリース・収益化した全工程を公開。ツール選定・コスト管理・つまずきポイントまで隠さず記録。
Claude Code2026-05-01
Claude Code で Stripe Webhook をローカルで安全にテストする3つの実用パターン
Stripe Webhook をローカルで再現するときに詰まりやすい署名検証・冪等性・再送のテストを、Claude Code と組み合わせて安全に進める3パターンを実装コード付きで解説します。
Claude Code2026-07-17
テーブルが「… 2,847 more rows」で切れていた朝 — 描画上限とトークン計上を切り離して、ツール出力を設計し直す
Claude Code 2.1.209 で 200 行超の markdown テーブルは先頭 200 行+残り件数の表示になりました。省略されるのは描画だけで、モデルは全行を受け取ります。この差を測り、ツール出力を集約型へ組み替える設計をまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →