プロジェクト

全般

プロフィール

機能 #585 » equipment-system-specifications.md

www user, 2025-06-18 15:22

 

機材予約システム 詳細仕様書

システム概要

基本情報

  • システム名称: 社内機材予約システム
  • バージョン: v1.0.0
  • 開発言語: JavaScript (Node.js, React)
  • データベース: SQLite
  • 対象ユーザー: 社内全従業員(約100名想定)
  • 管理機材数: 約500点
  • 稼働環境: オンプレミス Windows Server

システム構成

[フロントエンド]
React 18.x + TailwindCSS 3.x + Lucide Icons

[バックエンド]  
Node.js 18.x + Express 4.x + SQLite 3.x

[認証システム]
JWT + LINE WORKS OAuth 2.0

[デプロイ環境]
Windows Server + IIS + iisnode

1. 画面一覧

1.1 デスクトップ版画面

画面ID 画面名 画面種別 権限 説明
D001 ログイン画面 認証 Guest ユーザー認証・LINE WORKS連携
D002 ダッシュボード メイン User/Admin 統計情報・クイックアクション
D003 機材検索画面 機能 User/Admin 機材の検索・フィルタリング
D004 機材詳細画面 機能 User/Admin 機材の詳細情報表示
D005 予約作成画面 機能 User/Admin 新規予約の作成
D006 予約管理画面 機能 User/Admin 自分の予約一覧・編集
D007 予約履歴画面 機能 User/Admin 過去の予約履歴確認
D008 管理者ホーム 管理 Admin 管理者専用メニュー
D009 ユーザー管理画面 管理 Admin ユーザーの追加・編集・削除
D010 システム設定画面 管理 Admin システム全体設定
D011 レポート出力画面 管理 Admin 各種レポートの生成・出力

1.2 モバイル版画面(LINE WORKS対応)

画面ID 画面名 画面種別 権限 説明
M001 モバイルダッシュボード メイン User/Admin モバイル最適化ダッシュボード
M002 簡単検索画面 機能 User/Admin タッチ操作最適化検索
M003 クイック予約画面 機能 User/Admin 簡単予約フォーム
M004 予約確認画面 機能 User/Admin モバイル用予約一覧
M005 人気機材画面 機能 User/Admin 人気機材一覧表示
M006 認証完了画面 認証 User/Admin LINE WORKS認証後の画面

1.3 LINE WORKS Bot画面

画面ID 画面名 画面種別 権限 説明
B001 Bot初期メッセージ Bot User/Admin 初回アクセス時のウェルカム
B002 ヘルプメッセージ Bot User/Admin 利用方法の説明
B003 機材検索結果 Bot User/Admin Bot経由での検索結果
B004 予約状況表示 Bot User/Admin ユーザーの予約状況
B005 通知メッセージ Bot User/Admin 各種自動通知

2. 処理一覧

2.1 認証処理

処理ID 処理名 処理種別 説明
AUTH001 標準ログイン処理 同期 ユーザー名・パスワードでの認証
AUTH002 LINE WORKS OAuth開始 非同期 LINE WORKS認証画面へリダイレクト
AUTH003 OAuth コールバック処理 非同期 認証コード受取・トークン発行
AUTH004 JWTトークン生成 同期 アクセストークンの生成
AUTH005 トークン検証 同期 リクエスト時のトークン有効性確認
AUTH006 トークンリフレッシュ 非同期 期限切れトークンの更新
AUTH007 ログアウト処理 同期 セッション無効化

2.2 機材管理処理

処理ID 処理名 処理種別 説明
EQP001 機材一覧取得 非同期 条件に応じた機材リスト取得
EQP002 機材詳細取得 非同期 指定機材の詳細情報取得
EQP003 機材検索処理 非同期 キーワード・条件での機材検索
EQP004 カテゴリ別取得 非同期 カテゴリ・サブカテゴリ別機材取得
EQP005 人気機材取得 非同期 利用頻度順での機材取得
EQP006 機材追加処理 非同期 新規機材の登録
EQP007 機材更新処理 非同期 機材情報の更新
EQP008 機材削除処理 非同期 機材の論理削除
EQP009 機材状態更新 非同期 ステータス変更(利用可能/メンテナンス)

