AI Host Club System - 地雷系テーマのAIチャットシステム

AI Host Club System - 地雷系テーマのAIチャットシステム

📖 プロジェクト概要

AI Host Club System は、地雷系デザインテーマを採用したAIホストクラブシステムです。ユーザーが個性豊かなホストキャラクターとのマルチターンチャットを楽しめる、エンターテインメント性の高いWebアプリケーションです。

🎯 開発背景・目的

  • エンターテインメント性: 従来のチャットボットを超えた、キャラクター性重視の対話体験
  • 個性化: 5種類の異なるホストタイプによる多様な会話スタイル
  • ユーザー体験: 未登録ユーザーでも楽しめるお試し機能から本格利用まで
  • 管理効率: 管理者による効率的なコンテンツ管理機能

🛠️ 技術スタック

バックエンド

  • Python/Flask: 軽量で柔軟なWebフレームワーク
  • SQLAlchemy: データベースORM
  • Flask-Login: ユーザー認証システム
  • SQLite: 開発・小規模運用に適したデータベース
  • Google Gemini AI: 自然言語処理による会話生成

フロントエンド

  • HTML5/CSS3: セマンティックなマークアップとレスポンシブデザイン
  • Vanilla JavaScript: フレームワークに依存しない軽量な実装
  • Fetch API: 非同期通信によるスムーズなUX

インフラ・ツール

  • Docker対応: コンテナ化による環境統一
  • 自動マイグレーション: データベーススキーマの自動更新
  • 環境変数管理: セキュアな設定管理

🎨 UI/UXデザイン

地雷系テーマの採用

  • カラーパレット: ピンク(#ff1493)×ブラック×ホワイトの統一
  • 視覚効果: グラデーション、グロー効果、アニメーション
  • タイポグラフィ: Noto Sans JP による読みやすさとブランド統一

レスポンシブデザイン

/* モバイルファースト設計 */
.container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 1rem;
}

@media (min-width: 768px) {
  .container {
    padding: 0 2rem;
  }
}

✨ 主要機能と技術的実装

1. マルチターンチャット機能

技術的特徴

  • 最大5ターン制限: リソース管理とユーザー体験の最適化
  • 会話履歴保持: SQLAlchemyによる効率的なデータ管理
  • リアルタイム応答: 非同期処理による待機時間の最小化
def generate_host_response(self, host, user_name, message, conversation_history=None, turn_number=1):
    """ホストの応答を生成(マルチターン対応)"""
    if GEMINI_AVAILABLE:
        # 過去の会話履歴を考慮したプロンプト
        history_context = ""
        if conversation_history:
            history_context = "\n\n過去の会話:\n"
            for msg in conversation_history[-4:]:  # 直近4件
                sender = "お客様" if msg.sender == 'user' else "あなた"
                history_context += f"{sender}: {msg.message}\n"

        prompt = f"""
        あなたは高級ホストクラブのホスト「{host.name}」です。
        {turn_instruction}
        {history_context}
        現在のメッセージ: {message}
        """
        return model.generate_content(prompt).text

2. キャラクター個性システム

5つのホストタイプ

  1. ルーク (ミステリアス系) - クールで感情を表に出さない年上
  2. (ムードメーカー系) - 明るくて一生懸命な弟系
  3. 桐生 (兄貴系) - 責任感が強く頼れるリーダー
  4. 麗華 (優雅系) - 美しく上品な女性的ホスト
  5. 一ノ瀬玲 (インテリ系) - 知的で論理的な大人

データベース設計

