操作
機能 #193
未完了Redmine左ナビ AIチャット機能追加 - チャット一覧・1ペイン表示・履歴管理
開始日:
2025-06-04
期日:
進捗率:
0%
予定工数:
説明
機能要望概要¶
対象箇所: Redmine左ナビゲーションメニュー
要望内容: AIチャット機能をメインナビゲーションに追加
配置位置: カレンダーの位置(カレンダー削除後)
機能仕様¶
1. 左ナビゲーション追加¶
メニュー構成:
📊 ダッシュボード
🎫 チケット
🏗️ プロジェクト管理
📰 ニュース
📄 ドキュメント
🤖 AIチャット ← 新規追加(カレンダー位置)
2. AIチャット機能構成¶
A. チャット一覧表示¶
- 既存チャット履歴の表示
- チャット件名(タイトル)一覧
- 最終更新日時
- チャット状態(アクティブ/非アクティブ)
B. 新規チャット作成¶
- 「新規チャット」ボタン
- 1ペインでのチャット画面起動
- フルページでのチャット体験
C. 既存チャット再開¶
- 件名クリックでチャット画面表示
- 過去の会話履歴継続
- 1ペインでのWEB UI利用
UI/UX設計¶
1. ナビゲーションメニュー¶
<nav className="sidebar-nav">
{/* 既存メニュー */}
<NavItem icon="📊" label="ダッシュボード" to="/dashboard" />
<NavItem icon="🎫" label="チケット" to="/tickets" />
<NavItem icon="🏗️" label="プロジェクト管理" to="/projects" />
<NavItem icon="📰" label="ニュース" to="/news" />
<NavItem icon="📄" label="ドキュメント" to="/documents" />
{/* 新規追加 */}
<NavItem icon="🤖" label="AIチャット" to="/ai-chat" />
</nav>
2. AIチャット一覧ページ (/ai-chat
)¶
<div className="ai-chat-list-page">
{/* ヘッダー */}
<div className="page-header">
<h1 className="text-2xl font-bold">AIチャット</h1>
<button className="btn btn-primary">
➕ 新規チャット
</button>
</div>
{/* チャット一覧 */}
<div className="chat-list">
{chatHistory.map(chat => (
<div key={chat.id} className="chat-item">
<div className="chat-title">
<a href={`/ai-chat/${chat.id}`}>{chat.title}</a>
</div>
<div className="chat-meta">
<span className="last-updated">{chat.lastUpdated}</span>
<span className="message-count">{chat.messageCount}件</span>
</div>
</div>
))}
</div>
</div>
3. 1ペインチャット画面 (/ai-chat/new
, /ai-chat/:id
)¶
<div className="ai-chat-fullpage">
{/* チャットヘッダー */}
<div className="chat-header">
<button className="back-btn">← 一覧に戻る</button>
<h2 className="chat-title">{chatTitle || "新規チャット"}</h2>
<div className="chat-actions">
<button className="save-btn">💾 保存</button>
<button className="delete-btn">🗑️ 削除</button>
</div>
</div>
{/* チャットエリア */}
<div className="chat-messages-area">
{messages.map(message => (
<ChatMessage key={message.id} message={message} />
))}
</div>
{/* 入力エリア */}
<div className="chat-input-area">
<input
type="text"
placeholder="メッセージを入力..."
className="chat-input"
/>
<button className="send-btn">送信</button>
</div>
</div>
データ管理仕様¶
1. チャット履歴保存¶
// チャットデータ構造
const chatSession = {
id: 'chat_uuid_001',
title: 'Redmine設定について',
createdAt: '2025-06-04T18:30:00Z',
lastUpdated: '2025-06-04T19:15:00Z',
messageCount: 12,
messages: [
{
id: 'msg_001',
role: 'user',
content: 'Redmineの設定方法を教えて',
timestamp: '2025-06-04T18:30:00Z'
},
{
id: 'msg_002',
role: 'assistant',
content: 'Redmineの設定について説明します...',
timestamp: '2025-06-04T18:30:15Z'
}
],
context: {
url: 'https://task.call2arm.com/settings',
pageContent: '...'
}
};
2. 永続化ストレージ¶
- ローカルストレージ: ブラウザでの一時保存
- サーバーサイド: データベースでの永続保存
- セッション管理: ユーザー別のチャット履歴
技術実装要件¶
1. ルーティング追加¶
// React Router設定
<Routes>
{/* 既存ルート */}
<Route path="/dashboard" element={<Dashboard />} />
<Route path="/tickets" element={<Tickets />} />
<Route path="/projects" element={<Projects />} />
{/* 新規追加 */}
<Route path="/ai-chat" element={<AIchatList />} />
<Route path="/ai-chat/new" element={<AIchatFullpage />} />
<Route path="/ai-chat/:chatId" element={<AIchatFullpage />} />
</Routes>
2. API エンドポイント¶
# チャット管理API
GET /api/ai-chat/sessions # チャット一覧取得
POST /api/ai-chat/sessions # 新規チャット作成
GET /api/ai-chat/sessions/:id # 特定チャット取得
PUT /api/ai-chat/sessions/:id # チャット更新
DELETE /api/ai-chat/sessions/:id # チャット削除
# メッセージ管理API
POST /api/ai-chat/sessions/:id/messages # メッセージ送信
GET /api/ai-chat/sessions/:id/messages # メッセージ履歴取得
3. 状態管理¶
// Zustand/Redux での状態管理
const useAIChatStore = create((set, get) => ({
chatSessions: [],
currentChat: null,
loadChatSessions: async () => {
const sessions = await fetchChatSessions();
set({ chatSessions: sessions });
},
createNewChat: async (initialMessage) => {
const newChat = await createChatSession(initialMessage);
set(state => ({
chatSessions: [newChat, ...state.chatSessions],
currentChat: newChat
}));
},
loadChat: async (chatId) => {
const chat = await fetchChatSession(chatId);
set({ currentChat: chat });
}
}));
期待効果¶
- アクセス性向上: AIチャットへの直接アクセス
- 履歴管理: 過去の相談内容の再参照
- 作業継続性: 中断したチャットの再開
- 統合体験: Redmine内でのシームレスなAI活用
関連チケット¶
優先度¶
- 緊急度: 中(UI改善・機能追加)
- 重要度: 高(AI統合の中核機能)
操作