2.3 予約管理処理

処理ID 処理名 処理種別 説明
RSV001 予約作成処理 非同期 新規予約の作成・重複チェック
RSV002 予約更新処理 非同期 既存予約の修正
RSV003 予約削除処理 非同期 予約のキャンセル
RSV004 予約一覧取得 非同期 ユーザー・期間別予約取得
RSV005 重複チェック処理 同期 予約期間の重複確認
RSV006 予約状態更新 非同期 予約ステータスの変更
RSV007 履歴アーカイブ処理 非同期 古い予約データの移行

2.4 通知処理

処理ID 処理名 処理種別 説明
NOT001 予約完了通知 非同期 予約作成時の自動通知
NOT002 リマインダー通知 非同期 予約開始前の事前通知
NOT003 キャンセル通知 非同期 予約キャンセル時の通知
NOT004 メンテナンス通知 非同期 機材メンテナンス予定通知
NOT005 LINE WORKS Bot送信 非同期 Bot経由でのメッセージ送信
NOT006 通知履歴記録 非同期 送信した通知の履歴保存

2.5 LINE WORKS Bot処理

処理ID 処理名 処理種別 説明
BOT001 Webhook受信処理 非同期 LINE WORKSからのWebhook処理
BOT002 メッセージ解析 同期 受信メッセージの意図解析
BOT003 自動応答処理 非同期 適切な応答メッセージの生成・送信
BOT004 ボタンアクション処理 非同期 ユーザーのボタンクリック処理
BOT005 機材検索Bot処理 非同期 Bot経由での機材検索
BOT006 予約作成Bot処理 非同期 Bot経由での予約作成

3. 機能一覧

3.1 基本機能

機能ID 機能名 説明 画面 権限
F001 ユーザー認証 ログイン・ログアウト機能 D001 Guest
F002 LINE WORKS認証 OAuth 2.0によるシングルサインオン D001, M006 Guest
F003 ダッシュボード表示 統計情報・クイックアクセス D002, M001 User/Admin
F004 機材検索 キーワード・カテゴリ検索 D003, M002 User/Admin
F005 機材詳細表示 機材の詳細情報確認 D004 User/Admin
F006 予約作成 新規予約の作成 D005, M003 User/Admin
F007 予約管理 予約の確認・編集・削除 D006, M004 User/Admin
F008 予約履歴 過去の予約履歴確認 D007 User/Admin

3.2 管理機能

機能ID 機能名 説明 画面 権限
AF001 ユーザー管理 ユーザーの追加・編集・削除 D009 Admin
AF002 機材管理 機材の登録・更新・削除 D009 Admin
AF003 システム設定 全体設定の変更 D010 Admin
AF004 レポート出力 各種レポートの生成 D011 Admin
AF005 予約監視 全ユーザーの予約状況監視 D008 Admin
AF006 メンテナンス管理 機材メンテナンススケジュール D009 Admin

3.3 LINE WORKS連携機能

機能ID 機能名 説明 画面 権限
LF001 Bot自動応答 ユーザーメッセージへの自動応答 B002-B005 User/Admin
LF002 自動通知 予約・メンテナンス等の自動通知 B005 User/Admin
LF003 モバイル最適化UI スマートフォン対応UI M001-M005 User/Admin
LF004 QRコード連携 QRコードからの直接アクセス - User/Admin
LF005 トークルーム連携 ブックマーク・共有機能 - User/Admin

3.4 補助機能

機能ID 機能名 説明 画面 権限
SF001 データバックアップ 定期的なデータバックアップ - System
SF002 ログ管理 アクセス・操作ログの記録 - System
SF003 データアーカイブ 古いデータの自動アーカイブ - System
SF004 統計分析 利用統計の集計・分析 D002 User/Admin
SF005 セキュリティ監視 不正アクセスの検知・防止 - System

4. 関数一覧

4.1 フロントエンド関数(React)

4.1.1 認証関連

// 認証フック
const useAuth = () => { ... }                    // 認証状態管理
const useLineWorksAuth = () => { ... }           // LINE WORKS認証管理

// 認証処理
const handleLogin = (credentials) => { ... }     // ログイン処理
const handleLogout = () => { ... }               // ログアウト処理
const refreshToken = () => { ... }               // トークンリフレッシュ

