ソフトが専門じゃない私が、AIと一緒に不動産SaaSを作って本番運用するまで
この記事は何か
私の本業は再生可能エネルギー発電所の電気設備設計です。ソフトウェアは独学レベルで、情報系の教育を受けたことはありません。
そんな私が、不動産の価格相場を調べられるSaaS 「不動産相場リサーチ」 を個人開発して、いま本番で動かしています。
先に正直に言っておくと、コードはほとんどAIに書いてもらいました。中身も正直、深くは理解していません。
それでも、認証も決済もある実際のSaaSを本番まで持っていくことはできました。この記事は「コードが書けない人間が、AIにかなりの部分を任せて、それでもサービスを一つ本番運用するまで」の記録です。
「AIで誰でも簡単」みたいな景気のいい話ではなく、任せられた所と、任せても解決しなかった所を、正直に書きます。
なぜ作ったか — 自分が家を買おうとしていたから
きれいな起業ストーリーではありません。単純に、自分が中古マンションを買おうとしていたのがきっかけです。
物件を探していて、ずっと引っかかっていたことが2つありました。
- この価格は適正なのか? 売り出し価格は分かっても、「実際にこのエリアの似たような物件がいくらで売れているのか(=相場)」が、素人にはよく分からない。
- SUUMOを毎日見張るのがしんどい。 良い物件は早い者勝ちなので張り付きたいが、本業もあるし現実的に無理。「条件に合う物件が出たら通知してほしい」と思っていました。
調べると、国土交通省が「不動産情報ライブラリ」というAPIで、実際の取引価格データを無料公開していました。これなら「相場」を自分で集計できる。
「だったら、自分が欲しいものを作ってしまおう」——それがスタートです。
つまりこのサービスは、最初は自分のために作ったものです。相場が分かって、条件に合う物件が出たら通知が来る。自分が欲しかった機能が、そのまま今の「不動産相場リサーチ」の中身になっています。
技術構成
こう書くと分かっている風ですが、構成もほぼAIに選んでもらいました。 私が出した条件はほぼ一つ、「ランニングコストをできるだけかけない」です。個人が趣味の延長で始める以上、毎月お金が出ていく構成は続かないと思ったからです。
その条件でAIが提案してきたのが、この組み合わせです。
| 役割 | 使ったもの |
|---|---|
| フロント・インフラ | Next.js + Vercel |
| DB・認証 | Supabase(LINEログイン) |
| 決済 | Stripe(月額プラン) |
| データ源 | 国交省「不動産情報ライブラリ」API |
| 通知 | LINE Messaging API |
図にすると、こんな流れです。
いずれも無料枠から始められるものです。私は各選択肢の「無料枠でどこまでいけるか」だけ確認して、あとはAIに任せました。
以下、AIに任せたけど、そのままではうまくいかなかった所を3つ書きます。素人の私がどう判断したか、という話でもあります。
つまずき① 動的OG画像が本番でハングした
SNSでシェアされたときのリンクカード画像(OG画像)を、ページごとに自動生成しようとしました。Next.jsには next/og の ImageResponse という、それ用の仕組みがあります。AIもそれを提案してきて、ローカルでは動きました。
ところが本番(Vercel)にデプロイすると、その画像生成が返ってこない(ハングする)。ローカルで動くのに本番で固まる、という状態でした。
AIに聞いても、これは一発では直りませんでした。ここが「丸投げの限界」だと思います。 AIが解けない問題は、コードを理解していない私にはもっと解けない。原因の深掘りは早々に諦めました。
代わりに私が出した判断は、「動的生成そのものをやめて、静的な画像に切り替える」です。凝ったことをやめれば、少なくとも止まらない。AIに頼んで、public/og/ に置いた固定PNGを各ページから参照する形に変えてもらいました。
// 動的生成(next/og)をやめ、固定PNGを参照する形に切り替えてもらった
openGraph: {
type: "website",
locale: "ja_JP",
siteName: "不動産相場リサーチ",
title,
description,
url,
images: [{ url: "/og/default.png", width: 1200, height: 630 }],
},
理解できない問題を粘って直すより、「そもそも凝らない方向」に倒す。
素人がAIと開発する上では、この割り切りがけっこう効きました。直せないなら、直さなくて済む形にする。
つまずき② Vercelの無料枠で定期実行(cron)をどう回すか
「条件に合う物件が出たら通知する」には、定期的に動く処理が要ります。Vercelにはcron(定期実行)があります。
ここで壁になったのが、Vercelの無料(Hobby)プランはcronが1日1回までという制約でした。やりたい定期処理は複数あるのに、cronは1本しか持てない。
「コストをかけたくない」が私の最優先条件なので、有料プランや別サービスの追加はしたくない。AIに「無料枠のままで複数の定期処理を回したい」と相談したところ、出てきたのが「1本の日次cronに全部相乗りさせる」という方法でした。
実際、vercel.json のcronは1本だけです。
{
"crons": [
{
"path": "/api/notify/run",
"schedule": "0 0 * * *"
}
]
}
そして、その1本の中で「今日は何を動かす日か」を判定して分岐させています。毎日やる通知はそのまま実行し、週2回だけのSNS投稿は「今日が月曜か木曜のときだけ」動かす、という具合です。
// 日次cronの中で、週2回だけの処理を「曜日判定」で相乗りさせている
let weeklyPost = { skipped: true };
if (isWeeklyPostDay()) { // 月・木だけ true
try {
weeklyPost = await runWeeklyXPost();
} catch (err) {
// SNS投稿が失敗しても、本来の通知処理は止めない
weeklyPost = { error: String(err) };
}
}
このコードを私が思いついたわけではありません。AIが書いてくれたものです。
ただ、「制約を回避する(=お金を払う)」のではなく「制約の中に全部押し込む」方向をAIに指示する、という判断は私がしました。素人がAI開発で貢献できるのは、たぶんこういう「どっちに舵を切るか?」の部分なんだと思います。
つまずき③ 検索から人に来てもらう(programmatic SEO)
作ってすぐ気づくのは、誰も来ないことです。当たり前ですが、作っただけでは存在していないのと同じでした。
AIに「お金をかけずに人に見つけてもらうには」と相談して出てきたのが、programmatic SEO — 「データからページを大量に自動生成して、検索の受け皿を増やす」やり方です。
私のサービスは都道府県・市区町村ごとに相場データがあります。それを使って、市区町村ごとのページを自動生成する形にAIが実装してくれました。Next.jsのISR(一定時間ごとに再生成)で、1日1回作り直しています。
export const revalidate = 86400; // 1日1回再生成
export const dynamicParams = true;
これで、「(市区町村名) 中古マンション 相場」のような検索の受け皿が、人力ゼロで大量にできました。
ただ正直に書くと、これで劇的に人が増えたわけではありません。 検索エンジンに評価されて流入が育つには時間がかかるし、そもそもサービスがまだ新しい。ここは今も改善の途中です。
AIをどう使ったか(正直な温度感)
具体的な進め方
ここまで読んで分かる通り、私のやり方は「AIにほぼ丸投げ」です。 具体的にはこんな進め方でした。
- やりたいこと(相場を出す、通知する、など)をAIに伝える
- AIが実現方法の選択肢を出してくる
- 私は主に「どれが一番ランニングコストがかからないか」の観点で選ぶ
- 選んだ方向で、AIがコードを書く
- 私はそれをデプロイして、動くか確認する
コードの中身は、正直ほとんど理解していません。 それでも認証・決済・通知のある実サービスが完成したのは、間違いなくAIのおかげです。数年前なら、私のような人間には絶対に作れませんでした。
丸投げの限界
一方で、丸投げにははっきりした限界もあります。
- AIが解けない問題は、私も解けない。 つまずき①のOG画像がまさにそれで、直せないから「そもそも凝らない」方向に逃げました。
- 深い保守・デバッグは今の私にはできない。 これは自覚しているリスクです。動いているうちはいいが、複雑な不具合が出たとき、自力でどこまで対応できるかは未知数です。
なので「誰でもAIで簡単に作れる」とは言いません。
「理解していない部分を抱えたまま、それでも本番まで持っていく」ことは、覚悟の上ならできる、というのが正直なところです。
私が実際に価値を出せたのは、コードではなく「コストをどこまで抑えるか」「凝るか諦めるか」といった判断の部分でした。
いま一番の課題は「作ること」ではなかった
作り終えて痛感したのは、「作れた」と「使ってもらえる」はまったく別ということです。むしろ本当の課題は、作った後にありました。
見栄を張っても仕方ないので、今の数字を正直に書きます。リリースしたばかりで、規模はまだ本当に小さいです。
- 登録ユーザー: 数人
- 有料契約: 2人
- 週間アクティブユーザー: 20人強
技術的に動くものはAIと作れても、それを人に届けて、使ってもらうところは、正直まだ全然できていません。
サービスは「作って終わり」ではなく、「使ってもらうまで」がスタート地点だった、というのが今の実感です。
今やっていること(経過観察中)
とはいえ、手をこまねいているわけではなく、いくつか集客の施策を打って、効果を観察している最中です。
- 検索(SEO): つまずき③のprogrammatic SEOに加えて、相場の見方などの解説記事を書いて、検索から来てもらうことを狙っています。
- SNS発信: 週次で相場の話題を自動投稿する仕組みを入れています(つまずき②のcron相乗りは、実はこれも兼ねています)。
- 広告: 検索広告も少額で試しました。ここは学びが多くて、「クリックはされるのに登録につながらない」という壁にぶつかっています。広告の文面より、その先の登録画面(LP)に課題がありそう、という所まで見えてきました。
- 無料トライアル: 有料プランに無料期間を付けて、まず触ってもらう導線にしています。
ただ、「作る」フェーズが一段落して、今は完全に「どうやって知ってもらい、使ってもらうか」というマーケティング側の課題に軸足が移った、という手応えはあります。
コードが書けない自分が、本業を続けながら、実際に動いて課金もできるSaaSを本番運用できている——これは素直に嬉しい。でも本当の勝負はここから、というのが正直な現在地です。
まとめ
- コードが書けなくても、AIにかなりの部分を任せれば、実サービスを本番まで持っていくことはできる
- ただし丸投げには限界がある(AIが解けない問題は自分も解けない、深い保守はできない)。そのリスクを分かった上でやる
- 素人が価値を出せるのは、コードより「コストをどこに倒すか」「凝るか諦めるか」の判断の部分だった
- そして「作れた」と「使ってもらえる」は別。今はいくつかの集客施策を試して観察している最中で、勝ち筋はまだ見えていない。本当の勝負はここから
どの施策が効いたのか(あるいは効かなかったのか)は、結果が出たらまた書こうと思います。「専門じゃないけど作ってみたい」人、そして「作ったけど誰にも使われていない」人の、一つの実例になれば嬉しいです。
Discussion