RTR - 紙の帳票をローカルサーバーに置き換える

管理者のPCを社内イントラネット向けのフォームサーバーに変えるWindowsデスクトップアプリを作りました。クラウド不要、アカウント不要、エンドユーザーのインストール作業も不要です。

Intermediate

Akemaxでインターンをしていた時、日々の報告業務の多くがまだ紙ベースで行われていることに驚きました。工場の現場で報告書を提出する必要がある場合、階下まで歩いて行き、紙の帳票を取り、手書きで記入して提出しなければなりませんでした。それでも機能はしていましたが、時間がかかり、業務の妨げにもなっていました。私はずっと考えていました:フォームをサーバーに置けばいいのではないか、と。

そのアイデアがずっと頭に残っていました。これらのフォームを使う人たちはプログラマーではありません。ソフトウェアをインストールしたり、アカウントを作成したり、新しいツールの使い方を覚えたりしたくはないのです。ただフォームに記入して、仕事に戻りたいだけです。だから、私が作るものは極めてシンプルでなければなりませんでした - URLを開き、フォームを選び、記入して、送信する。

そこから生まれたのがRTR (Real-Time Reporting)です。

ステップ1:RTRが実際に行うこと

アプリを起動すると、管理者のデスクトップ上で動作し、ローカルサーバーを作成します。同じネットワーク上のユーザーは管理者のURLにアクセスしてフォームページを開き、フォームを選択し、日付と必要な情報を入力して送信できます。

管理者アプリからは、送信されたフォームを閲覧したり、必要に応じてフォームを作成・修正したりできます。

# The architecture in a nutshell:
┌─────────────────────┐     IPC only     ┌──────────────┐
│   Admin Panel (UI)  │ ◄──────────────► │   Main Process│
│   Electron Window   │                  │   (Node.js)   │
└─────────────────────┘                  └──────┬───────┘
                                                │
                                         ┌──────┴───────┐
                                         │  Express HTTP │
                                         │  Port 8080    │
                                         │  LAN only     │
                                         └──────┬───────┘
                                                │
                              ┌─────────────────┼─────────────────┐
                              │                 │                 │
                         Phone/Tablet      Desktop PC       Any Browser
                         on the LAN        on the LAN       on the LAN

ステップ2:ユーザーアカウントを使わない理由

RTRは個別のユーザーアカウントを使用する代わりに、各フォーム送信に使用されたデバイスのMACアドレスを記録します。企業では通常、ネットワークに接続されるデバイスの数が決まっているため、従業員にログインを求めることなく、送信をデバイスに紐づけるシンプルな方法となります。

このアプローチを採用した理由は、帳票の精神に則り、誰でもアカウントを作成したりログインしたりすることなく、フォームを手に取って記入できるべきだと考えたからです。

ステップ3:ネットワークによるセキュリティ

RTRはイントラネットでの使用を前提に設計されています。ローカルネットワーク外からの接続を受け付けないため、セキュリティは基本的にRTRが動作しているネットワーク自体のセキュリティに依存します。

管理パネル自体はネイティブのElectronウィンドウであり、プロセス間通信のみを通じて通信します。ネットワークソケットは一切開かれないため、ファイアウォールの設定に関係なくLANからアクセスすることはできません。フォームサーバーはLAN側のネットワークアダプターにのみバインドし、ホワイトリストに登録されたIPアドレスまたはCIDR範囲へのアクセスを制限します。

ステップ4:主な機能

  • フォームビルダー - さまざまな質問タイプを使って報告フォームを作成・修正
  • 送信ブラウザ - 収集された回答を閲覧、フィルタリング、検索
  • CSVエクスポート - Excel、Google Sheets、その他のデータツールで分析するために送信データをエクスポート
  • IPホワイトリスト - フォームにアクセスして送信できるデバイスを正確に制御
  • デバイストラッキング - MACアドレスの記録により送信をデバイスに紐づけ
  • 完全ローカル - すべてのデータは管理者のマシン上のSQLiteに保存され、クラウドは不要

ステップ5:技術スタック

RTRは以下の技術で構築されています:

  • Electron - 管理パネル用のネイティブデスクトップシェル
  • Node.js + Express - フォーム配信用の軽量HTTPサーバー
  • SQLite - 設定不要のローカルデータベース
  • NSIS - Windowsインストーラーのパッケージング

ステップ6:ダウンロード

RTR v0.1.0をダウンロード (Windows x64)

または、ソースからクローンしてビルド:

git clone https://github.com/petermurrayx/RTR--Real-Time-Reporting.git
cd RTR--Real-Time-Reporting
npm install
npm start        # development mode
npm run build    # build the installer
注意: インストーラーはWindows 10/11 (x64) 用です。初回起動時にWindowsファイアウォールがLANアクセスの許可を求めます。他のデバイスがフォームサーバーにアクセスできるよう、許可してください。

最新のAI技術を使っているわけではありませんが、このプロジェクトは私がコンピュータサイエンスの道に進んだ原点を思い出させてくれます:テクノロジーを使って人々の生活をより便利にし、より効率的に働けるようにし、物事を成し遂げる手助けをすること。

お時間があれば、ぜひチェックしてみてください。MITライセンスなので、誰でもコードを使用・修正できます。