class Host(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    personality = db.Column(db.Text)  # 性格
    speech_style = db.Column(db.Text)  # 口調
    host_type = db.Column(db.String(50))  # タイプ
    image_path = db.Column(db.String(200))  # 写真パス
    is_default = db.Column(db.Boolean, default=False)

    def get_prompt_personality(self):
        """プロンプト生成用の性格情報を取得"""
        return {
            'name': self.name,
            'personality': self.personality,
            'speech_style': self.speech_style,
            'host_type': self.host_type
        }

3. お試し機能(未登録ユーザー向け)

マーケティング戦略

従来: 訪問 → 登録 → 利用
新導線: 訪問 → ホスト紹介閲覧 → お試し体験 → 登録

技術実装

// 2ターン制限の実装
async function trialChat() {
    const turnNumber = data.get('turn_number', 1);

    if (turnNumber > 2) {
        return jsonify({
            'success': False, 
            'error': 'お試し版は2ターンまでです。続きは登録してお楽しみください。'
        });
    }

    // 会話処理...
}

4. 画像管理システム(v1.7.0の重要改修)

問題発見と解決過程

発見した問題:

アップロード機能: PNG、JPG、JPEG ✅
表示機能: PNG のみ ❌
結果: ユーザーが「アップロードできたのに使えない」と混乱

解決アプローチ:

# 設定の一元管理
SUPPORTED_IMAGE_EXTENSIONS = {
    'upload': ['.png', '.jpg', '.jpeg'],
    'display': ['*.png', '*.jpg', '*.jpeg', '*.PNG', '*.JPG', '*.JPEG']
}

def get_available_images(self):
    """すべての対応画像形式を取得"""
    image_patterns = SUPPORTED_IMAGE_EXTENSIONS['display']
    all_image_files = []

    for pattern in image_patterns:
        files = glob.glob(os.path.join(img_dir, pattern))
        all_image_files.extend(files)

    return sorted(list(set([os.path.basename(img) for img in all_image_files])))

新UI設計: 2ペインレイアウト

<!-- 効率的な画像管理UI -->
<div style="display: grid; grid-template-columns: 1fr 2fr; gap: 2rem;">
    <!-- 左側: ホスト選択 -->
    <div class="host-selection-area">
        <h3>🎭 ホスト選択</h3>
        <!-- ホスト一覧 -->
    </div>

    <!-- 右側: 画像選択(全画像表示) -->
    <div class="image-selection-area">
        <h3>📸 画像選択</h3>
        <!-- 制限なし画像グリッド -->
    </div>
</div>

📊 開発プロセスと改善履歴

v1.0.0 → v1.7.0 の進化

段階的機能拡張

  1. v1.1.0: お試し機能実装(マーケティング強化)
  2. v1.2.0: メールアドレス任意化(登録障壁削減)
  3. v1.3.0: 画像管理機能初期実装
  4. v1.4.0: チャットUI改善(個性化表示)
  5. v1.5.0: キャラクター刷新(魅力度向上)
  6. v1.6.0: TOPページ改修(導線最適化)
  7. v1.7.0: 画像管理UI完全刷新(UX大幅改善)

継続的改善の思想

# 自動マイグレーション機能
def perform_auto_migration():
    """起動時にデータベーススキーマを自動更新"""
    if database_needs_migration():
        print("AUTO-MIGRATION: Updating database schema...")
        migrate_database()
        print("AUTO-MIGRATION: Migration completed successfully!")

🎯 重要な学びと技術的洞察

1. 一貫性設計の重要性

教訓: 「アップロード可能 = 表示可能 = 使用可能」の原則

# ❌ 悪い例: 複数箇所で異なる定義
def upload_check(): return file.endswith('.png', '.jpg')
def display_check(): return glob('*.png')  # JPGが漏れる

# ✅ 良い例: 一元管理
SUPPORTED_EXTENSIONS = {...}  # 一箇所で定義

2. ユーザビリティ設計

期待値管理の重要性

  • システムの動作がユーザーの期待と一致する
  • エラーメッセージの明確化
  • 操作結果の即座フィードバック

UI重複排除の効果

従来: 5つのホスト × 同じ画像グリッド = 無駄な重複表示
改善: 1つのホスト選択 + 1つの画像選択 = 効率的なワークフロー

3. 段階的機能拡張の成功パターン

MVP → 機能拡張 → UI改善

  1. MVP: 基本的なチャット機能
  2. 機能拡張: お試し機能、画像管理
  3. UI改善: ユーザビリティ重視の大幅刷新

🚀 技術的成果と性能

パフォーマンス最適化

  • 非同期処理: Fetch APIによる画面遷移なしの更新
  • 軽量設計: Vanilla JSによるフレームワーク依存なし
  • 効率的DB設計: 適切なインデックスと外部キー設定

セキュリティ対策

# ファイルアップロードのセキュリティ
from werkzeug.utils import secure_filename

def secure_upload(file):
    filename = secure_filename(file.filename)
    # ファイルサイズ制限
    if file_size > MAX_FILE_SIZE:
        raise SecurityError("File too large")
    # MIME タイプ検証
    if file.mimetype not in ALLOWED_MIMES:
        raise SecurityError("Invalid file type")

可読性・保守性

  • 明確な命名規則: 機能が直感的に理解できる関数名
  • 適切なコメント: 複雑な処理の意図を明確化
  • モジュール分離: 機能別の適切なファイル分割

💡 今後の展開・拡張性

技術的拡張予定

  • AI画像生成: ホスト画像の自動生成機能
  • リアルタイム通信: WebSocketによる即時応答
  • モバイルアプリ: PWA化による Native App 体験

ビジネス機能拡張

  • 課金システム: ターン数制限解除、プレミアム機能
  • パーソナライゼーション: ユーザー履歴に基づく会話カスタマイズ
  • SNS連携: 会話シェア機能、コミュニティ形成

🔗 技術デモ・リポジトリ

実装技術の詳細

  • GitHub: [リポジトリリンク]
  • 技術ドキュメント: 詳細な実装ガイド
  • API仕様: RESTful API設計書

デモ環境

  • 管理者機能: 画像管理、ユーザー管理、統計表示
  • ユーザー体験: お試し機能からフル機能まで
  • レスポンシブ対応: デスクトップ・タブレット・モバイル

📋 プロジェクト評価

技術的成果

フルスタック開発: Python/Flask + JavaScript + SQLAlchemy
AI統合: Google Gemini APIの効果的活用
UX設計: ユーザー中心設計による継続的改善
保守性: 一元管理による設定統一と拡張性確保

ビジネス価値

ユーザー体験: 段階的エンゲージメント設計
運用効率: 管理者機能による効率的コンテンツ管理
スケーラビリティ: モジュール設計による機能拡張性
マーケット適応: 地雷系テーマによる差別化

このプロジェクトは、技術的実装力とユーザー体験設計、そして継続的改善プロセスを統合した、現代的なWeb開発の実践例として位置づけられます。

同様の開発をご希望ですか?

この事例と同様の開発やカスタマイズについて、
お気軽にご相談ください。

お問い合わせ