← ブログに戻る

3週間で1つのアプリ:AIにできること、できないこと

私はクロードと3週間で完全なSaaS製品、マーケティングサイト、開発者向けドキュメント、ブログを構築しました。AIが輝く部分と、完全に自己責任となる部分の正直な内訳は以下の通りです。

Inside Rasepi
3週間で1つのアプリ:AIにできること、できないこと

3週間前、私は.NETのバックエンドと、40%程度のサービス、中途半端なVueのフロントエンド、そして漠然とした計画を持っていました。現在、Rasepiは、用語集管理とスタイルルールを備えたブロックレベルの翻訳エンジン、有効期限テンプレートとレビューワークフローを備えた鮮度スコアリングシステム、RAGを備えたAI搭載のセマンティック検索、アクションガードとイベントパイプラインを備えた完全なプラグインSDK、コラボレーティブなリアルタイム編集、価格設定ページを備えた完全なマーケティングウェブサイト、開発者向けドキュメントポータル、14の投稿を備えたブログ、7言語への自動翻訳、実際にメールを送信するウェイティングリストフォームを備えています。

私はこれを一人でやったわけではありません。私は毎晩何時間も、時には一日中VS CodeでClaudeを走らせていました。しかし、「アプリを作る」ことと「他の人間に実際に販売できるものを持つ」ことの間には隔たりがあり、その隔たりは大量のセットアップページ、手動設定、メール配信設定、DNSレコードで埋め尽くされています。クロードはまだこれらすべてのサービスと会話することはできません。

その部分について話す人はめったにいません。

AIがなかったら、こんなことはできなかった?

私には30年以上の ソフトウェア開発の経験がありますクロード無しでこの全てを構築できたでしょうか?たぶんねでも3週間では無理それどころではありません。AIはファイルへのコード入力をすべて加速してくれました。

しかし、"バイブ・コーディング "やAIを使ったアプリ全体の構築について語るとき、人々が見逃していることがあります:**クロードは、D1データベースでCloudflare Workerをデプロイするために必要なすべてのステップを教えてくれます。OpenIddictの設定を説明できます。DNSレコードやSPFの設定も説明できます。問題は、その知識がしばしば古いことです。プラットフォームはダッシュボードを更新し、設定を移動し、機能を廃止し、名前を変えます。そしてクロードは知りません。

私は1つのAIしか使っていません。特にクロードのトレーニングデータが特定のプラットフォームのドキュメントから数ヶ月遅れている場合、ChatGPTの方が特定のサービスについて詳しいことがありました。両方のAIを並べて開き、ダッシュボードで実際に見ているものと照らし合わせながら、提案内容を確認した日もありました。

売れるアプリを作るには、ホスティングの仕組みを知る必要があります。ドメインの仕組み。コード署名証明書の仕組み。データベースの仕組み。メール配信の仕組みOAuth2フローが実装コードだけでなく、実際にどのように機能するのか。その知識がなくてもアプリを作ることはできますか?もちろんです。そうではありません。ローカルホスト上で動作し、自分のマシンの外では誰も感動しないようなものを作ることになるでしょう。

魔法のように感じた80

何がうまくいったのか、それは本当にうまくいったからです。サービスインターフェースの作成、CRUDコントローラの実装、EF Coreの設定の記述、Vueコンポーネントの構築において、Claudeはとんでもなく高速です。

例を挙げましょう。用語集管理システムを追加する必要があったとき、私は要件を説明しました: テナントにスコープされた用語集、CSVインポート/エクスポート、個々の用語のCRUD、DeepLの用語集APIとの同期メカニズムです。クロードは、エンティティモデル、サービスインタフェースと実装、適切な権限属性を持つコントローラ、およびPiniaストアを作成しました。すべて20分程度でできました。手作業ですべて書くとなると、1日はかかったでしょう。

翻訳エンジンも同様でした。SHA256コンテンツハッシュを使ったブロックレベルのアーキテクチャ、陳腐化の検出、サービス間の調整を行うオーケストレータ。クロードは、私が一度説明しただけでそのパターンを理解し、何十ものファイルにわたって一貫してそれを再現しました。鮮度スコアリングシステム、レビューワークフロー、期限切れ通知パイプライン。次から次へとサービスが配線され、機能しています。

