AIホストクラブシステム:ユーザビリティ改善事例

AIホストクラブシステム:ユーザビリティ改善事例

📋 プロジェクト概要

システム名: AIホストクラブ
技術スタック: Python/Flask, JavaScript, SQLite
改修期間: 1日
改修内容: チャット継続機能のUX改善


🎯 改修の発端

妹からの貴重なフィードバック

開発したAIホストクラブシステムを実際に妹に使ってもらったところ、以下のような要望が出ました:

「1ターンずつでもいいと思う。でも『それでね』とか『でね』という言葉があったら、前の会話を引き継ぐようにできないかな?」

従来の仕様の問題点

  • 固定的な会話スタイル: 必ず5ターン連続で会話が続く
  • 柔軟性の欠如: ユーザーが途中で話題を変えたくても継続を強制される
  • 自然な会話の阻害: 「それでね」などの継続表現を使いたいときの対応ができない

💡 解決アプローチの検討

当初検討した案

1. 自然言語処理による自動判定

// 継続表現の検知例
const continuationWords = ['それでね', 'でね', 'さっきの話だけど', 'あと', 'ちなみに'];

問題点:
- 実装コストが高い
- 誤判定のリスク
- ユーザーが知らないルール

2. ボタン分離方式

[新しい話題で送信] [続きを話す]

問題点:
- UIが複雑
- 操作が煩雑

3. チェックボックス方式 ✅

☐ 前の会話の続き
[送信]

採用理由:
- 実装が最も容易
- 判定エラーがゼロ
- 直感的な操作


🔧 実装プロセス

Step 1: 基本的なチェックボックス実装

HTML側の変更

<div>
    <label>
        <input type="checkbox" id="continue-previous-chat">
        前の会話の続き
    </label>
</div>

JavaScript側の制御

const isContinuation = document.getElementById('continue-previous-chat').checked;

if (isContinuation) {
    // 前の会話を引き継ぎ
    endpoint = '/continue_chat';
} else {
    // 新しい会話
    endpoint = '/start_chat';
}

Step 2: より複雑な要求への対応

妹からさらに詳細な要求が:

「3回まで会話を引き継いで、4回目、5回目は単発でもできるようにしたい」

これにより、ターン毎の柔軟な選択が必要であることが判明。

Step 3: 根本的な仕様見直し

問題の発見: セッション設計の誤解
- 当初:チェックなし = 1ターン限定チャット
- 実際の要望:1セッション5ターン内での話題切り替え

正しい仕様:

1セッション = 最大5ターン (固定)
├── ターン1: チェックなし → 新しい話題
├── ターン2: チェックあり → ターン1を引き継ぎ
├── ターン3: チェックなし → 新しい話題(ターン1-2は無視)
├── ターン4: チェックあり → ターン3を引き継ぎ
└── ターン5: 自動終了

Step 4: 継続フォームへのチェックボックス追加

継続フォームの改修

<div id="continue-chat-form">
    <textarea id="continue-message"></textarea>

    <!-- 新規追加 -->
    <label>
        <input type="checkbox" id="continue-previous-turn">
        前のターンの続き
    </label>

    <button id="continue-chat-btn">送信する</button>
</div>

バックエンドでの会話履歴制御

if is_continuation:
    # 全履歴を参照(前のターンを引き継ぎ)
    conversation_history = ChatMessage.query.filter_by(
        session_id=session_id
    ).order_by(ChatMessage.timestamp.asc()).all()
else:
    # 履歴を参照しない(新しい話題)
    conversation_history = None

📊 改修結果

Before(改修前)

  • ❌ 5ターン強制継続
  • ❌ 途中での話題変更不可
  • ❌ 画面遷移による操作の複雑化

After(改修後)

  • ✅ ターン毎の柔軟な選択
  • ✅ 同一セッション内での話題切り替え
  • ✅ 直感的なチェックボックス操作
  • ✅ 自然な会話の流れを維持

使用例

【ユーザーの実際の使い方】
1ターン目: 「今日仕事で嫌なことがあった」(チェックなし)
2ターン目: 「それでね、上司に怒られて...」(チェックあり)  
3ターン目: 「話変わるけど、今度旅行に行くんだ」(チェックなし)
4ターン目: 「その旅行先なんだけど...」(チェックあり)
5ターン目: 「全然関係ないけど最近の趣味は...」(チェックなし)

🎓 学んだこと

1. ユーザーテストの重要性

  • 開発者の想定 ≠ 実際のユーザーニーズ
  • 実際に使ってもらうことで見えてくる課題
  • 妹という身近なユーザーからの率直なフィードバックの価値

2. 段階的な要求仕様の明確化

  • 最初の要求:「1ターンずつでもいい」
  • 詳細化された要求:「3回継続 + 2回単発」
  • 最終的な本質:「ターン毎の柔軟な選択」

3. シンプルな解決策の効果

  • 複雑な自然言語処理よりもシンプルなUI解決
  • チェックボックス1つで複雑な要求を実現
  • 実装コストとユーザビリティのバランス

4. 仕様設計の重要性

  • セッション設計の根本的見直しの必要性
  • 表面的な機能追加vs根本的な設計変更
  • ユーザーの使用パターンを想定した設計の重要性

🔚 まとめ

本事例は、ユーザーフィードバックから始まる段階的な要求分析と、シンプルで効果的なUI解決の好例です。

技術的な複雑さに頼らず、ユーザーの自然な操作感を重視した設計により、柔軟で使いやすいチャットシステムを実現できました。

特に「妹テスト」という身近なユーザーテストの価値と、要求の段階的な明確化プロセスは、今後のシステム開発において重要な指針となる経験でした。

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

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

お問い合わせ