SaaSのデモを「登録なしで開けるもの」にするか迷っている方へ。結論から書くと、受託向けSFAの Pipelia では、メールアドレスもパスワードも要らないデモ(demo.pipelia.com)を用意し、訪問者全員が1つのデモ環境を共有する形で運用しています。

共有にすると、1人が中身を書き換えれば次の人にもそのまま見えてしまいます。そこで「書き込みは許可した4つの操作だけ通す」「触られたときだけ元に戻す」という2つの仕組みで守っています。登録不要デモとは、アカウントを作らずに製品の実画面とサンプルデータを触れる体験環境のことです。この記事では、作った理由と実装、途中で踏んだ失敗をそのまま書きます。

この記事の要点

  • SFAは空っぽの状態では価値が見えないため、データが入った状態を登録なしで見せるデモを作った
  • 共有デモは「既定で拒否し、見せたい操作だけ許可する」許可リスト方式で守る
  • 無条件の定期リセットは書き込みコストが重い。触られたときだけ戻す印を付けて、閲覧だけなら何もしない
登録不要デモの仕組みを示した図。デモを開き、入場ゲートで注意事項と計測の同意を確認し、共有ユーザーで入場する流れと、閲覧は全部通し、書き込みは許可リストの4操作だけ通して成功時に触られた印を付け、10分ごとの定期リセットが印のあるときだけ戻す流れが確認できる

登録不要のデモを作った理由——SFAは空の画面では伝わらない

Pipelia は、営業リスト→商談→受注→案件・工程→外注・発注→粗利・資金繰りを一本につなぐツールです。売りは「つながっていること」なので、新規登録した直後の何も入っていない画面では、いちばん見せたいものが何も見えません。粗利画面は案件と外注費が入ってはじめて数字が出ますし、資金繰りは入金予定と支払予定がそろってはじめて意味を持ちます。

もう1つは読者層です。想定している利用者は、Web制作・システム開発・デザインを1〜数名で請けている事業者です。営業専任がいない人が、よく分からないツールにメールアドレスを渡して、サンプルデータを自分で入れて、ようやく良し悪しを判断する——この手順を踏んでもらえるとは考えにくいと判断しました。受託事業者のSFAの選び方で書いた「大手SFAが大げさに感じる」人ほど、試す前の手間で離れてしまいます。

そこで、URLを開くだけで「サンプル制作株式会社(デモ)」という架空の制作会社の営業リスト・商談・案件・外注・粗利がひと通り入った画面に入れるようにしました。

登録不要デモの入口——共有ユーザーのトークンを発行するだけ

実装はシンプルです。デモ用の組織とユーザーを固定IDで1つずつ用意し、公開エンドポイント POST /api/auth/demo がそのユーザーのログイントークンを発行して返します。

  • デモユーザーのパスワードはランダムな値で作り、誰も使いません。入口はこの公開エンドポイントだけです
  • 呼ばれるたびに「デモ組織とユーザーが存在するか」を確かめ、無ければ作ります(何度呼んでも同じ結果になる作り)
  • 中身が空なら初回だけサンプルデータを投入します。「1件でもあるか」だけを確かめればよいので、件数を数えずに1行だけ読みます
  • 他の公開エンドポイントと同じく、IPアドレス単位の回数制限をかけています

初めて開いた人には、入場前に入場ゲートを1画面だけ出します。サンプルデータであること、変更は保存されず定期的に戻ること、共有環境なので実データを入れないこと、メールなどの外部送信は動かないこと、アクセス解析の説明——の5項目です。計測に同意しなくても入場はできます。選んだ結果はブラウザに保存し、2回目以降は即入場になります。

1つ注意したのは、同時ログインの制限です。Pipelia は「同じアカウントに同時ログインできるのは1台まで」にしていますが、デモは全員が同じユーザーで入るため、この制限から除外しています。除外しないと、後から入った人が前の人を追い出し合って誰も使えなくなります。

共有デモを壊させない仕組み——書き込みは許可リストの4操作だけ

全員が同じ環境を触るので、誰かが顧客名を書き換えたり、メモ欄に何か書き込んだりすると、次のリセットまで全員に見えてしまいます。掲示板のように使われる余地を残さないため、書き込みは既定で拒否し、見せたい操作だけを許可リストに載せています。

許可している操作体験できること
営業リストのステータス変更見込み客を「アポ獲得」などに進める
商談カンバンのステージ移動商談をドラッグして受注へ進める
通知を1件既読にする通知の既読・未読の切り替え
通知をすべて既読にする通知の一括既読

これ以外の追加・編集・削除・送信・設定変更は、サーバー側で一律に拒否(HTTP 403)します。画面側でも同じ判定を持っていて、許可外のボタンを押した瞬間に「デモでは操作できません」と案内し、サーバーへの往復をしません。

最初は逆の「危ないものだけ塞ぐ」拒否リスト方式でした。点検してみると、編集画面から全項目を上書きする更新がそのまま通り、共有デモの中身を書き換えられる状態でした。拒否リストは、あとから画面や機能が増えるたびに塞ぎ忘れが出ます。許可リストなら、新しい機能はデモでは最初から動かないので、漏れる方向に倒れません。方針として「迷ったら許可しない」とコードに書いてあります。

もう1つの穴は認証まわりでした。書き込みの制限はログイン後の業務APIにしか効いておらず、パスワード変更や組織の新規作成のような認証系の操作は素通りしていました。デモのトークンで新しい組織を作れば、デモから抜け出して普通の組織を持てることになります。認証系には別のガードを置き、デモユーザーからの書き込みを全部塞いでいます。