マーケティング・サイトでは、クロードが記述からHTMLページ全体を構築しました。「無料層、チーム層、企業層のある価格ページ。暗い背景。緑のアクセントを使用してください。そして...出来上がりました。レスポンシブブレークポイントとホバー状態も含めて。

これが魔法の部分です。本物です。

マシンを飼いならす

でも、ただ「アプリを作って」と入力して立ち去ったわけではありません。クロードと仕事をするのはそれ自体が技術であり、私は最初の数日間をひどいやり方で過ごしました。

最初のアウトプットはいつも...素晴らしい。技術的に正しく、適度に構造化されていますが、一般的です。クロードがコードを書くのは、散文を書くのと同じです。自分の判断に任せると、フレームワークのチュートリアルが使うのと同じコントローラ構造を生成します。同じサービスパターン。同じコンポーネントレイアウト。それは機能しますが、あなたのものではありません。

そこで、あなたはそれを訓練し始めます。形式的ではなく、微調整でもなく、反復と修正を通して。「サービスインターフェースと実装は別にしてほしい」。"常にこの認可属性パターンを使いなさい"「テナントのコンテキストはリクエスト本体ではなくミドルウェアから来る"何度も何度も。昨日決めたことを忘れてしまうような、熱心な後輩とペアプログラミングをしているような気分の日もありました。

そして、あるとき何かがひらめいたのです。十分に修正し、コードベースの例を十分に読み込ませると、クロードは最初のトライで正しく理解し始めます。あなたの命名規則を理解します。DTOをどこに置くかを知っています。頼まれなくても、あなたのエラー処理パターンに従います。迷惑な "から "生産的な "への移行には、4、5日の一貫した作業が必要でした。

ブログ記事も似たようなものでした。クロードのデフォルトの文章の声はすぐにわかります。あの洗練された、少しよそよそしい、完璧に構成された文体は、これまで見てきたAIが作成したブログ記事のように読めます。私はスタイルガイドを何度も何度も作り直し、私が実際にどのように書いているかを例文として与え、すべての「it's worth noting」やすべてのemダッシュ(真剣に、emダッシュ中毒は本当です)を指摘しました。最終的には、ラズパイブログに何か書く前にクロードが読み込む一連の指示、スキルファイルを作りました。

ちなみにこの記事はクロードが書いたものです。私の意見、私の修正、私の指示。私が言いたいことを説明し、それをスタイルガイドに指し示し、声がしっくりくるまで何度も何度も時間をかけました。これが実際のワークフローです。"AIが書く "のでもなく、"私が書く "のでもなく。どちらも一人では書けなかったものを生み出す会話なのです。

コードベース自体のカスタム指示書も作りました。アーキテクチャ、翻訳システム、テナント分離ルール、コーディング規約を説明するコパイロット・インストラクション・ファイルです。クロードは毎回セッションの最初にこれを読みます。これがなければ、クロードは推測します。それがあれば、クロードは知っています。

重要なのは、生産性の向上は実際にありますが、無料ではないということです。AIに自分の仕事ぶりを教えるために前もって時間を投資し、その投資は数週間かけて回収されます。このステップをスキップすると、クロードのアウトプットを修正するのに自分でコードを書くよりも多くの時間を費やすことになります。

それから、実際にデプロイする必要があります。

ここで話が変わります。

あなたはlocalhost上で動くアプリケーションを持っています。すばらしい。では、それをインターネット上に置いてみましょう。Eメールを送信します。人々にサインアップさせましょう。最終的には支払いを受け付けます。ボットから守りましょう。正しく解決するドメイン名をつけましょう。

クロードはこのどれについてもお手伝いできません。そんなことはありません。

悪い提案をするという意味ではありません。根本的に、あなたが設定する必要のあるシステムと相互作用できないという意味です。そして、コンフィギュレーションはあなたが時間を費やすところであって、コードを書くところではありません。

クラウドフレア:自分で考えよう」のケーススタディ

RasepiのマーケティングサイトはCloudflare Pagesで動いています。waitlist APIはD1データベースを持つCloudflare Workerです。実際にセットアップするまでは、簡単そうに聞こえます。

