📋 概要
現在、src/services/reminderService.tsのborrowerInfoがグローバル変数として実装されているため、複数のDiscordサーバーや複数ユーザーの同時使用に対応できません。
🔍 現状の問題点
該当コード
https://github.com/SmiSANN/Club-Key-Manager-Bot2/blob/dev/src/services/reminderService.ts#L10
// 現在鍵を借りているユーザーの情報(借りていない場合はnull)
export let borrowerInfo: BorrowerInfo | null = null;
問題
シングルトン状態: 1つのボットインスタンスで1つの借用者情報しか保持できない
競合の可能性: 複数サーバーに導入した場合、サーバー間で状態が競合する
拡張性の欠如: 将来的な複数サーバー対応が困難
💡 提案する改善策
- Map管理への移行
// ギルドIDまたはチャンネルIDをキーとして管理
const borrowerInfoMap = new Map<string, BorrowerInfo>();
export const getBorrowerInfo = (guildId: string): BorrowerInfo | null => {
return borrowerInfoMap.get(guildId) ?? null;
};
export const setBorrowerInfo = (guildId: string, info: BorrowerInfo | null) => {
if (info === null) {
borrowerInfoMap.delete(guildId);
} else {
borrowerInfoMap.set(guildId, info);
}
};
- 影響範囲
以下のファイルでborrowerInfoを参照しているため、全て修正が必要:
reminderService.ts (定義元)
scheduledCheck.ts
buttonHandlers.ts
commandHandlers.ts
📌 優先度
現在の設計: 単一サーバー専用として明記されている (README参照)
優先度: Low (将来の拡張に備えた改善)
緊急性: なし (現状で問題なく動作している)
✅ 受け入れ基準
borrowerInfoをMap管理に変更
全ての参照箇所を修正
既存機能が正常に動作することを確認
複数サーバーでの動作テスト
ドキュメント更新 (README.mdに複数サーバー対応を明記)
🏷️ ラベル提案
📝 備考
この改善により、以下のメリットがあります:
複数のDiscordサーバーで同じボットインスタンスを使用可能
テストが容易になる (モック化しやすい)
コードの保守性向上
📋 概要
現在、
src/services/reminderService.tsのborrowerInfoがグローバル変数として実装されているため、複数のDiscordサーバーや複数ユーザーの同時使用に対応できません。🔍 現状の問題点
該当コード
https://github.com/SmiSANN/Club-Key-Manager-Bot2/blob/dev/src/services/reminderService.ts#L10
問題
シングルトン状態: 1つのボットインスタンスで1つの借用者情報しか保持できない
競合の可能性: 複数サーバーに導入した場合、サーバー間で状態が競合する
拡張性の欠如: 将来的な複数サーバー対応が困難
💡 提案する改善策
以下のファイルでborrowerInfoを参照しているため、全て修正が必要:
reminderService.ts (定義元)
scheduledCheck.ts
buttonHandlers.ts
commandHandlers.ts
📌 優先度
現在の設計: 単一サーバー専用として明記されている (README参照)
優先度: Low (将来の拡張に備えた改善)
緊急性: なし (現状で問題なく動作している)
✅ 受け入れ基準
borrowerInfoをMap管理に変更
全ての参照箇所を修正
既存機能が正常に動作することを確認
複数サーバーでの動作テスト
ドキュメント更新 (README.mdに複数サーバー対応を明記)
🏷️ ラベル提案
📝 備考
この改善により、以下のメリットがあります:
複数のDiscordサーバーで同じボットインスタンスを使用可能
テストが容易になる (モック化しやすい)
コードの保守性向上