nariwai — 業務支援システム

nariwai は、ネット接続が不安定な場所や接続できない場所でも、顧客・案件・作業記録の閲覧と登録ができるオフラインファーストの業務記録デスクトップアプリ。データは端末内の SQLite に保存し、接続時に他の端末と差分を同期する。Tauri・Vue・SQLite で試作(POC)中。構想・課題・ロードマップを掲載。

ネット接続が不安定な場所や、接続できない場所でも使える業務記録アプリ。データは端末内の SQLite に保存し、接続できたときに他の端末と差分を同期する。現在は試作(POC)の段階で、非公開。

機能

  • オフラインで閲覧・登録できる:データは端末内の SQLite に保存する。操作のたびにサーバーへ接続しないので、通信できない場所でも顧客・案件・作業記録の閲覧と登録ができる。
  • 接続時に端末間で差分を同期:変更は change_log テーブルに記録しておき、接続時に他の端末と差分をやり取りする。同じ LAN 内では WebRTC で端末同士が直接通信するため、業務データはサーバーを経由しない。削除は論理削除。
  • 同期の処理は画面側で意識しない:画面は通常の登録・更新を行うだけで、change_log への記録は自動で行う。同じレコードを 2 台で更新した場合は、どの端末でも同じ側が残るように判定し、もう一方は競合として保存する。競合は一覧で確認し、どちらを採用するか選び直せる。

CONCEPT

Phase 1 時点の設計方針。

  • 対象業務を絞る:汎用の業務アプリにはせず、実際の業務で利用できるケースをベースとして機能を実装。
  • アカウントは個人単位、データはチーム単位:・アカウントは 1 人 1 つ。複数のチームやプロジェクトに参加できる ・チーム内でデータを共有・同期する ・作業記録はプロジェクト(PJ)に紐づける ・認証は生体認証。非対応の端末はパスワード + TOTP
  • プラグイン機構:業務ごとの画面やテーブルを後から追加できる構成にする。Phase 1 では機構の土台だけを作り、プラグイン自体は作らない。

RISKS

外部レビューで受けた指摘と、現在のコードの課題。

  • チームを抜けたユーザーの端末にデータが残る:データを端末に保存するため、チームを抜けた後も端末内のデータは残る。その端末がオフラインのままだと、管理側から削除できない。 対策案:最後のオンライン認証から一定期間(既定 7 日、チームごとに変更可)を過ぎたら、ローカル DB をロックする。ロック前には警告を出す。DB の暗号化と、接続時のデータ削除は Phase 2 で実装する。チーム ID の列は、後から全テーブルを変更しなくて済むよう Phase 1 で追加する。

ROADMAP

  • 同期の不具合修正(作業中):機能追加より先に、同期でデータが壊れないようにする。 ・revision の採番を画面からリポジトリ層へ移す ・競合の判定方法を統一し、競合一覧画面を作る ・レコードの保存と change_log の書き込みを 1 トランザクションにする ・チーム ID 列の追加、同期の認可 ・前回値の引き継ぎ、入力漏れチェックなどの入力補助
  • チーム利用への対応:・アカウント・チーム・PJ と認証 ・データの有効期限(ロック・暗号化・脱退時の削除) ・専用のシグナリングサーバー、差分のみの同期
  • 機能拡張:・項目単位のマージ、履歴からの復元 ・プラグイン

OPEN_QUESTIONS

実装を進める前に決める必要がある事項。

  • データモデル:現在の試作は「顧客 → 案件 → 作業記録」。点検業務に絞る場合は「現場 → 設備 → 点検票 → 点検記録」になり、別案として全データを PJ に紐づける構成もある。どれにするかは未定。
  • ロックまでの猶予期間:既定は 7 日の予定。長期の出張や山間部での作業では足りない可能性があるため、上限も含めて検討中。
  • ローカル DB の暗号化方式:DB 全体の暗号化、特定項目のみの暗号化、OS のキーストアの利用の 3 案がある。現在使用している SQLite のプラグインは DB 全体の暗号化に対応していないため、検証してから決める。

使用技術

Tauri v2、Vue 3、Quasar、TypeScript、SQLite、PeerJS (WebRTC)、pnpm workspace

バージョン

2026.04 – 構想・POC 開発中(非公開)