4.1.2 機材管理関連

// 機材取得
const getEquipmentList = (filters) => { ... }    // 機材一覧取得
const getEquipmentDetail = (id) => { ... }       // 機材詳細取得
const searchEquipment = (query) => { ... }       // 機材検索
const getPopularEquipment = () => { ... }        // 人気機材取得

// 機材管理(管理者のみ)
const createEquipment = (data) => { ... }        // 機材作成
const updateEquipment = (id, data) => { ... }    // 機材更新
const deleteEquipment = (id) => { ... }          // 機材削除

4.1.3 予約管理関連

// 予約操作
const createReservation = (data) => { ... }      // 予約作成
const updateReservation = (id, data) => { ... }  // 予約更新
const cancelReservation = (id) => { ... }        // 予約キャンセル
const getUserReservations = (userId) => { ... }  // ユーザー予約取得

// 予約検証
const checkAvailability = (data) => { ... }      // 利用可能性チェック
const validateReservation = (data) => { ... }    // 予約データ検証

4.1.4 UI操作関連

// 画面遷移
const setCurrentView = (view) => { ... }         // 画面切り替え
const navigateToDetail = (id) => { ... }         // 詳細画面遷移
const goBack = () => { ... }                     // 前画面戻り

// UI状態管理
const setLoading = (state) => { ... }            // ローディング状態
const showNotification = (message) => { ... }    // 通知表示
const setError = (error) => { ... }              // エラー表示

4.2 バックエンド関数(Node.js)

4.2.1 認証関連

// JWT認証
const generateToken = (user) => { ... }          // JWTトークン生成
const verifyToken = (token) => { ... }           // トークン検証
const refreshAccessToken = (refresh) => { ... }  // トークンリフレッシュ

// LINE WORKS OAuth
const initiateOAuth = () => { ... }              // OAuth開始
const handleCallback = (code) => { ... }         // コールバック処理
const getUserInfo = (token) => { ... }           // ユーザー情報取得

4.2.2 データベース操作

// ユーザー操作
const findUserById = (id) => { ... }             // ユーザー取得
const createUser = (data) => { ... }             // ユーザー作成
const updateUser = (id, data) => { ... }         // ユーザー更新

// 機材操作
const findEquipment = (filters) => { ... }       // 機材検索
const createEquipment = (data) => { ... }        // 機材作成
const updateEquipmentStatus = (id, status) => { ... } // ステータス更新

// 予約操作
const createReservation = (data) => { ... }      // 予約作成
const findReservations = (filters) => { ... }    // 予約検索
const checkConflict = (data) => { ... }          // 重複チェック

4.2.3 通知関連

// 通知送信
const sendNotification = (user, message) => { ... }    // 通知送信
const sendLineWorksMessage = (userId, content) => { ... } // LINE WORKS送信
const scheduleReminder = (reservation) => { ... }      // リマインダー予約

// 通知テンプレート
const formatReservationMessage = (data) => { ... }     // 予約通知フォーマット
const formatReminderMessage = (data) => { ... }        // リマインダーフォーマット

4.2.4 LINE WORKS Bot関連

// Webhook処理
const handleWebhook = (payload) => { ... }       // Webhook受信処理
const verifySignature = (signature, body) => { ... } // 署名検証
const parseMessage = (message) => { ... }        // メッセージ解析

// Bot応答
const generateResponse = (intent, user) => { ... }    // 応答生成
const sendBotMessage = (userId, content) => { ... }   // Bot メッセージ送信
const handlePostback = (data) => { ... }              // ボタンアクション処理

4.3 ユーティリティ関数

4.3.1 日付・時刻処理

const formatDate = (date) => { ... }             // 日付フォーマット
const formatTime = (date) => { ... }             // 時刻フォーマット
const getDateRange = (start, end) => { ... }     // 日付範囲生成
const isBusinessDay = (date) => { ... }          // 営業日判定

4.3.2 バリデーション

const validateEmail = (email) => { ... }         // メール形式検証
const validatePassword = (password) => { ... }   // パスワード強度検証
const validateReservationData = (data) => { ... } // 予約データ検証
const sanitizeInput = (input) => { ... }         // 入力値サニタイズ

