いい波立ってんね~

https://github.com/Tanakee/hackz-20263-iinamitattenne

PHP

Docker

Node.js

Vue

HTML

議論を物理現象で可視化するSNS風議論プラットフォーム

isekin

たなけー

伊藤ゆうき

推しアイデア

「議論の物理化] 意見に熱量・質量・風化を与え、投じられた石が波紋を生むという表現は唯一無二。 いいねを稼げる風化しない意見を投じよう!

作った背景

お題に沿うようなことを考えていたら、「"波風"立てる議論プラットフォームを作ろう!」に行き着いた。

推し技術

cannon-es + Three.js の物理演算 石が水面に落ちる挙動をリアル物理で再現してるのが没入感を爆上げしてる。

プロジェクト詳細

🌊 いい波立ってんね~

女は海、男は財布


1. 課題意識

今のSNSでは、どんな意見も同じタイムラインに流れ、すぐに消費される。

「人類は進化を止めるべきだ」という壮大な問いかけも、「僕はラーメンが好きだ」というつぶやきも、同じ1投稿として扱われる。

それっておかしくない?


2. コアアイデア:主語がデカいほど、石がデカくなる

「いい波立ってんね~」は、あなたの意見をとして池に投じる議論プラットフォームです。

投稿すると、言葉は石になって池に飛んでいき、着水し、波紋を広げ、水底に沈んでいく。

そして——主語がデカいほど、石がデカくなる。

入力主語スケール石のサイズ
僕はラーメンが好きだ15小さい
女は海70中くらい
人類は進化を止めるべきだ人類100でかい

主語がデカい石は、大きな波紋を生み、重い着水音を響かせ、高い水柱を立てる。

そして、なかなか風化しない。大きな問いかけは、長く池に残り続ける。


3. 主語スケールの判定:GiNZA(日本語NLP)

スケール判定の核心は、日本語の自然言語処理エンジン GiNZA(spaCy + 日本語モデル)。

日本語の難しさは「は」と「が」の区別にある。

「僕はラーメンが好きだ」——主語は「ラーメン」ではなく「僕」。

GiNZAの依存関係ラベル dislocated(は-トピック)と nsubj(が-主語)を区別し、正しく「僕」を主語として抽出する。

has_dislocated = any(t.dep_ == "dislocated" for t in sent) if has_dislocated and token.dep_ == "nsubj": continue # 「ラーメンが好き」のラーメンを除外

抽出した主語を、約50語のスケール辞書と固有表現認識(地名・組織名)で0〜100にスコアリングする。

主語の種類スケール
個人僕・私・俺15
小集団家族・チーム35〜40
社会・組織SNS・メディア・政府60〜80
人類・世界規模人類・世界・宇宙95〜100

4. 石はただ沈むだけじゃない

積み重なる

cannon-es による物理演算で、石は水底に沈み、先に投じられた石の上に本当に積み重なっていく。議論が積み上がる様子を、物理として体感できる。

熱を帯びる

いいねされた石は熱量が上がり、赤く光り始める。

風化する

議論されなくなった石はゆっくり透明になり、脈動しながら消えていく。主語がデカい石ほど風化は遅く、池の中に長く存在し続ける。

風になる

熱量が高い投稿群を GPT-3.5 が要約し、「風」として池の上に流す。議論の潮流が自然言語で可視化される。


5. 池を泳ぐ魚たち——これは近代SNSの風刺だ

池には2種類の魚が泳いでいる。

🔵 冷笑魚(青) と 🔴 熱血魚(赤) だ。

魚が石に近づくと、熱量に変化が起きる。

魚の種類石への影響吹き出し
🔵 冷笑魚熱量を下げる「う、魚w」
🔴 熱血魚熱量を上げる「う、うおおおおおお!」

そして——「サメ襲来」。

画面を横切るカットイン演出のあと、🦈 サメが池に現れる。サメは熱血魚だけを狙って食い尽くし、「まじサメるわ〜」と吐き捨てて去っていく。

熱量を上げようとする声が、冷笑によって消えていく。これは今のSNSそのものだ。


6. VRで石を投げる

Pico 4 Ultra に対応した WebXR 機能も搭載。

池にかかる木製の橋の上に立ち、コントローラーで石を掴み、振りかぶって池に投げ込む。振りの強さで飛距離が変わり、腕の方向で着水位置が変わる。

VR空間内のスマホ型UIパネルからひらがなキーボードで文章を入力し、意見を打ち込んで自分の手で池に投じる体験をVR内で完結させた。


7. システムアーキテクチャ

┌─────────────────────────────────────────────────────┐ │ Frontend (Vue.js + Three.js + cannon-es + WebXR) │ │ │ │ ┌──────────┐ ┌───────────┐ ┌──────────────────┐ │ │ │ 3D池 │ │ 物理演算 │ │ WebXR / VR UI │ │ │ │ (Three) │ │(cannon-es)│ │ (Pico 4 Ultra) │ │ │ └──────────┘ └───────────┘ └──────────────────┘ │ └────────────────────┬────────────────────────────────┘ │ HTTP ┌────────────┴────────────┐ ▼ ▼ ┌───────────────┐ ┌──────────────────┐ │ Gravity API │◄─────►│ NLP API │ │ (Node/Express)│ │ (FastAPI + GiNZA)│ │ │ │ │ │ ・質量計算 │ │ ・主語抽出 │ │ ・AI要約(風) │ │ ・スケール判定 │ │ ・VRリモート │ │ ・固有表現認識 │ └───────┬───────┘ └──────────────────┘ │ HTTP ▼ ┌───────────────┐ ┌──────────────────┐ │ Logic API │◄─────►│ MySQL │ │ (PHP) │ │ │ │ │ │ ・posts │ │ ・風化判定 │ │ ・interactions │ │ ・熱量計算 │ │ ・winds │ │ ・DB管理 │ └──────────────────┘ └───────────────┘

5つのサービスを Docker Compose でオーケストレーション。


8. 今後の展望

  • リアルタイム同期(WebSocket): 複数ユーザーが同じ池を共有し、他者の石が飛んでくる体験
  • 波紋の干渉: 複数の石が生む波紋が物理的に干渉し合う演算
  • 主語スケール辞書の拡充: コーパスベースで自動拡張
  • 常設展示: 公共空間に池を設置し、来場者が石を投じ続ける

チーム構成

メンバー担当
A物理UI(3D描画・物理演算・NLP・VR・音響)
Bロジック・DB(風化・熱量・API設計)
CフロントUI・デザイン

主語がデカいほど、大きな波紋を生む。

あなたの意見は、どれくらいの波紋を広げるだろう?

isekin

@8a896d99d4dce583