クロードはあなたのCloudflareダッシュボードを見たことがありません。CNAMEレコードを追加する」ことはできますが、14のタブのどれが特定のドメインのDNS設定を含んでいるかはわかりません。D1データベースバインディングには、wrangler.tomlに特定のデータベースIDが必要です。環境シークレットはwrangler secret putを通ります。CORSはlocalhostではなく、実際にデプロイされたオリジンと一致する必要があります。Turnstileには、さらに別のダッシュボード・セクションのキーが必要です。

Worker が Turnstile トークンを正しく検証し、フォーム送信を受け入れ、D1 に保存し、確認メールを送信できるようにするために、ほぼ丸一日費やしました。Workerのコードを書くこと自体はクロードが手伝ってくれました。しかし、デプロイメント、ラングラーの設定、秘密の管理、DNS伝播のデバッグ?すべて私です。

OAuth2:設定の迷宮

認証は、"コード "と "製品 "のギャップの最たる例です。

クロードは絶対にOAuth2インテグレーションを書くことができます。OIDCの仕様も知っているし、ミドルウェアも作れるし、JWTクレームも理解できます。私たちの開発環境では、単純なベアラ文字列パターンから tenant_idsub のクレームでトークンを鋳造する DevAuthHandler を持っています。クロードはこれを数分で書き上げました。

OpenIddictは、subクレーム、tenant_idクレーム、コールバックURL、JavaScriptのオリジン、ログアウトURIなど、本物のIDセットアップに付随するあらゆる悪ふざけを把握することを意味します。そしてそれは、外部プロバイダーにたどり着く前の話です。

なぜなら、ユーザーはGoogleやMicrosoft、GitHubでログインしたいからです。そしてクロードは、あなたのためにそれらの開発者コンソールにログインすることはできません。できません:

  • Google Cloud Console で OAuth アプリケーションを作成し、クライアント ID とシークレットを生成します。
  • Microsoft Entra ポータルにアプリを登録し、リダイレクト URI を設定します。
  • GitHub OAuth App をセットアップし、認証情報を取得します。
  • 実行する環境ごとに、各プロバイダのコールバック URL を設定します。
  • 正しいスコープ、同意画面、トークンのエンドポイントを設定します。

各プロバイダは、独自の開発者ポータル、独自の用語、認証情報を生成するための独自のフローを持っています。Googleは "同意画面 "と呼んでいます。Microsoft は "アプリ登録" と呼んでいます。GitHubは "OAuth Apps "と呼んでいます("GitHub Apps "と混同しないように。)そしてそのどれもが、クライアントIDとシークレットを手動で設定にコピーする必要があります。

クロードは、OpenIddictサーバーの設定、外部プロバイダーのミドルウェア、クレーム変換ロジックを書くことができます。しかし、実際のクレデンシャル生成、ポータル・ナビゲーション、環境固有の URL 設定は?ブラウザでダッシュボードをクリックするのは、すべてあなたです。

電子メール:決して「メールを送る」だけではありません。

Resend API経由でメールを送信するコードは15行ほど。クロードは問題なく書きました。しかし、実際に誰かの受信箱にメールが届くようにするには?そのためには、検証済みの送信ドメイン、SPF、DKIM、DMARCのDNSレコード、伝搬を待つこと、そしてGmailとOutlookがあなたのドメインが信頼できるかどうかについて独自の意見を持っているため、配信可能性をテストすることが必要です。

そして、どのメールクライアントでも見劣りしないようなメールテンプレートをデザインすることです。WindowsのOutlookは、2026年になってもWordのレンダリングエンジンを使っています。そのことを肝に銘じてください。

AIなしで私がしたことの全リスト

3週間の作業を振り返って、クロードが構築したものと手作業で設定したものを大まかに集計し始めました。手作業」のリストは予想以上に長い:

**クラウドインフラストラクチャ

  • Cloudflare Pagesプロジェクトのセットアップとカスタムドメインの設定
  • Cloudflare WorkerのデプロイとD1データベースのプロビジョニング
  • マーケティングサイト、API、メール送信用のDNSレコード
  • SSL/TLS証明書の設定(ほとんどが自動ですが、自動でない場合のデバッグは大変です)
  • ブログのビルドパイプライン設定(Eleventy + 翻訳 + OG画像生成)

