--- title: "Floatia β 1.0 公開 — ロードマップ完走から 7 日、運営インフラ全部入りで開けた話" description: "ロードマップ完走から 7 日、bot 防御 / 言葉の関所 / 改ざん検知 / off-site backup の DR 検証 / 観測ビューを全部詰めて Floatia β 1.0 を公開。同梱したものと、地味だけど効いた準備の記録。" url: https://ryuuneko.com/blog/floatia-beta-1-0-launched published: 2026-05-03 18:52:34.1331 updated: 2026-06-16 09:16:43.938442 --- [前回の記事](/?slug=floatia-roadmap-completed) で **Floatia (旧 Drift)** のロードマップ 4 軸 (A 世界観 / B 性能 / C メタ / D 整合性) を 2026-04-26 に完走させた話を書きました。あれから 7 日、防御・観測・バックアップ・利用者向け文書まで全部詰めて、**2026-05-03 に β 1.0 を公開** しました。 🌊 https://floatia.ryuuneko.com この記事は **β 1.0 公開時点で何が同梱されてるか** と、地味だけど効いた準備の記録です。 ## 12 日間の数字 (改めて) | | | |---|---| | 期間 | 2026-04-23 〜 2026-05-04 (12 日、うち休み 1 日) | | 総 commit 数 | **228** | | 平均 commit / 日 | **20.7** (1 日最多 48) | | Go 行数 (本体 + テスト) | 38,660 | | TypeScript 行数 (web + shared) | 16,598 | | Markdown / SQL / i18n 等 | 約 7,000 | | 合計 | 約 **62,000 行** | | Go パッケージ | 37 / e2e テスト 15 spec | アマチュア (独学数年) が AI 駆動 + フルスタック 1 人で出した数字としてはわりと気合入ってると思います。 ## β 1.0 で同梱したもの ### 1. bot 防御の多層化 form-like な投稿経路全般に **hidden field 系のトラップ** を仕込み、捕えたら **静かに弾く** (= 攻撃側に検知された手応えを返さない) 設計にしました。 - Cloudflare Turnstile も併用 (新規アカウント / ログイン) - 検知時は **Discord webhook** で alert (5 分 coalesce で連続は ×N にまとまる) - 同 IP の連投系もレート制限で抑制 「弾く」のではなく「気づかせない」設計にしたのは、検知された bot が手を変えてくる動機を減らすため。詳細は意図的に伏せます (公開しちゃうと意味が無くなる類の防御なので)。 ### 2. 言葉の関所 (contentaudit) regex 70+ 規則を **3 段階** で自動判定: - **block**: 脅迫 / 違法 / 露骨アダルト / 外部誘導 / 連絡先取得を狙う文言 — DB に書き込まない、本文は 7 日 archive のみ - **shadow**: 世界観違反 — 書き手にだけ見え、他の訪問者には届かない - **flag**: 軽い罵倒 / spam shape / 引用そのまま転載系 — 通常公開だが運営に印が残る 新規追加した規則のひとつは「他人の言葉のそのままの転載」を flag するもの。Floatia の世界観は「自分の言葉を流す海」なので、有名人語録のコピペは関所を抜けても印が付く形に。 印付き本文を bottle 横断で一覧する admin 画面を 3 種揃え (block 用 / shadow 用 / flag 用)、運用画面側で印を解いたり海へ還したりできます。 ### 3. 改ざん検知 - 全 admin 操作 (delete / archive / dismiss / view-bottle / view-token / resolve-report) が **hash chain** に連鎖 (= 前行の hash + 行の正規化を SHA-256 する形)。後から admin がログを書き換えても検知できる - 投稿時に本文の SHA-256 を記録、整合性照合画面で全件突合 — DB 直接書換の痕跡を検出可 ### 4. off-site backup + DR 検証 - 自宅サーバで **日次 pg_dump 自動化**、retention 14 日 + 日曜 12 週 - 既存の backup コンテナ (rclone + Google Drive remote) に **Floatia の DB を追加** — 対象 DB リストに組み込み、image rebuild - **本番リリース前に DR 検証**: Drive 上の dump を別 DB に pg_restore → 主要テーブルの行数が **本番と一致** することを確認 「`/api/admin/backup` が gzip を吐くから OK」ではなく、**実際に別 DB に戻して数字が合う** ところまで動かしてようやく信じる。動くと信じる前に動かしてみる、を release 前にやっておく。 ### 5. 観測 - security event を kind / subject / 期間で絞り込める監査ビュー (18 種の event を横串) - ユーザー一覧に **短時間バーストの可視化列** を追加 (1 user が短時間にどれくらい流したかを視認、自己啓発連投や spam bot を発見) - **`/updates` 海の歩み** — 利用者向けに「いつ何が変わったか」を世界観の言葉で見せるページ 開発者向け CHANGELOG.md と利用者向け /updates は**別物**として運用します。 ## 思いのほか効いた地味な準備 ### CSS 1 行で wheel scroll が死ぬ事故 `html, body { overflow-x: hidden }` を両方に設定すると body も scroll container 化し、body の `overscroll-behavior-y: none` と組合せで **wheel イベントの html への chain がブロック** される。`scrollbar drag は生きるが wheel が死ぬ` という非対称が `/about` の長文ページで発生。 利用者から「絶望的にスクロールできない」報告が来て発覚。`overflow-x: hidden` を html だけに残して解消。**「直したら 1 行、見つけるまでに 30 分」** の典型でした。Playwright で再現できなかったのが恐ろしい (ブラウザ specific の挙動だった)。 ### 「利用者見える変更で /updates も書く」を AI memory ルール化 「Floatia の利用者から見える機能変更 / 規約改定をデプロイする時は CHANGELOG.md だけでなく messages の updates エントリ (現在は announcements API 駆動) にも poetic な user-facing エントリを追加する」というルールを Claude の **durable memory** に保存しました。 ルールの中身: - 利用者から見える yes/no の境界 (UI / 動線 / 規約 / 機能 = yes / 内部リファクタ / admin / 監視 = no) - 構造 (date / label / title / body / items) - voice (海の語彙 / 押し付けない / 過度に詩的にしない) - 1 日複数 commit は 1 entry に集約 これで以後 AI (Claude) が忘れずに /updates を書いてくれるようになります。**人間側は中身レビューだけ**。 ### 公開した「印を付けた手紙」観測ビュー contentaudit が flag (印を付けた) と判定した手紙の本文を bottle 横断で確認するビューを release 当日の朝に追加しました。block / shadow と違って flag は本文と「印が付いた事実」が別々に保管される設計なので、横断ビューを作るのに少し細工が要りましたが、これがあるとないとで公開後に世界観違反を捌くスピードがまるで違う。実際 5/3 当日に **9 件** を shadow に潜める運用が出来ました。 ## 公開してから 24 時間で起きたこと 5/3 朝に β 1.0 を公開して、その日のうちに: - 利用者から「`/about` がスクロール出来ない」報告 → 1 commit で修正 - 利用者の自己啓発連投バーストを管理画面の「短時間バースト列」で発見 → 9 件 shadow 化 - 規約 (`/terms`) と `/about` 海のこころに「自分の言葉で書く」を追記 - contentaudit に新規規則追加 (引用署名の flag) - 管理画面側に観測ビュー / フィルタを増設 - prod backup の DR 検証を実機で実施 - `/updates` 海の歩みページ新設、β 1.0 エントリ投入 - 利用者見える変更で /updates 自動更新する memory ルールを durable 化 **丸 1 日で 20 commit 前後 + 9 件運用**。β 1 日目から世界観の温度感が動いてる感じが面白かったです。 ## これから β 1.0 公開はゴールではなく、観察フェーズの開始。 誰かが瓶を流して、誰かが拾って、たまに小さな手紙が漂着する。そういう静かな海であり続けられるか、しばらく観察します。 通知が来ない・追いかけられない海が肌に合いそうな方は、よかったら覗いてみてください。 🌊 **https://floatia.ryuuneko.com** ## 参考 - [前回: アマチュアが AI 駆動 + フルスタック 1 人で Floatia ロードマップを完走させた話](/?slug=floatia-roadmap-completed) — β 1.0 までの 10 日間 / 技術選定 / ロードマップ 4 軸の経緯 --- *※本記事は2026年6月時点の情報をもとにしています。サービス・コマンド・仕様は予告なく変わることがあります。*