4.3.3 データ変換

const csvToJson = (csv) => { ... }               // CSV変換
const jsonToCsv = (json) => { ... }              // JSON変換
const encodeQRCode = (data) => { ... }           // QRコード生成
const generateReport = (data) => { ... }         // レポート生成

5. テーブル一覧

5.1 基本テーブル

テーブル名 論理名 用途 レコード数(想定)
users ユーザー ユーザー情報管理 100件
categories 機材カテゴリ 機材分類管理 4件
subcategories 機材サブカテゴリ 機材細分類管理 40件
equipment 機材 機材情報管理 500件
reservations 予約 予約情報管理 1,000件/年
reservation_history 予約履歴 アーカイブ済み予約 5,000件

5.2 LINE WORKS連携テーブル

テーブル名 論理名 用途 レコード数(想定)
lineworks_tokens LINE WORKSトークン OAuth トークン管理 100件
notification_history 通知履歴 送信済み通知履歴 10,000件/年
bot_settings Bot設定 Bot動作設定 20件
user_notification_settings ユーザー通知設定 個人通知設定 100件
qr_access_logs QRアクセスログ QRコード利用履歴 1,000件/月

5.3 管理・運用テーブル

テーブル名 論理名 用途 レコード数(想定)
auth_sessions 認証セッション 認証セッション管理 200件
equipment_alerts 機材アラート 機材アラート設定 1,000件
system_logs システムログ システム操作ログ 50,000件/年
backup_logs バックアップログ バックアップ実行履歴 365件/年

6. テーブル定義

6.1 users(ユーザー)

カラム名 データ型 NULL キー デフォルト 説明
id INTEGER NOT NULL PK AUTOINCREMENT ユーザーID
username TEXT NOT NULL UQ - ログインID
password TEXT NOT NULL - - パスワード(ハッシュ化)
name TEXT NOT NULL - - 氏名
department TEXT NOT NULL - - 所属部署
email TEXT NULL - - メールアドレス
role TEXT NOT NULL - 'user' 権限(user/admin)
lineworks_id TEXT NULL - - LINE WORKS ID
avatar_url TEXT NULL - - アバターURL
last_login DATETIME NULL - - 最終ログイン日時
login_count INTEGER NOT NULL - 0 ログイン回数
notification_enabled BOOLEAN NOT NULL - 1 通知有効フラグ
created_at DATETIME NOT NULL - CURRENT_TIMESTAMP 作成日時

6.2 categories(機材カテゴリ)

カラム名 データ型 NULL キー デフォルト 説明
id INTEGER NOT NULL PK AUTOINCREMENT カテゴリID
name TEXT NOT NULL - - カテゴリ名
description TEXT NULL - - 説明
created_at DATETIME NOT NULL - CURRENT_TIMESTAMP 作成日時

6.3 subcategories(機材サブカテゴリ)

カラム名 データ型 NULL キー デフォルト 説明
id INTEGER NOT NULL PK AUTOINCREMENT サブカテゴリID
category_id INTEGER NOT NULL FK - 親カテゴリID
name TEXT NOT NULL - - サブカテゴリ名
description TEXT NULL - - 説明
created_at DATETIME NOT NULL - CURRENT_TIMESTAMP 作成日時

6.4 equipment(機材)

カラム名 データ型 NULL キー デフォルト 説明
id TEXT NOT NULL PK - 機材ID(書式:1-01-001)
name TEXT NOT NULL - - 機材名
category_id INTEGER NOT NULL FK - カテゴリID
subcategory_id INTEGER NOT NULL FK - サブカテゴリID
status TEXT NOT NULL - 'available' 状態(available/maintenance)
location TEXT NULL - - 保管場所
specifications TEXT NULL - - 仕様・説明
last_maintenance DATE NULL - - 最終メンテナンス日
purchase_date DATE NULL - - 購入日
warranty_date DATE NULL - - 保証期限
created_at DATETIME NOT NULL - CURRENT_TIMESTAMP 作成日時

6.5 reservations(予約)

