この記事は AI(Claude)が下書きし、運営者が内容を確認して公開しています。
個人開発で、LLM と Web 検索を使う小さな Web サービス「アイデアチェック(小売向け)」を作って公開しました。この記事では、作ったもの、構成、工夫した点、実測の費用と所要時間、開発の進め方、制限をまとめます。宣伝ではなく、同じような構成を考えている人の参考になればと思って書いています。
作ったもの
日本の中小の小売業(実店舗・EC)の新規事業アイデアを入力すると、Web 検索を使った簡易スコアが返るサービスです。他の業界は対象外です。会員登録はありません。
- 入力: アイデア(10〜500文字)と想定顧客(500文字まで)
- 出力(無料スキャン): 要約(3文ほど)、4項目の簡易スコア(需要・競合の少なさ・収益性・始めやすさ、各0〜5点)と理由、総合スコア(採点できた項目の平均、参考値)
- 無料スキャンの画面には根拠URLは表示しません(有料レポートで載せる予定です)
- 提供中なのは無料スキャンのみです。詳細レポート(PDF)は準備中です
実際の結果の例(2026-11-09、本番)
- アイデア: 商店街の青果店が、近隣の共働き世帯向けにカット野菜と献立キットを店頭受け取りで販売する
- 想定顧客: 小学生の子どもがいる共働き世帯(店舗から徒歩圏)
結果は次のとおりです。所要時間は16秒でした。
| 項目 | 結果 |
|---|---|
| 需要 | 4 |
| 競合の少なさ | 2(コープデリやヨシケイなど大手宅配のミールキットが既にある) |
| 収益性 | 根拠なし |
| 始めやすさ | 3 |
| 総合 | 3.0(3項目の平均) |
同じ入力でも日によって点数が変わりました。11/7 は需要4・総合3.3、11/8 は需要3・競合3・総合3.0でした。検索結果が変わるためです。
構成
- Python / Flask、gunicorn(ワーカー1・スレッド4・タイムアウト180秒)
- SQLite(Fly のボリューム 1GB に保存)、PDF は reportlab(有料レポート用)
- ホスティング: Fly.io 東京リージョン(nrt)、メモリ 256MB。アクセスがないとマシンを自動停止し、次のアクセスで自動起動します(初回は数秒かかります)
- AI: Anthropic の Messages API、モデルは claude-haiku-5-5、サーバー側の Web 検索ツール web_search_20250305。無料スキャンは検索最大2回、max_tokens 6000
- 新しい版の検索ツール web_search_20260209 も試しましたが、Haiku では評価をせずに終わることが多かったため、従来の web_search_20250305 を使っています
- 画面は共通の CSS と小さな JavaScript(残り文字数、送信中の表示、二重送信の防止)だけです。外部の CDN・Web フォント・解析タグは使わず、JavaScript が無くても送信できます
工夫した点
根拠URLの検証と「根拠なし」は採点しない
LLM は存在しない URL を根拠として書くことがあります。そこで、モデルが返した URL のうち、その回の Web 検索で実際に取得した URL に含まれるものだけを有効にしています。
有効な根拠URL = モデルが返したURL ∩ その回の検索で取得したURL
有効な根拠URLが1つもない項目 -> score = None(画面に「根拠なし」)
総合スコア = 採点できた項目だけの平均
関連して、次の扱いにしています。
- 競合が見つからなかった場合も「競合がいない」とは表示せず、「今回の検索では確認できなかった」と表示する
- 根拠URLのある調査結果が1件も得られなかった場合は、結果を出さずに「根拠を確認できませんでした」と表示する
JSON の取り出しと1回だけの再試行
Web 検索を使うと、応答の text ブロックが分かれたり、JSON の前後に説明文が入ったりします。そのため次の方針で取り出しています。
- 最後の text ブロックから優先して探す
- 波括弧の対応を数えて、解析できる最初の完全な JSON オブジェクトを使う
-
stop_reason が max_tokens のときは、途中で切れたと分かるエラーにします。やり直しは、JSON の取り出し・解析に失敗したときだけ1回行います。やり直しの前には、月の上限をもう一度確認します。
失敗の理由のログ
失敗の理由を標準エラー出力にログとして出しています(HTTP の status、stop_reason、トークン数、検索回数など)。入力内容・応答本文・API キーはログに出しません。
このログを入れる前は、本番の3件の試しのうち1件が「調査に失敗しました(502)」になり、原因が分かりませんでした。対策版の公開後は、2026-11-08 に3件、11-09 に1件試して、すべて成功しています。
使いすぎ対策は AI を呼ぶ前に判定する
- 無料分の月の費用上限は 600円、全体で1日20件、同じ送信元から1日3回。上限の判定は AI を呼ぶ前に行います
- 入力の長さの上限と、人間には見えない入力欄(honeypot)でボットを弾きます
- 調査が最終的に失敗した分は、送信元ごとの1日の回数に数えません(費用は実際にかかるので、全体の件数と月の費用には数えます)
- 商品用の API キーは開発用とは別に発行しています
送信元のハッシュ化
送信元は Fly のプロキシが付ける Fly-Client-IP を、ソルト付きのハッシュ(HMAC)にして保存し、30日で消します。生の IP は保存しません。
実測の費用と所要時間(2026年11月時点)
実測(2026年11月時点)の値です。
- 無料スキャン1件の AI の費用: 約7円
- 所要時間: 16〜29秒(2026-11-07〜09 に本番で計測)
- Fly.io の費用見込み: 月 約75円(256MB・自動停止)
開発の進め方
運営者が作った「OXBOX」という仕組みで、AI エージェント(Claude)が役割を分けて開発しました。
- Planner(計画)→ Developer(実装とテスト、サンドボックス内)→ Reviewer(審査)→ Marketing(告知文の下書き)
- Developer のサンドボックスからは AI の API に接続できないため、テストは LLM と検索をモックにして行います(テストは118件)。実 API での確認は公開後に本番で行いました
- 公開・再公開、記事の投稿などの外部への操作は、人間(運営者)が承認したものだけを実行します
- 開発と手直しの AI の費用は合計 約770円でした(2026年11月、調査・計画・初回開発・手直し4回の合計)
公開は 2026-11-07 です。その後、出力の矛盾の修正、失敗対策、画面の作り込みを行い、2026-11-09 時点で4回目の公開版になっています。
制限と注意
- AI による参考情報で、正確さは保証しません。同じ入力でも日によって点数が変わります
- 入力内容は AI サービスと検索サービスに送られます。個人情報や取引先の秘密は書かないでください
- 提供中なのは無料スキャンのみで、有料レポートは準備中です
- 対象は日本の中小の小売業の新規事業アイデアのみです
まとめ
LLM と Web 検索を組み合わせたサービスでは、根拠URLを実際の検索結果と突き合わせること、根拠がなければ採点しないことが、出力の信頼性を保つうえで効きました。また、応答の JSON 取り出しの頑健化と、失敗理由のログ(個人の入力は含めない)が、運用での原因調査に役立ちました。費用面では、上限の判定を AI を呼ぶ前に行うことで、使いすぎを防ぐ設計にしています。
リンク
- サービス: https://oxbox-ideacheck.fly.dev (無料スキャン: https://oxbox-ideacheck.fly.dev/scan )
- 利用規約: https://oxbox-ideacheck.fly.dev/terms
- プライバシーポリシー: https://oxbox-ideacheck.fly.dev/privacy
- 運営者: OX-BOX
- 紹介記事(note): https://note.com/stakano_1021/n/n297c8ed92249