認証とセキュリティ:*。

  • Google、Microsoft、GitHub OAuthアプリの登録とクレデンシャル生成
  • 正しいクレーム、コールバックURL、JSオリジン、ログアウトURIを含むOpenIddictの設定
  • Turnstileボット保護の設定(サイトキー、シークレットキー、ダッシュボード設定)
  • フロントエンド、API、Workerオリジン間のCORSポリシー設定

メール:

  • 再送信アカウントと API キーのセットアップ
  • SPF、DKIM、DMARC DNSレコード
  • メール配信テストとトラブルシューティング
  • メールクライアント間のテンプレートテスト

**サードパーティとの統合

  • DeepL APIアカウントとキーの管理
  • Cookie同意の統合によるGoogle Analyticsの設定

Azureホスティング:

  • .NET バックエンドの Azure App Service セットアップと構成
  • Azure SQLデータベースのプロビジョニング、ファイアウォールルール、および接続文字列
  • Azure Cache for Redis のセットアップと接続設定
  • エンベッディングと RAG 用 Azure OpenAI リソースのプロビジョニング

デプロイメント:

  • .NETバックエンドのDocker設定
  • 3つの異なるデプロイメントターゲットにわたる環境変数の管理
  • 異なる環境のデータベース接続文字列

正直なところ、いくつか忘れていることがあるかもしれません。どのサードパーティ・サービスにも、独自のダッシュボード、独自のクレデンシャル・モデル、独自のドキュメント品質(千差万別)、独自の癖があります。

なぜこれがみんなが思っている以上に重要なのか

AI支援開発に関するすべての会話で失われる次元がここにあります:**AIツールは、あなたのインフラに関するコンテキストを全く持っていません。

あなたのコードベースは、AIが読むことができるファイルに存在します。あなたのコードベースは、AIが読むことができるファイルに住んでいます。Google OAuthアプリの設定はそうではありません。あなたのDNSレコードはそうではありません。再送信ドメインの検証状況もそうではありません。実際の製品の全運用表面積はAIツールには見えず、その表面積は膨大です。

コードを書くことはソフトウェアエンジニアリングの簡単な部分であり、それは日に日に簡単になっています。難しいのは、そのコードを使って何をするかということです。コードの運用、午前2時に何かが壊れたときの理解、要件が変わったときの拡張、ライフサイクル全体にわたる管理などです。AIは簡単な部分をより速くします。しかし、難しい部分には何の役にも立ちません。

マーケティングサイトは独自のセクションを持つべき

私はラセピのマーケティングサイト全体をおよそ4日間で構築しました。ホームページ、価格ページ、ボット保護機能付きの登録フォームと問い合わせフォーム、プライバシーポリシー、4つの機能の詳細ページです。HTML/CSSの70%はクロードが担当しました。

でも、実際にインターネット上に存在させる必要がありました。DeepLによる投稿の翻訳、サイトの構築、静的HTMLページの翻訳、共有アセットのコピー、SVGからのOG画像の生成、オーディオバージョンの生成、オーディオマニフェストの管理、多言語サイトマップの作成です。Claude はこのパイプラインの一部を書くのを手伝いましたが、正しいファイルパスと正しい Cloudflare Pages のデプロイ設定ですべてを一緒に動作させるには、丸一日試行錯誤が必要でした。

開発者向けドキュメントサイトは?これは独自のドメイン、独自のビルド設定、独自のデプロイメントトリガーを持つ別のCloudflare Pagesプロジェクトです。別のダッシュボード、別の環境変数セット、別のDNSラウンド。

私が見続けているパターン

どんな機能でも、クロードは仕事の約80%を処理します。コードの行数、ファイルの作成、問題の解決。ウェブダッシュボードをクリックしたり、サービス間でキーをコピーしたり、デプロイされた環境でのみ現れる統合の問題をデバッグしたり。

そしてこの20%は、少なくとも残りの80%と同じくらいの時間がかかります。もっとかかることもあります。