カラム名 データ型 NULL キー デフォルト 説明
id INTEGER NOT NULL PK AUTOINCREMENT 予約ID
equipment_id TEXT NOT NULL FK - 機材ID
user_id INTEGER NOT NULL FK - ユーザーID
start_date DATE NOT NULL - - 利用開始日
end_date DATE NOT NULL - - 利用終了日
purpose TEXT NOT NULL - - 利用目的
notes TEXT NULL - - 備考
status TEXT NOT NULL - 'confirmed' 状態(confirmed/pending/completed/cancelled)
created_at DATETIME NOT NULL - CURRENT_TIMESTAMP 作成日時
updated_at DATETIME NOT NULL - CURRENT_TIMESTAMP 更新日時

6.6 lineworks_tokens(LINE WORKSトークン)

カラム名 データ型 NULL キー デフォルト 説明
id INTEGER NOT NULL PK AUTOINCREMENT トークンID
user_id INTEGER NOT NULL FK - ユーザーID
access_token TEXT NOT NULL - - アクセストークン
refresh_token TEXT NULL - - リフレッシュトークン
expires_at INTEGER NOT NULL - - 有効期限(UNIX時刻)
created_at DATETIME NOT NULL - CURRENT_TIMESTAMP 作成日時
updated_at DATETIME NOT NULL - CURRENT_TIMESTAMP 更新日時

6.7 notification_history(通知履歴)

カラム名 データ型 NULL キー デフォルト 説明
id INTEGER NOT NULL PK AUTOINCREMENT 通知ID
user_id INTEGER NOT NULL FK - ユーザーID
reservation_id INTEGER NULL FK - 予約ID
notification_type TEXT NOT NULL - - 通知種別
title TEXT NOT NULL - - 通知タイトル
message TEXT NOT NULL - - 通知メッセージ
sent_at DATETIME NOT NULL - CURRENT_TIMESTAMP 送信日時
delivery_status TEXT NOT NULL - 'pending' 配信状態
lineworks_message_id TEXT NULL - - LINE WORKSメッセージID
retry_count INTEGER NOT NULL - 0 再送回数

6.8 user_notification_settings(ユーザー通知設定)

カラム名 データ型 NULL キー デフォルト 説明
id INTEGER NOT NULL PK AUTOINCREMENT 設定ID
user_id INTEGER NOT NULL FK - ユーザーID
reservation_reminders BOOLEAN NOT NULL - 1 予約リマインダー有効
maintenance_notifications BOOLEAN NOT NULL - 1 メンテナンス通知有効
popular_equipment_alerts BOOLEAN NOT NULL - 0 人気機材アラート有効
system_announcements BOOLEAN NOT NULL - 1 システム通知有効
reminder_days_before INTEGER NOT NULL - 1 リマインダー日数
created_at DATETIME NOT NULL - CURRENT_TIMESTAMP 作成日時
updated_at DATETIME NOT NULL - CURRENT_TIMESTAMP 更新日時

6.9 bot_settings(Bot設定)

カラム名 データ型 NULL キー デフォルト 説明
id INTEGER NOT NULL PK AUTOINCREMENT 設定ID
setting_key TEXT NOT NULL UQ - 設定キー
setting_value TEXT NOT NULL - - 設定値
description TEXT NULL - - 説明
created_at DATETIME NOT NULL - CURRENT_TIMESTAMP 作成日時
updated_at DATETIME NOT NULL - CURRENT_TIMESTAMP 更新日時

6.10 qr_access_logs(QRアクセスログ)

カラム名 データ型 NULL キー デフォルト 説明
id INTEGER NOT NULL PK AUTOINCREMENT ログID
user_id INTEGER NULL FK - ユーザーID
equipment_id TEXT NULL FK - 機材ID
access_type TEXT NOT NULL - - アクセス種別
source TEXT NULL - - アクセス元
user_agent TEXT NULL - - ユーザーエージェント
created_at DATETIME NOT NULL - CURRENT_TIMESTAMP アクセス日時

7. インデックス定義

7.1 パフォーマンス向上インデックス

-- ユーザー関連
CREATE INDEX idx_users_lineworks_id ON users(lineworks_id);
CREATE INDEX idx_users_department ON users(department);

-- 機材関連
CREATE INDEX idx_equipment_category_id ON equipment(category_id);
CREATE INDEX idx_equipment_status ON equipment(status);
CREATE INDEX idx_equipment_name ON equipment(name);

