個人開発で SaaS ボイラープレートを作って売ろうとしました。1ヶ月やって購入 0 件・問い合わせ 0 件です。
数字は全部この記事に出します。売れなかった話そのものより、**「集客の数字を測り間違えると逆の結論が出る」**ところが一番の持ち帰りだと思っているので、そこを中心に書きます。
作ったもの
Next.js + Firebase + Stripe の SaaS スターターキットです。海外の同種キットは英語圏の商習慣で作られているので、日本で売るときに必ず自分で書くことになる部分を最初から入れました。
- Stripe の日本円決済と消費税の自動計算
- 適格請求書(インボイス)のひな形 PDF を都度生成
- 特商法表記・プライバシーポリシー・利用規約の日本法準拠テンプレ
- Firebase Auth + Custom Claims + Firestore Security Rules によるマルチテナント分離
- Firebase Spark(無料枠)に収まる設計。PDF はオンザフライ生成して Storage を使わない
価格は買い切りで ¥19,800(Pro)/¥49,800(Team)に設定しました。
1ヶ月の実測値
集客は技術記事だけでやりました。Qiita に4本、Zenn に転載しています。
| 公開日 | 記事 | views | LGTM | ストック |
|---|---|---|---|---|
| 08-07 | Firestore の改ざん検出とハッシュの置き場所 | 193 | 0 | 0 |
| 08-12 | Firebase Storage をやめて無料枠に収める | 237 | 0 | 0 |
| 08-20 | pdf-lib で日本語のグリフが消える | 319 | 0 | 0 |
| 09-03 | Vercel Hobby は非商用限定 | 138 | 0 | 0 |
| 合計 | 887 | 0 | 0 |
その先の数字がこうです。
- 販売サイトへの流入: 直近15日で 139 リクエスト(実訪問は十数人)
- 無料版リポジトリへの流入: 公開から14日で unique visitor 1(しかも自分の確認分の可能性が高い)
- 購入: 0 件
- 問い合わせ: 0 件
887 views 集めて、リンク先のリポジトリを開いた人が 1 人です。クリック率にすると 0.1% です。
つまずき1: 需要の測り方を間違えて、危うく撤退するところだった
反応が出ないので、まず題材を疑いました。「pdf-lib とか Firestore のセキュリティルールとか、そもそも誰も検索していないのでは」と。
Qiita API で調べます。
GET /api/v2/items?query=pdf-lib
上位5件を見ると LGTM が 0〜3 でした。「やはり需要が無い。題材が悪い」——ここで結論を出しかけました。
念のためコントロールとして、明らかに需要がある語を入れてみます。
GET /api/v2/items?query=Next.js App Router
これも上位5件が LGTM 0 でした。おかしい。
API のドキュメントに query の既定ソートの記載は見つかりませんでした。ただ返ってくる中身を見る限り、関連度でも人気順でもなく新しい順でした。私はずっと「直近に投稿された記事」を見ていただけです。
ストック数で足切りすると景色が変わります。
GET /api/v2/items?query=pdf-lib stocks:>10
| 検索語 | 見つかった記事の最大 LGTM |
|---|---|
| pdf-lib | 1870 |
| Firestore セキュリティルール | 2599 |
| 適格請求書 | 675 |
| Vercel Hobby | 477 |
| Next.js App Router | 495 |
需要は十分ありました。題材が悪いという結論は間違いでした。
教訓は「コントロールを1つ混ぜる」です。 明らかに需要がある語を同じ方法で測って、期待通りの結果が出なかったら、結果を読む前に測定方法を疑う。これをやっていなかったら、正しい題材を捨てていました。
つまずき2: 検索順位を上げたのに、来る人はほとんど増えなかった
需要はある。では届いていないのか。
検索順位は API では取れないので、https://qiita.com/search?q=<語> を開いて自分の記事が何位かを数えました。結果、1本目が「適格請求書」で12位、3本目が「pdf-lib」で15位。どちらもクリックされない位置です。
上位の記事を見ると、特別なことは何もしていませんでした。検索語がタイトルに素直に並んでいるだけです。私のタイトルは「作った側の物語」になっていて、読者が打ち込む語が入っていませんでした。
そこでタイトルの前半を検索語に差し替えました(Qiita は PATCH /api/v2/items/:id で、PV と LGTM と URL は維持されます。ただし部分更新のつもりで title だけ送ってはいけません。body は必須項目です。先に GET して body / tags / private ごと送り直してください)。
11日後に測り直した順位がこれです。
| 検索語 | 順位 |
|---|---|
| Firestore 改ざん | 3位 |
| pdf-lib 日本語 フォント | 6位 |
| Vercel Hobby 商用 | 7位 |
| 適格請求書 | 12位(据え置き) |
| pdf-lib(単体) | 25位 |
長尾のクエリでは3位・6位・7位まで上がりました。狙いは当たっています。
では views はどう変わったか。差し替えた3本目(08-20 公開)の1日あたりの伸びがこれです。
| 期間 | views/日 |
|---|---|
| 08-24 → 08-31 | 19.1 |
| 08-31 → 09-07 | 5.1 |
押し上げは観測できませんでした。 公開直後から素直に減衰しているだけで、順位が上がったこととの因果は数字に出ていません。そして現在、「pdf-lib 日本語 フォント」で6位につけている状態で 日に5人です。
順位が足りなかったのではなく、その検索語を打つ人の絶対数が小さかった、というだけでした。頭の語(「pdf-lib」単体)で1位を取れれば桁が変わるはずですが、そこには LGTM 1870 の記事が居座っています。
なお、ここで測れているのは「順位が上がった」ことと「views が増えなかった」ことの2つだけで、順位改善がゼロ効果だったと言い切れるだけの分離はできていません(同じ時期に4本目を公開しているので、相互リンク経由の流入が混ざります)。
数字から言えること
3つあります。
1. LGTM 0 が 887 views 続くのは「読まれていない」ということ
Qiita の LGTM 率をざっくり 1〜2% とすると、887 views なら 9〜18 は付く計算です。0 でした。views は「開かれた回数」なので、新着タグフィードを流し見て閉じた分も入ります。私の 887 views の実体は、当事者ではない人のインプレッションだったと考えるのが自然です。
2. 記事の読者と、製品の買い手が別人だった
4本とも「開発中に踏んだ罠とその解決」です。この記事に来る人は、目の前の罠を解決したいだけで、罠ごと引き受けてくれるキットを探しに来ていません。解決したら帰ります。「作ったものを見せる記事」を1本も書いていませんでした。(この記事がその1本目です)
3. だから「記事の本数を増やす」では解けない
月に 2,500〜5,000 views 必要という試算に対して、今の題材は1本あたり月 100〜200 views が天井でした。単純に割ると 13〜50本です。書けば届く数字ではありますが、クリック率 0.1% のままなら本数を掛けても 0 は 0 です。分母を増やす前に、分子が出ない理由を潰す必要がありました。
なので MIT で公開します
モノは完成しています。売れないからといって手元に置いておく理由が無いので、コア部分を MIT で公開しました。
無料版(MIT)に入っているもの
- Firebase Auth + Google SSO + 招待制
- Custom Claims と Firestore Security Rules によるマルチテナント分離
- 特商法表記・プライバシーポリシー・利用規約の日本法準拠テンプレ
- CSRF 対策・監査ログ・レート制限・i18n
有料版に残しているもの
- Stripe 日本円決済と消費税の自動計算
- 適格請求書ひな形の PDF 生成と改ざん検出
- 請求書 CSV エクスポート・管理画面・Gemini ラッパー・メール送信
Firebase は Spark(無料)で回る設計にしてあるので、ホスティング以外の固定費は 0 から始められます。
これから
無料版に Star が付くかどうかを、2週間だけ見ます。「無料で置いても誰も取りに来ないものに、値札を付けて売る」のは自分には難しいので、そこを判断の線にしました。厳密な証明ではなく、これ以上どこまで粘るかを先に決めておくための線です。0 なら集客への投資は止めます。判定は9月下旬。その結果もまた書きます。
同じように「作ったけど売れない」をやっている人の役に立つとすれば、たぶんこの3行です。
- 需要を測るときは、明らかに需要がある語をコントロールに混ぜる。測定が壊れていても結果は返ってくる
- 検索順位を上げる前に、その語を打つ人が日に何人いるかを見る。6位でも日に5人のことがある
- views は読まれた証拠ではない。LGTM とクリックが 0 なら、増やすべきは本数ではない
有料版(Stripe 日本円決済・適格請求書ひな形の PDF 生成・管理画面)はこちらに置いています。ただしこの記事のとおり、まだ1件も売れていません。