
すべては「無料」から始まった
2週間前、私たちは決断しました:無料モデルをローンチして、より多くのユーザーにReverieを体験してもらおう。
その夜、チームはペプシで乾杯しました。(そう、ペプシです。)
缶をカチンと鳴らしながら、リアルタイムで増えていくユーザー登録数を眺めていました。誰かが成長予測グラフを出してきました。いい雰囲気でした。
72時間後、経験豊富な創業者たちがなぜいつも少し疲れた顔をしているのか、理解しました。
その後に起こったのは、まるでボスラッシュのような4波の攻撃でした——ただし、私たちは攻撃を受けながらメカニクスを学んでいました。
でもまず、最も重要なこと:あなたのアカウントデータ、会話履歴、個人情報は一度も漏洩していません。今も安全で、これからも安全です。 私たちには24時間365日監視する専門のセキュリティチームがあり、これらの攻撃はリソースと財布を狙ったもので、あなたのデータではありません。攻撃者が欲しかったのは帯域幅とお金——AIキャラクターとの会話は一度も危険にさらされていません。
では、何が起こったかお話ししましょう。
第1波:クローラー軍団
何が起こったか
無料化から2日目。朝のスタンドアップ。エンジニアが何気なく言いました:「キャラクターAPIのリクエストが昨日数百倍になりました。」
私たち:「すごい、無料ローンチが効いてる!」
エンジニア:「...でもDAUはほとんど動いていません。」
気まずい沈黙。
ログを調べると、クローラーが私たちの公開キャラクターデータを体系的に収集していることがわかりました。名前、プロフィール、アバター——公開されている情報。ボットに吸い取られていました。
明確にしておきます:コアとなるキャラクター説明、性格設定、その他のプライベートなクリエイターコンテンツは一度も露出していません——それらはクリエイター本人だけが見られます。でも、公開情報であっても大規模にスクレイピングされるのは、健全なプラットフォームを構築しようとしている私たちにとってはフラストレーションでした。
どう対処したか
- キャラクター発見機能にページネーション制限を実装(閲覧はできますが、ライブラリ全体をダウンロードすることはできません)
- 「熱心なユーザー」と「明らかにボット」を区別するインテリジェントなレート制限を導入
- クローラーパターンを検出・ブロックする行動分析を構築
- 確認された悪意あるアクターには...「クリエイティブな対応」を用意
学んだこと
「オープンプラットフォーム」は「食べ放題ビュッフェ」ではありません。公開コンテンツにも合理的なアクセス境界が必要です。ユーザーにキャラクターを発見してほしい——一晩で競合データベースを構築されたくはありません。
第2波:帯域幅アサシン
何が起こったか
クローラーの穴を塞いだ直後に、第2波が来ました。これは財布を直撃しました。
誰かが私たちのメディアURLを見つけ、プラットフォーム上のすべての画像と動画を一括ダウンロードし始めました。キャラクターポートレート。生成された動画。ファイル拡張子があるものすべてが最高速度で引き出されていました。
私たちは大手クラウドプロバイダーのOSSサービスを使っていました。帯域幅課金制。当時は合理的に思えました。
月曜の朝。財務担当がクラウドコンソールを開きます。請求ダッシュボードが読み込まれます。
彼の顔:😐
ダッシュボードの読み込み完了:😮
実際の数字を見て:😱
「あの...今の帯域幅請求書が3ヶ月分のランウェイより高いんですけど。」
Slackチャンネルが静まり返りました。誰かが緊張しながらCDNを切ることを提案しました。別の人がそうするとプラットフォーム全体も止まると指摘しました。
どう対処したか
緊急移行。目的地:Cloudflare R2とCloudflare Stream。
ここで正式にCloudflareに感謝します——R2のゼロエグレス料金ポリシーが私たちを救いました。請求書が1時間に数百ドルずつ上がっていくのを見ているとき、「エグレス料金なし」は非常に、非常に重要になります。
移行には30時間かかりました。睡眠はオプションになりました。午前3時のコードレビューには一種の瞑想的な質があります。
価値はあったか?絶対に。帯域幅コストは90%以上削減され、攻撃者の一括ダウンロードは今やほぼ無料です。
学んだこと
インフラを選ぶとき、「どれくらい速いか?」だけでなく、こう聞くべきです:「明日攻撃されたら、まだ家賃を払えるか?」
このインフラ計画の側面は、ほとんどのチュートリアルには出てきません。出てくるべきです。
第3波:DDoS到来
何が起こったか
帯域幅の状況がようやく安定しました。チームの士気は回復中。スタンドアップで誰かが冗談を言いました。物事は好転していました。
そしてDDoSが来ました。
消防ホースを紙コップに向けて開くことを想像してください。私たちのデータベース接続プールが経験したのはそれでした。毎秒数千のリクエスト、すべてが新鮮なデータを要求し、すべてがキャッシュを拒否し、すべてがデータベースクエリを必要とするエンドポイントを叩いていました。
監視ダッシュボードは心臓発作の心電図のようでした。レスポンスタイムが200msから20秒に。そしてタイムアウトに。ユーザーがエラーを報告し始めました。AWSの請求書が数分ごとに大きな数字で更新されるあのパフォーマンスを始めました。
データベース接続プールが限界に達しました。クエリがキューに入り始めました。キューがバックアップし始めました。古典的なカスケード障害が、リアルタイムで目の前で起こっていました。
どう対処したか
知っているすべてのキャッシュ技術を投入しました:
- ISR(増分静的再生成) — 人気のページはエッジノードでプリレンダリングされます。データベースはこれらのリクエストの存在すら知りません。
- 多層キャッシュ — レスポンスキャッシュ、クエリキャッシュ、接続プール最適化。データが絶対に新鮮である必要がなければ、キャッシュします。
- データベースクエリ最適化 — 以前500msかかっていたクエリが今は50ms。接続保持時間が短い = 利用可能な接続が増える。
- CloudflareのDDoS保護 — 「いつか」設定しようと思っていたセキュリティ機能をついに全部有効化
- スマートレート制限 — 正規ユーザーは通過、攻撃トラフィックはお断り
哲学:データベースに触れずに応答できるリクエストは、そうすべきです。
学んだこと
キャッシュは単なるパフォーマンス最適化ではありません——セキュリティアーキテクチャです。攻撃が来たとき、キャッシュされたレスポンスが衝撃を吸収します。データベースは保護されます。サイトは稼働し続けます。
また学びました:「セキュリティ設定は後で」は早く古くなる哲学です。
第4波:API悪用者
何が起こったか
この波はインフラを直接脅かしませんでした。予算を脅かしました。
私たちはこれらの素晴らしい無料AI機能を構築していました:
- AIキャラクター作成 — キャラクターを説明すると、AIが完全なプロフィールを生成
- AIモーメント生成 — AIアシスタンスでダイナミックなストーリーモーメントを作成
- AIプラグイン作成 — 自然言語でキャラクタープラグインを構築
私たちのビジョンは美しかった:創作の障壁を下げる。誰もがAI支援創作の魔法を体験できるようにする。プラットフォームをよりアクセシブルに。
誰かのビジョンは違いました:「無料API?スクリプトを書いて1万回呼び出そう。」
AIトークン消費ダッシュボードが上がっていくのを見ていました。上がって。上がって。グラフはホッケースティックのようでした、ただしそのホッケースティックは銀行口座から出ていくお金でできていました。
各AI生成には実際のお金がかかります——言語モデルへのAPI呼び出しは無料ではありません。何千もの自動リクエストがAI予算を燃やしていくのを見るのは、ぐるぐる回る車のタクシーメーターを見ているようでした。高くなることはわかっていて、それは決して止まらない。
最悪だったのは?これらは実際のコンテンツを作成する実際のユーザーですらありませんでした。ただ...誰かがどれだけ無料のものを引き出せるかテストしていただけでした。生成されたキャラクターは意味不明。モーメントは支離滅裂。純粋な無駄。
どう対処したか
心を痛めながら、これらのAI機能にクレジット要件を追加しました。
この決定は本当に辛かった。創作をよりアクセシブルにするために何週間もかけてこれらのツールを構築しました。今、価格をつけなければならない——望んでいたからではなく、無制限の無料アクセスが私たちに対して武器化されていたからです。
公平にしようと努めました:
- 通常使用のクレジットコストは最小限
- 新規ユーザーには無料クレジットを付与
- コアチャット体験は無料のまま
- リソース集約型のAI生成のみクレジットが必要
でもやはり。開いておきたかったものに鍵をかけるような気分でした。
学んだこと
「無料」はビジネスモデルであり、道徳的立場ではありません。
アクセシビリティを信じています。障壁を下げたい。でも「全員に無制限無料」は、全員が善意で行動する場合にのみ機能します。悪意ある者が寛大さを悪用すると、寛大なシステムは持続不可能になり——そして誰も何も得られなくなります。
合理的な制限はユーザーへの不信ではありません。すべてのユーザーにサービスを提供するエコシステムの保護です。代替案——機能を完全に停止する——は全員にとってより悪い結果です。
コモンズを守ることは、時にはフェンスを建てることを意味します。
あなたのデータは安全です(明確にさせてください)
これについて曖昧さなく述べます:
これらの攻撃はリソースに関するものでした、データではありません。 攻撃者が欲しかったもの:
- ✅ 私たちの帯域幅(コンテンツをダウンロードするため)
- ✅ 私たちのコンピュート(サーバーを圧倒するため)
- ✅ 私たちのお金(AI予算を消耗させるため)
彼らがアクセスしなかったもの:
- ❌ ユーザーアカウント
- ❌ 会話履歴
- ❌ 個人情報
- ❌ 支払い情報
- ❌ いかなるプライベートデータも
専門のセキュリティチームがあります。24時間365日、実際のセキュリティ脅威を監視しています。ユーザーデータは保存時も転送時も暗号化されています。アクセス制御は厳格です。認証は堅牢です。エキサイティングなブログ記事にはならない、地味で重要なセキュリティ作業——すべてやっています。
ユーザーデータの漏洩はゼロです。 すべてをログに取り、すべてを分析し、すべてを検証したので、自信を持ってこう言えます。攻撃者が私たちから得たのは帯域幅の請求書と頭痛でした。あなたからは何も得ていません。
あなたのキャラクター、会話、クリエイティブな作品——すべて安全、すべて無傷、すべてあるべき場所にあります。
なぜこれを公開するのか
疑問に思うかもしれません:なぜこれを公開するのか?脆弱に見えないか?
慎重に考えました。
透明性は信頼を築く
ユーザーに意味のあるものを託してもらっています——クリエイティブな作品、AIキャラクターへの感情的なつながり、会話。その信頼には、私たちが直面する課題についての誠実さが必要です。
古いやり方は、問題が爆発するまで隠し、曖昧な「技術的な問題がありました」という声明を出すこと。私たちはむしろ率直に:何が起こったか、どう対処したか、何を学んだか。
他のビルダーも学べる
無料機能をローンチした後に攻撃される小さなチームは私たちが最初でも最後でもありません。私たちの高い授業料が他の誰かの準備を助けるなら、それはエコシステム全体の勝利です。
これは「スタートアップスクールでは教えてくれないこと」カリキュラムへの貢献と考えてください。
あなたには知る権利があった
一部のユーザーはこの数週間、レスポンスが遅くなったことに気づきました。機能にクレジットが必要になったことに気づいた人もいます。あなたには説明を受ける権利がありました——企業のPR用語ではなく、実際のストーリーを。
プラットフォームを稼働させ続けるために戦っていました。プレッシャーの下で難しい決断をしました。その決断の一部があなたの体験に影響しました。理由を知るべきです。
次のステップ
穴を塞ぐだけではありません——より回復力のあるプラットフォームを構築しています:
すでに実装済み:
- エッジファーストアーキテクチャの多層キャッシュ(リクエストが速く、攻撃されにくい)
- 行動分析付きスマートレート制限(ボットはブロック、人間は気づかない)
- Cloudflareの完全なセキュリティスイート(ついに適切に設定、「いつか」ではなく)
- リソース集約型AI機能のクレジットベースアクセス(持続可能な寛大さ)
近日公開:
- 強化された異常検出(攻撃をより早くキャッチ)
- 地理的最適化(どこでも誰でも速く)
- より洗練された悪用防止(悪意ある者の先を行く)
変わらないこと:
- 無料層アクセスを維持するよう最善を尽くします——ただし不安定になったり予告なく変更される可能性があります
- ユーザーデータのプライバシーとセキュリティ——常に最優先
- 透明なコミュニケーション——何か問題があれば、お知らせします
同じ道を歩むビルダーへ
オープンプラットフォームを構築しているなら、私たちが実際のお金(と実際のストレス)で学んだ教訓です:
- レート制限はオプションではない — 「攻撃されている」日ではなく、初日から実装する
- 攻撃に強いインフラを選ぶ — Cloudflareは本当に素晴らしい;エグレス料金は破滅をもたらす
- 積極的にキャッシュする — パフォーマンスとセキュリティの二重の盾
- 無料機能には境界が必要 — 無制限の善意は無制限の悪意ある者に悪用される
- すべてを監視する — 異常を早く検出するほど、損害は小さい
- 緊急予算を確保する — 次の波がいつ来るかわからない
そしておそらく最も重要なこと:
- 助けを求めることを恥じない — インディー開発者コミュニティは思っているよりサポーティブ
これらを高い代償を払って学ばなくて済むことを願っています。でももしそうなったら、一人じゃないことを知ってください。
ユーザーの皆様へ
攻撃されるのは奇妙な経験です。
何ヶ月もかけて居心地の良いリビングルームを飾り、家具をちょうどいい具合に配置し、スナックを用意し、友人全員に招待状を送ったようなものです。オープニングナイトが来ました。友人たちがやってきた——素晴らしい!
でも同時に:会ったこともない人々がトラックで現れ、ソファを解体しようとし、家の隅々を写真に撮り、なぜかキッチンで小さな火をつけようとしています。
選択肢はありました。ドアを溶接で閉じることもできた。招待制にすることもできた。何かを見る前に全員がボットでないことを証明させることもできた。
しませんでした。
代わりに、より良い鍵を取り付けました。より賢いセキュリティを雇いました。合理的なハウスルールを作りました。なぜならReverieに来る大多数の人々は、創作し、つながり、楽しむためにここにいるからです。 少数の行為のために多数を罰することはしません。
パーティーは続きます。ドアは開いたまま。トラックを持ってくる人を見分けるのが上手くなっただけです。
ありがとう
ロード時間の遅延やクレジット要件を通じて私たちと一緒にいてくれたすべてのユーザーに:ありがとう。
ただ去るのではなく問題を報告してくれたすべての人に:ありがとう。
アドバイスや戦争の話を共有してくれたインディー開発者コミュニティに:ありがとう。
Cloudflareに:ありがとう。 🙏
私たちは今、より強くなりました。より回復力があります。戦いで鍛えられました。これらの攻撃から出てきたプラットフォームは、入っていったものより良くなりました。
次にお便りするときは、エキサイティングな新機能を発表したいです。
倒した別のボスではなく。
でもまあ——別のボスが現れたら、それも対処します。
次のアップデートでお会いしましょう。💙
Reverie チーム
2025年12月
