Nexync連携アプリ第1弾 FleetFlow v2.2.0
目次
1. アプリケーション概要
1.1 名称の由来
社有車(Fleet)の予約から使用までの流れ(Flow)を管理するための役割を表しています。
1.2 概要
社内システム共通基盤のNexyncとシームレスに連携し、社員の車両予約、利用実績の記録、稼働状況の分析、車両の維持管理(車検・リース管理等)、および月次締め(監査対応)をオンライン・オフライン環境を問わずスムーズに行うことができます。
FleetFlowアプリ単独では使用できませんので、必ず基盤システムであるNexyncを先にインストールしてください。
2. 機能・画面構成
2.1 ダッシュボード
- ウィジェット: 全車両のリアルタイム稼働状況(稼働中車両の総台数、利用中、空車)のサマリーとリスト表示。
- アラート表示: 車検期限・リース期限接近のアラート件数を表示。
- アクションエリア: 現在のユーザーの「自身の現在利用中の予約」「直近の予定」を判定し、「出発を報告する」「到着を報告する」などのアクションボタンを動的に表示し、次のアクションを促すスマートウィジェット。
- スマホ報告用QR: スマートフォンからアクセスするためのアプリURLをQRコードで自動生成。
2.2 予約・カレンダー
- タイムライン表示: 横軸に時間、縦軸に車両を配置したタイムライン型カレンダー。稼働中の車両ごとの予約状況(予定:青線)と、実際の利用実績(利用中・完了:オレンジ線)を重ねて表示し、乖離を可視化。
- 絶対堅牢な新規予約: 対象車両、開始・終了日時、行き先、用件を入力して予約枠を確保。
- 制限事項: DoS/OOM耐性として1回の予約は最大24時間までに制限。月またぎの予約を禁止し、月次締め境界のすり抜けを完全防止。時間の逆転ブロック機能付き。
2.3 利用報告
- 出発・到着報告: モバイルファーストなUIによる出発時のオドメーター・行き先の入力、到着時のオドメーターの入力。
- オフライン対応: 通信ができない環境でもデータを暗号化してキューに保存し、オンライン復帰時に自律的にバックグラウンド同期を実行。
- オドメーター自己修復: オドメーター誤入力によるマスタ破壊を防ぐため、時間軸で最も新しい履歴を採用して車両マスタを修復。
2.4 利用履歴
- 過去の利用記録(実績)の検索・一覧表示。
- 月次ロックが掛かっている履歴には鍵アイコンが表示され、保護されていることが視認可能。
2.5 利用月報
- 帳票印刷: 対象月・対象車両ごとの利用実績をA4帳票フォーマットとして印刷(PDF保存)可能。
- 月次ロック(※管理者以上): 監査や締め処理のため、特定の月のデータを凍結し、API経由での編集・削除を物理的に遮断。対象月は厳格な YYYY-MM フォーマット検証によりすり抜けを防止します。
2.6 稼働分析レポート ※管理者以上
- 営業日数ベースの月間稼働率の算出。月間稼働率を棒グラフ(Chart.js)で視覚化し、遊休車両の特定やコスト削減を支援。
2.7 車両マスタ管理 ※管理者以上
- 車両のライフサイクル管理: 車両の登録・編集・削除。稼働中フラグ(is_active)による論理削除。利用実績が残っている車両の物理削除は安全装置によりブロックされ、除外処理へと誘導。
- v2.0.0より、部門管理者も担当車両の管理が行えるように権限を拡張しました。
3. ユーザー権限とアクセス制御
システムには3つの権限レベルが存在し、Nexync社員マスタの権限に依存して制御されます。
| 権限レベル | 役割 | 利用可能な機能 (画面) |
|---|---|---|
| 一般ユーザー | 車両の利用者 | ・ダッシュボード ・予約・カレンダー ・利用報告 ・利用履歴 ・利用月報(帳票印刷)・マイページ |
| 管理者 | 部門の管理職など | 一般ユーザーの全機能に加えて以下: ・車両マスタ管理 (追加/編集/削除/除外) ・稼働分析レポート ・月次データロック (締め) ・他者の予約キャンセル・実績修正 |
| システム管理者 | システム運用者 | 管理者の全機能に加えて以下: ・データのバックアップ・復元 ・監査ログ閲覧 ・システム設定情報の閲覧 |
4. システムアーキテクチャ
4.1 フロントエンド
- 100% MVC 準拠:
- View (ui.js): 完全に受動的なビュー(Passive View)。DOM操作、HTML生成、ブラウザAPIを隠蔽。
- Model (core.js): AppStateModel による状態とドメインロジックのカプセル化。DataService における UI Agnostic(UI不可知性)なデータアクセスとキャッシュ制御(Stale-while-revalidate パターン)。
- Controller (controllers.js): View からのイベントを受け取り、Model へ委譲するだけの薄層ファサード。
- DI (依存性注入) コンテナ: AppManager がエントリーポイントとして各モジュールをインスタンス化・注入し、静的な密結合を排除。
- フェイルセーフブートストラップ: アプリ起動時(main.js)の予期せぬエラー時にローディングを強制解除し、フリーズを防止。
4.2 バックエンド (PHP 8.x)
- データベース: SQLite3 (fleetflow.sqlite3)
- 絶対的な排他制御: BEGIN EXCLUSIVE TRANSACTION をすべての書き込み・更新APIに適用し、レースコンディション(競合状態)を完全排除。
- マイクロバッチ型ガベージコレクション: 監査ログ (audit.php) において、10%の確率で発動する自己洗浄型GCを搭載し、排他ロック時間を極小化しつつDBの肥大化を防止。
- ゼロコンフィグ・マイグレーション: db.php 内部の PRAGMA user_version 判定により、システム起動時に自動的にテーブル生成・カラム追加が行われます。独立した初期化スクリプトは不要です。
4.3 セキュリティ・データベース仕様
- データベースファイル(.sqlite3)および SSO暗号鍵(.pem)は、Webサーバーの公開ディレクトリ(ドキュメントルート)よりも上位の階層(../../../../nexync_data)に保存され、情報漏洩を物理的に遮断。
- すべての状態変更(作成・更新・削除・除外)に対し、変更前と変更後の差分ペイロードを含む詳細な監査証跡(Audit Log)を記録。
5. ディレクトリ・ファイル構成
システムはセキュリティを担保するため、Webアクセスが不可能な「非公開領域」と、ブラウザからアクセスされる「公開領域」に分かれて配置されます。
/var/www/ (Web公開領域外:外部アクセス絶対不可能エリア)
├── nexync_data/ # 🛡️ 物理データおよび暗号鍵の一括隔離ディレクトリ
│ ├── fleetflow.sqlite3 # FleetFlow データベースファイル本体
│ └── sso_keys/ # 🔐 暗号鍵保管庫
│ ├── private_key.pem # 【親専有】署名用秘密鍵 (RS256)
│ └── public_key.pem # 【子共有】検証用公開鍵 (RS256)
│
└── public_html/ (または htdocs) # 💻 Web公開ドキュメントルート
└── nexync/ # 親システム:Nexync本体
│└── index.html # Nexync 管理画面 (SPA)
│
└── fleet/ # 子システム:FleetFlow (親の直下)
├── index.html # フロントエンド本体 (SPAレイアウト・テンプレート)
├── manifest.json # PWAマニフェストファイル
├── sw.js # Service Worker (バイパスルーティング・キャッシュ制御)
├── icon-512×512.png # PWA用アプリアイコン
│
├── assets/ # フロントエンドリソース
│ └── js/ # JSモジュール群
│ ├── main.js # アプリ起動エントリーポイント・フェイルセーフブート
│ ├── core.js # Model層 (AppStateModel, DataService, Utils, Validator)
│ ├── ui.js # View層 (UIManager, UIBuilder, テンプレートレンダリング)
│ └── controllers.js # Controller層 (各画面ロジック・DIコンテナ AppManager)
│
└── api/ # FleetFlow 固有バックエンドAPI
│ ├── db.php # DB接続共通処理・自動マイグレーション・権限ヘルパー
│ ├── vehicles.php # 車両マスタ CRUD
│ ├── reservations.php # 予約情報・履歴 CRUD・オドメーター自己修復
│ ├── settings.php # アプリ固有設定 (バージョン, 会社名など)
│ ├── backup.php # DB エクスポート・インポート処理
│ ├── audit.php # 監査ログ参照・自己洗浄型GC API
│ ├── locks.php # 月次ロック(締め処理)管理・フォーマット検証 API
│ └── sync_icon.php # PWAアイコン動的生成・同期処理エンドポイント
│
└── doc/ #ドキュメント
├── CHANGELOG.md # バージョン変更履歴
└── Basic Specification.md # 基本仕様書
(※ 実際の SQLite データベースファイルや暗号鍵は、Web非公開領域 /var/www/nexync_data/ に隔離保存されます)
6. ダウンロード
- 上記画像リンクからzipファイルをダウンロードしてください。
7. インストール
Step 1: ファイルの配置
ダウンロードした zip ファイルを解凍してできた ファイル一式を、Nexync をインストールしたディレクトリの直下の fleet フォルダ(5.ディレクトリ・ファイル構成参照)にアップロードします。
nexync 直下のディレクトリにアップロードしないとNexync側で認識しませんのでご注意ください。
/var/www/html/
├── nexync/
└── fleet/ <– このフォルダに解凍してできたファイルを丸ごとアップロード
Step 2: アクセス
NexyncのURL(例: https://your-domain.com/nexync/)にアクセスするとダッシュボードにFleetFlowのアイコンカードが表示されます。
または、直接ブラウザからFleetFlowのURL(例: https://your-domain.com/nexync/fleet/)にアクセスしても可能です。(Nexyncにログイン済みだと自動ログインします)
Step 3: 使用してみてください
システム管理者でログインして車両マスタ管理から車両を追加してください。
ダッシュボードから”今すぐ利用開始”したり、予約カレンダーから予約してから使用開始して、使用が終わって帰社したら到着を報告するだけで履歴が登録されて管理することができます。
最近のお気に入りの曲
「DOUBLE-DEALER(ダブル・ディーラー)」は、CONCERTO MOONの島紀史(G)とSABER TIGERの下山武徳(Vo)によって2000年に結成された日本のヘヴィメタルバンド。
その中でこの曲 ”NO REASON” は好きだなあ。