Pipeliaの商談カンバン画面。ステージごとに商談が並び、確度と金額が確認できる。登録不要デモではこのカンバンのステージ移動が許可された操作の1つ

デモのリセット——触られたときだけ戻して書き込みを減らす

共有デモは定期的に元の状態へ戻します。最初は10分ごとのcronで、デモ組織の中身を無条件に消して入れ直していました。

これが思った以上に重いものでした。デモ組織のデータは約1,111行あり、1回のリセットで削除と挿入を合わせて2,000行超を書きます。10分ごと=1日144回なので、実際の利用者がほぼいない時期でも、本番の実測で1日196,860行の書き込みが出ていました。Pipelia はデータベースに Cloudflare D1 を使っており、D1 の料金は保存容量ではなく行の読み書きで決まります。この書き込みだけで、契約プランの月間枠(5,000万行)の約12%を使っていました。

直し方は「触られた印」を1つ持つことです。

  1. 1行だけのテーブルに「触られたか(dirty)」と「最後に戻した時刻」を持つ
  2. 許可リストの操作が成功したときだけ、印を立てる
  3. 10分ごとのcronは印を1行読み、立っていなければ何もしない。立っていれば戻して印を下ろす
  4. 保険として、印がなくても24時間経てば必ず1回は戻す

D1 は読み取りのほうが書き込みより大幅に安いので、「毎回1行読んで、たいてい何もしない」に置き換えた形です。保険の24時間リセットだけなら年365回で、行数にすると約80万行と、以前の1日分にも届きません。

ここでも1回失敗しています。最初の実装では、閲覧(GET)も同じ処理を通るのに方式で絞っていなかったため、デモを開いただけで印が立ち、結局毎回リセットする状態に戻っていました。ローカルで閲覧だけして印が立つのを確認して気づき、「書き込み系のメソッドか」を判定する関数を切り出してテストで固定しました。拒否された書き込みも中身を変えていないので、印の対象外です。

この「行の読み書きで課金される」前提は、Pipelia 全体の設計に効いています。AIからSFAのデータを読む仕組みについてはSaaSをMCP対応にすると何ができるかにまとめています。

登録不要デモで踏んだ失敗——守りを固めると見せたいものまで止まる

守りを固めた結果、デモとして見せたいものまで止めてしまった失敗が3つありました。

起きたこと原因直し方
新しい訪問者が誰もデモに入れない許可リスト方式に切り替えたとき、入場の POST /api/auth/demo を画面側の許可リストに入れ忘れた入場の操作を許可リストに明示して追加
フォーム・予約リンク・メール機能が「Proの機能です」で塞がるデモ組織に契約がないため、無料プラン扱いと判定されていたデモ組織はPro扱いにする(書き込みは許可リストで止めているので悪用の余地はない)
デモを触ったあと自分のアカウントでログインすると、全操作が止まる画面側が「デモ中」の印をブラウザに残したままにしていた印をサーバーから返る組織情報に毎回合わせ直す

どれも「塞ぐ」側を足した直後に起きています。許可リスト方式は漏れにくい代わりに、必要なものまで塞ぐ方向に倒れます。変更したら、新しいブラウザでデモの入口から実際に入り直して確かめる、を手順にしました。

自社SaaSに登録不要デモを付けるなら先に決めること

1名で作っている立場から、順番に決めておくとよいことを挙げます。

  1. 共有にするか、訪問者ごとに作るか。 訪問者ごとに環境を作れば壊される心配はありませんが、そのたびにサンプルデータを書き込むコストがかかります。Pipelia は共有を選び、守りを許可リストで固めました
  2. 何を触らせるか。 「触って動いた」と感じられる最小の操作を選びます。Pipelia ではステータス変更とカンバン移動でした
  3. どう戻すか。 無条件の定期リセットは、利用が少ないうちほど無駄が目立ちます。触られた印と保険のリセットを組み合わせます
  4. 何を検索に出すか。 アプリとデモは検索結果に出さず、集客はこのサイト(pipelia.com)に集めています

スプレッドシートやNotionで管理している方が、ツールを入れ替えるときの手順はスプレッドシートからSFAへの移行手順に、導入後に入力が続くかどうかはSFAが定着しない理由に書いています。実際のデモは demo.pipelia.com から、登録なしでそのまま開けます。

よくある質問

登録不要のデモでも、実際の製品と同じ画面を触れますか?

Pipelia のデモは製品と同じアプリを、サンプルデータが入ったデモ専用の組織で動かしています。画面は同じですが、書き込みはステータス変更・カンバン移動・通知の既読の4操作だけに絞り、追加・編集・削除・メール送信はできないようにしています。

共有デモに入力した内容は、他の人に見えますか?

デモは訪問者全員で1つの環境を共有しているため、許可された操作の結果(ステータスやステージの変更)は、次のリセットまで他の人にも見えます。触られた場合は10分ごとの確認で元に戻り、実データを入れられる入力欄は塞いでいます。

登録不要のデモを定期リセットすると、コストはどれくらいかかりますか?

Pipelia の場合、約1,111行のデモデータを10分ごとに無条件で入れ直していた時期は、書き込みが1日約20万行になっていました。触られたときだけ戻す方式に変えたことで、誰も触っていない時間帯は1行を読むだけで済むようになっています。