1
0

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で半日でセキュリティスキャナーSaaSのMVPを作った話

1
Posted at

TL;DR

  • Claude Code + 既存ナレッジで、セキュリティスキャナーSaaSのMVPを半日で構築した
  • 技術スタック: Next.js 16 + TypeScript + NextAuth.js + Stripe + Vercel
  • スキャンエンジン: 14カテゴリ・93ルール、LLM不使用の静的解析
  • Qiita 75K PVの発信力 → 海外向けSaaS の導線に転用

この記事の背景

先月まで1ヶ月間、Claude Code Skillsの有料販売をやっていた。

結果:

  • Qiita記事 49本、75,000+ PV
  • Dev.to記事 2本
  • 有料購入: 0件

原因ははっきりしていた。Claude Code Skills有料市場の累計売上は全セラーで$1,400。市場自体が存在しなかった。

ただ、1つだけ手元に残ったものがあった。セキュリティスキャナースキル — 14カテゴリ・95+項目の検出ロジックと、それを記事で解説した際のPV実績。

「ファイルとして売れないなら、ツールとして売ればいい」

これがピボットの出発点だった。


なぜ「AI生成コード特化」なのか

スキャナースキルを開発する過程で、ChatGPT・Copilot・Claudeが生成するコードを何百件もスキャンした。

見つかったパターン:

  • ほぼ全てのAPI呼び出しサンプルにハードコードされたAPIキー
  • ユーザー入力をそのままシェルコマンドに渡すユーティリティスクリプト
  • SSL検証を無効化する「修正」コード
  • 空のcatchブロックがそこら中に

既存のセキュリティツール(Snyk, SonarQube, Semgrep)は優秀だが、これらは人間が書くコード前提の設計。AI特有の脆弱性パターンにフォーカスしたツールは見当たらなかった。

このギャップが商品になると判断した。


半日の実装タイムライン

午前: 設計 + エンジンPoC

やったこと:

  1. 既存スキャナースキルの95+項目を棚卸し
    • 82項目(77%): 正規表現で直接変換可能
    • 10項目: ヒューリスティクスで近似
    • 7項目: 再設計必要
    • 7項目: LLM専用のため除外
  2. TypeScript + Next.jsプロジェクト初期化
  3. 5カテゴリ・40ルールでPoCエンジン実装
  4. スコアリングモジュール(重大度 × 信頼度)

ハマったポイント:

  • tsconfig.jsonverbatimModuleSyntax: trueがCommonJS + ESMの混在でエラー → falseに変更
  • noUncheckedIndexedAccessで配列アクセスがstring | undefinedに → as stringキャスト

午後: フルスタック実装

やったこと:

  1. 残り9カテゴリ追加 → 全14カテゴリ・93ルール完成
  2. NextAuth.js v5 + GitHub OAuth(認証)
  3. Stripe Checkout + Webhook(決済: Free/$0, Pro/$29, Enterprise/$99)
  4. ランディングページ(Hero, Stats, Features, Pricing, CTA)
  5. スキャナーページ(/scan)、ダッシュボード(/dashboard)

ハマったポイント:

  • Stripe APIバージョン不一致: 2025-04-30.basil2026-02-25.cloverに更新が必要だった
  • WSL2環境でNext.js devサーバーのポート占有問題 → npm run build成功で検証に切り替え
  • プロダクト名: 「VibeSafe」を候補にしたら競合が既に存在。vibe系は全滅 → 「CodeHeal」に決定

夕方: デプロイ

  • Vercel(Hobbyプラン・無料)にデプロイ
  • 環境変数設定(Stripe, GitHub OAuth, Auth Secret)
  • GitHub OAuth コールバックURL更新
  • 本番環境でスキャンAPI動作確認 → 正常

技術的な判断で重要だったこと

LLMを使わない選択

最初はLLMでコード解析する方向も検討した。が、テストで致命的な問題が発覚:

同じコードを5回スキャンして、5回とも違うスコアが出た。

セキュリティスキャナーに再現性がないのは致命的。CI/CDに組み込めない。コンプライアンスレポートに使えない。

静的解析(正規表現 + パターンマッチ)に切り替えた結果:

  • 100%再現性(同じコード → 同じ結果)
  • 50ms以下のスキャン速度
  • API費用ゼロ

地味だが、プロダクトとしてはこちらが正解だった。

スコアリング設計

単純なパターンマッチだと誤検知が多い。2つの軸で解決した:

  1. 重大度 × 信頼度: AKIA(AWSキー接頭辞)が変数代入にあれば高信頼度。コメント内なら低信頼度。
  2. 複合リスク検出: 「外部通信 + シークレット漏洩」が同時に見つかれば、単体以上のリスク加算。

これで誤検知率を大幅に下げつつ、複合的な脅威も検出可能になった。


既存資産が効いた部分

資産 効果
スキャナースキル(14カテゴリ設計済み) エンジン設計のゼロからの工数を削減
Qiita 75K PVの記事群 集客の導線として転用可能
Dev.to 2本の英語記事 海外向け発信のベース
MCP 3つ(Dev.to/Qiita/Gumroad) 記事投稿・PV計測の自動化

ゼロからスキャナーを設計していたら1-2週間はかかる。既存のナレッジベースがあったから半日で形になった。


その後の進捗(追記)

半日でMVPを出した後、以下も実装済み:

  • GitHub OAuth・Stripeフローの本番テスト完了
  • Stripe本番化(実課金可能状態)
  • レート制限の実装(Free: 5回/日)
  • Supabase接続(スキャン履歴のDB永続化)
  • Dev.to英語記事で海外集客開始
  • カスタムドメイン(codeheal.com)設定
  • VS Code拡張 / CI/CD統合

まとめ

「Skillsが売れない → SaaSに転換」という判断自体は珍しくないと思う。

でも既存のナレッジ資産Claude Codeの実装速度を組み合わせると、ピボットのコストが劇的に下がる。1ヶ月かけて作ったスキルの知識が、半日でSaaSの形になった。

個人開発で大事なのは「速く出して、市場の反応を見る」こと。完璧を待つより、動くものを出す方が学びが多い。


作ったもの

CodeHeal — AI生成コード特化セキュリティスキャナー

14カテゴリ・93ルールで、ハードコードされたシークレット、シェルインジェクション、バックドアパターンなどを検出します。LLM不使用、API費用ゼロ。

無料で使えるので試してみてください。フィードバック歓迎です。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?