Sansha (仮)

https://github.com/Monju-TriHackathon/Sansha

Flask

Python

投稿された意見で、1:1 の議論アプリ。 評価を行うのは第三者。

Taiki Matsushima

shuma

Ryu

推しアイデア

いろんな人が、意見をするのではなく、1対1で自分の考えで戦える。(横から入るのを防ぐ)

作った背景

SNS 等で様々な意見が飛びかっているが、その意見に対して、いろんな人が応答できるため、議論にならないことがある

推し技術

とくになし。

プロジェクト詳細

制作するもの

テーマ「さん」

Wikipedia で「3」に関連するものを探すと...

3 は「中立」「どれでもない」という意味で使われることも多い。例:「第三者」「三人称」。

と記載があった。

「中立」、「第三者」から --> 討論?評価?

アプリ概要

投稿された意見に対して、もう一人が反論や意見を示し、第三者がその議論を評価をする(コメントやリアクション)

キーワード

ディベート, 第三者, 中立, DebateArt, ネットディベート, 1vs1, 投票

考えや思い

自分がそうだと思っていることが実はそうでなかったのように発見を見つけてほしい。 また、反論から新たな意見をもってほしい。

課題解決や背景

現状の問題点

  • SNS 等で様々な意見が飛びかっているが、その意見に対して、いろんな人が応答できるため、議論にならないことがある

このアプリが提供すること

  • 議論を行う場を提供
  • 自分の疑問点や社会に対する問題点など、様々な意見を共有し、自分の考えを他者に伝える
    • 反対意見などを聞くことで、解消につながることも...
  • いろんな人が、意見をするのではなく、1対1で行なえる(横から入るのを防ぐ)
  • 第三者は傍観し、評価だけを行なう

内容

具体的な流れ

  1. 1人がテーマを決めて、挑戦者を待つ
  2. 他の人がその挑戦状を受け、1対1で議論を行なう
  3. 議論終了後、第三者が採点したりフィードバックを行い、投票する

各画面の説明

ログイン画面

サービスの概要とログインや新規登録機能

議論作成画面

議論のタイトル、説明、議論方式(ターン制もしくはリアルタイム制)などを指定して議論を作成 詳細設定で議論期間、投票期間などの調整もできる

議論一覧画面(ログインした際のホーム画面)

今までに作られた議論の簡易的な情報やアクションを起こした際の簡易的な通知を表示 議論に参加したい場合、募集中の議論に参加できる 討論に関与していない第三者は、投票中の議論に投票できる

議論画面

意見を投稿するとLINEのような感じで議論の流れにログが残る 議論が終了すると投票が始まる 投票が終了するとどちらが優勢だったかリザルトが表示される

プロフィール画面

プロフィールや投稿した議論の一覧、参加した議論の一覧の表示

アカウント設定

アカウント名やメアド、プロフィール、パスワードの変更

技術仕様

バックエンド

  • 言語: Python
  • フレームワーク: Flask
    • アプリケーションファクトリパターンを採用 (create_app)
    • Blueprintによる機能ごとのモジュール分割 (auth, debate, vote, user, notification 等)
  • データベース:
    • RDBMS: SQLite (デフォルト設定。instance/database.db に保存)
    • ORM: SQLAlchemy (Flask-SQLAlchemy)
  • 認証・認可:
    • Flask-Login によるセッション管理
  • 環境設定:
    • python-dotenv による .env ファイルからの環境変数読み込み(SECRET_KEY 等)

フロントエンド

  • テンプレートエンジン: Jinja2 (Flask標準)
  • CSSフレームワーク: Bootstrap (CDN利用)
  • アイコン: Bootstrap Icons
  • JavaScript: Vanilla JS
    • フレームワーク(React/Vue等)は使用せず、標準的なDOM操作とFetch APIで実装
  • UI/UX機能:
    • ダークモード/ライトモード切替機能 (theme.js)
    • 非同期通知システム (notifications.js)

主なデータモデル (Schema)

  • User: ユーザー情報 (ID, メール, パスワードハッシュ, プロフィール)
  • Debate: 議論本体 (タイトル, ステータス, 投稿者ID, 挑戦者ID)
  • Exchange: 議論の中身(意見・反論のやり取り)
  • Vote: 第三者による投票データ
  • Comment: 議論に対するコメント
  • Notification: ユーザーへの通知

ディレクトリ構造のハイライト

  • flaskr/: アプリケーション本体
    • models/: データベースモデル定義
    • templates/: HTMLテンプレート
    • static/: 静的ファイル (CSS/JS)
    • blueprints: 各機能のロジック (auth.py, debate.py など)
  • instance/: 実行時のインスタンス固有データ(SQLite DBファイルなど)

Taiki Matsushima

@dd82353a29a1fb0b