-- 予約関連
CREATE INDEX idx_reservations_user_id ON reservations(user_id);
CREATE INDEX idx_reservations_equipment_id ON reservations(equipment_id);
CREATE INDEX idx_reservations_date_range ON reservations(start_date, end_date);
CREATE INDEX idx_reservations_status ON reservations(status);

-- LINE WORKS関連
CREATE INDEX idx_lineworks_tokens_user_id ON lineworks_tokens(user_id);
CREATE INDEX idx_lineworks_tokens_expires_at ON lineworks_tokens(expires_at);
CREATE INDEX idx_notification_history_user_id ON notification_history(user_id);
CREATE INDEX idx_notification_history_sent_at ON notification_history(sent_at);

7.2 複合インデックス

-- 機材検索用
CREATE INDEX idx_equipment_category_status ON equipment(category_id, status);
CREATE INDEX idx_equipment_subcategory_status ON equipment(subcategory_id, status);

-- 予約重複チェック用
CREATE INDEX idx_reservations_equipment_date ON reservations(equipment_id, start_date, end_date);

-- 通知配信用
CREATE INDEX idx_notification_status_type ON notification_history(delivery_status, notification_type);

8. ビュー定義

8.1 user_summary(ユーザー統合情報)

CREATE VIEW user_summary AS
SELECT 
    u.id,
    u.username,
    u.name,
    u.department,
    u.email,
    u.lineworks_id,
    u.last_login,
    u.login_count,
    COUNT(DISTINCT r.id) as total_reservations,
    COUNT(DISTINCT CASE WHEN r.status = 'confirmed' THEN r.id END) as active_reservations,
    MAX(r.created_at) as last_reservation_date
FROM users u
LEFT JOIN reservations r ON u.id = r.user_id
GROUP BY u.id;

8.2 equipment_usage_stats(機材利用統計)

CREATE VIEW equipment_usage_stats AS
SELECT 
    e.id,
    e.name,
    e.category_id,
    e.status,
    COUNT(DISTINCT r.id) as total_reservations,
    COUNT(DISTINCT r.user_id) as unique_users,
    AVG(julianday(r.end_date) - julianday(r.start_date)) as avg_rental_days,
    MAX(r.created_at) as last_reserved_date,
    ROUND(COUNT(DISTINCT r.id) * 100.0 / (SELECT COUNT(*) FROM reservations), 2) as popularity_percentage
FROM equipment e
LEFT JOIN reservations r ON e.id = r.equipment_id AND r.status = 'confirmed'
GROUP BY e.id;

9. トリガー定義

9.1 予約作成時通知トリガー

CREATE TRIGGER reservation_notification_trigger
AFTER INSERT ON reservations
FOR EACH ROW
WHEN NEW.status = 'confirmed'
BEGIN
    INSERT INTO notification_history (user_id, reservation_id, notification_type, title, message)
    VALUES (
        NEW.user_id,
        NEW.id,
        'reservation_created',
        '予約完了通知',
        '機材の予約が完了しました。'
    );
END;

9.2 ログイン回数更新トリガー

CREATE TRIGGER login_count_trigger
AFTER UPDATE OF last_login ON users
FOR EACH ROW
WHEN NEW.last_login IS NOT NULL AND (OLD.last_login IS NULL OR NEW.last_login > OLD.last_login)
BEGIN
    UPDATE users SET login_count = login_count + 1 WHERE id = NEW.id;
END;

10. システム制約・仕様

10.1 業務制約

  • 予約期間は最大30日間
  • 1ユーザーあたり同時予約可能数:10件
  • 予約開始3日前まで変更・キャンセル可能
  • メンテナンス中機材は予約不可

10.2 技術制約

  • データベースファイルサイズ上限:5GB
  • 1回のAPI呼び出し最大レスポンス時間:30秒
  • ファイルアップロード最大サイズ:50MB
  • 同時接続ユーザー数:100名

10.3 セキュリティ制約

  • JWTトークン有効期限:24時間
  • パスワード最小長:8文字
  • LINE WORKSトークン有効期限:API仕様に準拠
  • セッションタイムアウト:30分

この仕様書により、システムの運用・保守・拡張時の参考資料として活用できます。

(1-1/6)