以前は、コードを書くか設定をするかのどちらかでした。両方をやることはありませんでした。Stripeのウェブフックを設定し、ダッシュボードで支払いフローをテストするのに1日費やしたとしても、それはアプリケーションコードをゼロにした日です。もう一方の作業をしている間、プロジェクトは一方向にしか進みません。

Claudeでは、それはもはや事実ではありません。私がStripeのダッシュボードでウェブフックのエンドポイントやイベントの種類を調べている間、クロードは次のサービスのインターフェイスを構築していました。私がスコープを間違えてGoogleのOAuth同意画面の設定を3回目もクリックしている間、クロードはVueコンポーネントを書いていました。私の頭はコンフィギュレーションの世界にありましたが、コードベースはどんどん大きくなっていきました。これは本当に新しいことです。一人の開発者が同時に2つの前線で動くことができるようになりました。これは、AIが小さなチームにもたらす最大の実用的な違いかもしれません。

とはいえ、AIの助けを借りてコードを書いているときは、緊密なフィードバック・ループの中にいます。書く、テストする、修正する、繰り返す。Cloudflare Workerが本番環境でのみCORSエラーを返す理由をデバッグしているときは、ダッシュボードのスクリーンショットとにらめっこし、コミュニティフォーラムの投稿を読み、ランダムな設定変更を試して、そのうちの1つが定着することを願っています。

変更すべき点

これは恒久的な制限ではないと思います。AIツールは、サードパーティのサービスAPIやダッシュボードと相互作用できる必要があります。それらを呼び出すコードを書くだけでなく、実際にそれらを設定する必要があります。

この一部は実現し始めています。様々なサービスのMCP(Model Context Protocol)サーバーが登場しています。Anthropicは明らかに、ツールの使用を第一級のコンセプトとして考えています。しかし、「D1データベースでCloudflare Workerをセットアップし、カスタムドメインを設定し、Turnstile保護を追加する」と言って、実際にそれが実現できるような段階にはまだ至っていません。

それまでは、AIを使った製品作りの正直な話はこうです:AIは、アプリケーションコードを書くための素晴らしいアクセラレーターです。しかし、売れる製品というのは、アプリケーションコードの約半分しかありません。 残りの半分は、インフラ、サードパーティとの統合、デプロイメント・パイプライン、メール配信、ドメイン設定、セキュリティ設定です。そしてその全ては、あなた自身の責任なのです。

(ちなみに、これが私たちがRasepiを単にオープンソースのコードを出荷するのではなく、ホストされたプラットフォームとして構築している理由の一つです。ドキュメンテーションソフトを動かすことは、それほど難しいことではありません。適切な認証、メール、ホスティングで、確実に動作させることです。それが製品です)。

もしこれを試そうとしているなら

あなたの時間を節約できるかもしれない、私が学んだいくつかの実用的なこと:

  • ホスティング、認証プロバイダー、メールサービス、カスタムドメインを最初にセットアップしましょう。ホスティング、認証プロバイダ、メールサービス、カスタムドメインを最初にセットアップしてください。デプロイされた環境でのみ表面化する問題の多さには憂鬱になります。

  • APIキー、クライアントID、コールバックURL、データベースID、シークレットキーが8つの異なるダッシュボードに散らばっています。私はローカルの暗号化ファイルを使用しています。1Passwordでも何でも構いません。ただ、一カ所にまとめてください。

  • クロードが2時間で機能を構築するのに役立つなら、それをデプロイし、統合を設定し、本番環境でテストするために、最低でももう2時間の予算を組んでください。

  • 3つのプロバイダーにまたがるOAuthアプリの登録、メールの設定、DNSのデバッグなどです。そのような日は生産性が低く感じますが、そうではありません。

3週間というのは、私が構築したものにとっては、まだまだワイルドな速さです。クロードに不満があるわけではありません。クロードのおかげで、小規模なチームなら通常1年はかかるものを、たった一人の開発者が構築できたのですから。しかし、AIのハイプ・サイクルで語られるストーリー(プロンプト、コード、出荷、完了)には、それを現実にする中間部分が欠けています。

アプリは簡単な部分です。アプリは簡単な部分です。

ドキュメントを常に最新に。自動的に。

Rasepiはレビュー日を設定し、コンテンツの健全性を追跡し、40以上の言語で公開します。

無料で始める →