Nexync連携アプリ第1弾 FleetFlow v2.2.2

目次
1. アプリケーション概要
1.1 名称の由来
社有車(Fleet)の予約から使用までの流れ(Flow)を管理するための役割を表しています。
1.2 概要
社内システム共通基盤のNexyncとシームレスに連携し、社員の車両予約、利用実績の記録、稼働状況の分析、車両の維持管理(車検・リース管理等)、および月次締め(監査対応)をオンライン・オフライン環境を問わずスムーズに行うことができます。
FleetFlowアプリ単独では使用できませんので、必ず基盤システムであるNexyncを先にインストールしてください。
1.3. 特徴
- 完全なインフラ非依存・ゼロコンフィグ導入
複雑な環境設定やデータベース作成スクリプトの実行は一切不要です。Webサーバー(PHP環境)にファイルを配置するだけで、自動的に隔離データベースが構築され即座に稼働を開始します。 - ゼロトラスト・セキュリティ(SSOTの確立)
クライアント端末から送信された金額や時刻、計算結果を一切信用しません。精算額の計算は常にサーバー側に記録されたタイムスタンプと単価マスターに照らし合わせて再計算される「信頼できる単一の情報源 (SSOT)」モデルを徹底しています。 - PWA & モバイル最適化
スマホからの利用に最適化されており、ホーム画面への追加(PWA)に対応。設定されたテーマカラーに合わせてアプリ用のカーアイコンが自動動的生成されます。
2. システムアーキテクチャ
2.1. 親システム(Nexync)との完全疎結合連携
MileageFlowは、親システム「Nexync」の内部構造や物理パスを一切知ることなく動作する完全疎結合設計を採用しています。
- Nexync Client SDK (nx-ui.js) 連携:
フロントエンドは window.Nexync の抽象インターフェースのみを通じて認証確認(SSO)、共通ログインカードの描画、グローバルモダールやトースト表示を行ないます。 - Nexync Server SDK (nx-core.php) 連携:
バックエンドは NexyncCore クラスを通じて、共通SSO認証チェック、CSRFトークン検証、IP解決(Trust Proxy対応)、レートリミット制御、ハッシュチェーン付き監査ログの記録を完全委譲しています。
2.2. フロントエンド(Client)
- 技術スタック: Vanilla JavaScript (ES Modules / ESM), Tailwind CSS
- 設計思想 (Pure MVC):
- Model (core.js): 状態管理(AppStateModel)、通信(DataService)、境界値検証(Validator)。
- View (ui.js): 純粋なDOM構築(DocumentFragment を活用し innerHTML に頼らないXSS無害化レンダリング)と画面制御(UIManager)。
- Controller (controllers.js): DOMやブラウザ固有APIから完全に分離されたピュアなビジネスロジック・オーケストレーター。
2.3. バックエンド(Server)
- 技術スタック: PHP 8.x, SQLite3
- 設計思想:
- データベース隔離: Web公開領域外(nexync_data/mileageflow.sqlite3)へデータを安全に隔離格納。
- 短時間ロック & バルク処理: SQLite特有の「Database is locked」を防ぐため、BEGIN EXCLUSIVE TRANSACTION によるミリ秒単位のロック制御と、500件単位の非同期チャンク再計算処理を実装。
2.4. セキュリティ仕様
- BOLA / IDOR(オブジェクトレベル認可欠如)対策:
全データの更新(PUT)および削除(DELETE)APIにおいて、リクエストされたレコードの所有者(employee_id)と現在のセッション所有者をDB上で照合。管理者ロールでない限り、他者のデータ操作を物理遮断します。 - DOM Based XSS の根絶: ユーザー入力値の展開において innerHTML や危険な文字列結合を排除し、document.createElement と textContent のみを用いたテキストレンダリングを採用。
- OOM / DoS 防御: 監査ログ送信時やファイルアップロード時において、巨大なペイロードによるメモリ枯渇攻撃を防ぐ厳格な文字列切り詰め(Truncation)とストリーミングサイズチェックを強制。
- CSRF防衛 & レートリミット: X-Nexync-CSRF-Token ヘッダーと Sec-Fetch-Site / Origin の多層チェック、および同一IPからの連続リクエストに対するアプリケーション層レートリミットを常時発動。
2.5. 動作環境
- Webサーバー: Apache または Nginx(PHP 8.0 以上が動作すること)
- 必須PHP拡張機能: pdo_sqlite, sqlite3, openssl, mbstring, json, finfo
- クライアント環境: Google Chrome, Safari, Microsoft Edge, Firefox 等のモダンブラウザ(ES6/ES Modules対応)
- 前提システム: 親ポータル「Nexync」環境下への配置
3. ディレクトリ構成
システムはセキュリティを担保するため、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. ダウンロード(v.2.2.2)
上記画像リンクからzipファイルをダウンロードしてください。
5. インストール手順(ゼロコンフィグ)
- ファイルの配置
親システム(Nexync)が設置されているサーバーの同一ドメインのnexyncディレクトリ直下のfleetディレクトリにダウンロードした zip ファイルを解凍してできた ファイル一式をアップロードします。
例: https://example.com/nexync/fleet/ - パーミッションの確認
Web公開領域外のデータ保存用ディレクトリ(../nexync_data/)に対し、Webサーバープロセス(www-data や apache 等)の書き込み権限が付与されていることを確認します。 - アクセスと自動初期化
ブラウザから index.html(例: https://your-domain.com/nexync/fleet/)にアクセスします。初回アクセス時に api/db.php が起動し、自動的に fleetflow.sqlite3 データベースおよび必要な全テーブル構造が生成されます。
6. 各機能と使い方
6.1 ダッシュボード
- ウィジェット: 全車両のリアルタイム稼働状況(稼働中車両の総台数、利用中、空車)のサマリーとリスト表示。
- アラート表示: 車検期限・リース期限接近のアラート件数を表示。
- アクションエリア: 現在のユーザーの「自身の現在利用中の予約」「直近の予定」を判定し、「出発を報告する」「到着を報告する」などのアクションボタンを動的に表示し、次のアクションを促すスマートウィジェット。
- スマホ報告用QR: スマートフォンからアクセスするためのアプリURLをQRコードで自動生成。
6.2 予約・カレンダー
- タイムライン表示: 横軸に時間、縦軸に車両を配置したタイムライン型カレンダー。稼働中の車両ごとの予約状況(予定:青線)と、実際の利用実績(利用中・完了:オレンジ線)を重ねて表示し、乖離を可視化。
- 絶対堅牢な新規予約: 対象車両、開始・終了日時、行き先、用件を入力して予約枠を確保。
- 制限事項: DoS/OOM耐性として1回の予約は最大24時間までに制限。月またぎの予約を禁止し、月次締め境界のすり抜けを完全防止。時間の逆転ブロック機能付き。
6.3 利用報告
- 出発・到着報告: モバイルファーストなUIによる出発時のオドメーター・行き先の入力、到着時のオドメーターの入力。
- オフライン対応: 通信ができない環境でもデータを暗号化してキューに保存し、オンライン復帰時に自律的にバックグラウンド同期を実行。
- オドメーター自己修復: オドメーター誤入力によるマスタ破壊を防ぐため、時間軸で最も新しい履歴を採用して車両マスタを修復。
6.4 利用履歴
- 過去の利用記録(実績)の検索・一覧表示。
- 月次ロックが掛かっている履歴には鍵アイコンが表示され、保護されていることが視認可能。
6.5 利用月報
- 帳票印刷: 対象月・対象車両ごとの利用実績をA4帳票フォーマットとして印刷(PDF保存)可能。
- 月次ロック(※管理者以上): 監査や締め処理のため、特定の月のデータを凍結し、API経由での編集・削除を物理的に遮断。対象月は厳格な YYYY-MM フォーマット検証によりすり抜けを防止します。
6.6 稼働分析レポート (管理者以上)
- 営業日数ベースの月間稼働率の算出。月間稼働率を棒グラフ(Chart.js)で視覚化し、遊休車両の特定やコスト削減を支援。
6.7 車両マスタ管理 (管理者以上)
- 車両のライフサイクル管理: 車両の登録・編集・削除。稼働中フラグ(is_active)による論理削除。利用実績が残っている車両の物理削除は安全装置によりブロックされ、除外処理へと誘導。
- v2.0.0より、部門管理者も担当車両の管理が行えるように権限を拡張しました。
6.8. ユーザー権限とアクセス制御
システムには3つの権限レベルが存在し、Nexync社員マスタの権限に依存して制御されます。
| 権限レベル | 役割 | 利用可能な機能 (画面) |
|---|---|---|
| 一般ユーザー | 車両の利用者 | ・ダッシュボード ・予約・カレンダー ・利用報告 ・利用履歴 ・利用月報(帳票印刷)・マイページ |
| 管理者 | 部門の管理職など | 一般ユーザーの全機能に加えて以下: ・車両マスタ管理 (追加/編集/削除/除外) ・稼働分析レポート ・月次データロック (締め) ・他者の予約キャンセル・実績修正 |
| システム管理者 | システム運用者 | 管理者の全機能に加えて以下: ・データのバックアップ・復元 ・監査ログ閲覧 ・システム設定情報の閲覧 |
6.9. バックアップ・復元(システム管理者専用)
- バックアップ & 復元: データベース(.sqlite3)の即時エクスポートおよびアトミックな上書き復元が可能です。
6.10. 監査ログ(システム管理者専用)
- 改ざん検知機能付き監査ログ: システム内の重要操作や認証イベントは、前後のハッシュ値が鎖状につながる「改ざん検知ハッシュチェーン」として監査ログに安全に記録されます。
6.11. システム設定(システム管理者専用)
- 現在のシステム設定およびSDKの稼働バージョン情報を表示。
7. 変更履歴
Version 2.2.0 – 2026年7月23日
- 初回公開バージョン
Version 2.2.1 – 2026年7月26日
- 利用月報および帳票印刷において、過去の月を指定した際に当時のオドメーターではなく「現在の最新オドメーター」が表示されてしまう不具合を修正。
Version 2.2.2 – 2026年8月9日
- 利用月報の印刷時に、右側がはみ出してしまう現象、および複数ページにまたがるデータの下部が見切れて(1ページ目しか)印刷されない不具合を修正。
- システム設定のシステム情報画面において、親システム(Nexync本体)のバージョン情報が「取得中」のまま反映されていなかった不具合を修正。
8. 免責事項・お問い合わせ
- 本ソフトウェアはフリーウェアとして提供されています。ご利用にあたっては組織内のセキュリティ方針に沿って動作確認を行った上でご活用ください。
- 本ソフトウェアあるいはそれに関係して発生したいかなる損害についても、ソフト制作者(Assy)は責任を一切負いません。
- 不具合等のバグ報告や意見などは、メール(info@aizack.net)もしくはウェブサイトのコメントからお願いいたします。
最近のお気に入りの曲
「DOUBLE-DEALER(ダブル・ディーラー)」は、CONCERTO MOONの島紀史(G)とSABER TIGERの下山武徳(Vo)によって2000年に結成された日本のヘヴィメタルバンド。
その中でこの曲 ”NO REASON” は好きだなあ。
