IndustryFlow Hub(IF-HUB)は、製造設備の時系列データを安全かつ柔軟に管理・提供するためのデータハブサーバーです。PI Systemをはじめとする産業用データウェアハウスの標準APIと解析サービスの間に位置するオープンソースの中間層として設計されており、各種制約により難しいサーバー側の直接的なカスタマイズを、容易かつ効率的に実現します。
IF-HUBは以下の主要コンポーネントで構成されています:
- IF-Hub Core (
src/
) - メインアプリケーション(Node.js/Express) - RESTful API - 統一されたデータアクセスインターフェース
-
Fetcher (
fetcher/
) - データ抽出・条件フィルタリング機構- 設備単位・条件付きでのタグ/gtagデータ抽出
- CSVフォーマットでの出力機能
- 柔軟な条件指定とフィルタリング
-
Ingester (
ingester/
) - PI Systemデータ取り込み機構- 上流データウェアハウス(PI System等)からの自動データ取り込み
- スケジュール実行による継続的データ同期
- バッチ処理によるデータ品質保証
- gTag システム (
gtags/
) - 仮想タグ生成・計算処理 - プラグインシステム (
plugins/
) - analyzer、notifier、presenter型プラグインによる拡張機能 - オフライン配布 (
offline-deployment/
) - 顧客環境移行ツール
IF-HUBは以下の課題を解決します:
- 産業用データウェアハウスの制約を解消する中間層:セキュリティや保守性の理由から、直接的なカスタマイズが困難な産業用データウェアハウスのAPIに対し、中間層として柔軟な拡張性を提供
- 時系列データの高度な加工と変換の実現:移動平均、サンプリング、各種アルゴリズムを用いた補完処理、統計変換(Zスコア、偏差計算)などを自由に適用可能
- 統一されたデータアクセス手段の提供:多様なバックエンドシステムからのデータ取得を標準化し、クライアント開発を効率化
- 時系列データの一元管理:複数のデータソースからの時系列データを統合して管理
- 統一されたRESTful API:一貫性のあるデータアクセスとオープンソース化による自由なカスタマイズ
- 仮想タグ(gtag)生成:複数データの演算や組み合わせによる新たな仮想的指標を作成(Python、Rust、Go、C/C++対応)
- 柔軟なデータ処理:移動平均、Z-score、偏差値などの統計処理をAPI経由で直接適用
- 多言語対応:タグ名や属性の多言語表示名マッピング機能
- データフェッチング機能(Fetcher):設備単位・条件付きでのタグ/gtagデータ抽出機構
- 上流DB連携機能(Ingester):上流のデータウェアハウス(PI System etc.)からの自動データ取り込み
- Docker対応:コンテナ環境による容易なデプロイとスケーラブルな運用
詳細な機能説明については、APIマニュアルと運用マニュアルをご参照ください。
既存の産業用データウェアハウスシステムは強力ですが、しばしば専門知識を持つ一部のユーザーだけがアクセス可能です。IF-HUBはこれらのシステムから抽出したデータをより使いやすい形で提供し、社内のより多くの部門・担当者がデータを活用できる環境を構築します。
本番稼働中の産業用データシステムに直接アクセスすることなく、安全なデータアクセス・加工を実現します。これにより、クリティカルなシステムに影響を与えることなく、新しい分析ツールや可視化ダッシュボードを開発できます。
IndustryFlow Hubを介することにより、製造設備からの様々な時系列データにIoT等から収集されるセンサーデータや画像データなどを統合可能とし、マルチモーダルかつ高度な予測システムの実現のための基盤を提供します。
モバイルアプリやWebダッシュボードなど、設備データを活用したカスタムアプリケーション開発のためのバックエンド基盤として機能します。統一されたAPIを通じて、フロントエンド開発を大幅に効率化します。
IF-HUBは、上流の産業用データウェアハウス(PI Systemなど)との統合において、意図的に粗結合設計を採用しています。これには以下の重要な理由があります:
- 上流システムの仕様変更に対する耐性 - 大規模DBとの直結合では、上流の仕様変更の影響を大きく受けてしまいます。CSVファイルを介した粗結合やbatchwiseなデータ取得により、この影響を最小限に抑えています。
- セキュリティバウンダリの明確化 - 直接接続ではなくファイル転送やRESTful API経由のデータ交換は、セキュリティ境界を明確にし、重要なシステムへの不正アクセスリスクを軽減します。
- インターフェース変更の柔軟性 - 接続方式の変更や機能拡張を、上流システムに依存せず独立して行うことができます。
- 一時キャッシュによる安定性向上 - データをローカルデータベースにキャッシュすることで、処理の安定性、レスポンス速度の改善、外部システム障害時の継続運用が可能になります。
この設計により、IndustryFlow Hubは上流システムの制約から解放され、自由度の高いデータ加工・分析機能を提供できます。加えて、拡張プロセッサを通じて多様なプログラミング言語(Python、Rust、Go、C/C++など)による高度なデータ処理も柔軟に組み込むことができます。
IF-HUBでは、以下の点においてパフォーマンスと拡張性を継続的に向上させています:
-
効率的なデータ処理:
- 処理関数の最適化によるパフォーマンス向上
- 大規模データセットでも効率的に動作
-
モジュール化されたデータ処理:
- 役割ごとに明確に分けられたモジュール構造
- 新しいアルゴリズム追加が容易な設計
-
一貫したAPI設計:
- すべてのエンドポイントで一貫した処理オプションを提供
- 汎用パラメータによる柔軟なデータ取得と処理
以下は、IF-HUBにおけるデータの流れを示しています:
graph TB
Z[産業用データウェアハウス] -->|データエクスポート| A[設備データCSV]
Z -->|API経由| L[Ingester]
A -->|static_equipment_dataフォルダに配置| B[ファイル監視システム]
L -->|CSVファイル生成| A
L -->|タグメタデータCSV生成| G[タグメタデータCSV]
G -->|tag_metadataフォルダに配置| H[メタデータインポーター]
I[gtag定義] -->|gtagsフォルダに配置| J[gtag処理]
B -->|変更検出| C[CSVインポーター]
C -->|キャッシュ/データ格納| D[(IF-HUB DB)]
H -->|表示名・単位情報| D
J -->|計算タグ| D
V[振動データ] -->|センサーデータ| D
IMG[画像データ] -->|画像解析| D
IOT[IoTセンサー] -->|マルチモーダルデータ| D
D -->|データ取得| E[RESTful API]
E -->|生データ| F[クライアント/解析サービス]
E -->|移動平均処理| F
E -->|Z-score計算| F
E -->|偏差計算| F
E -->|カスタム処理| F
E -->|データ取得| M[Fetcher]
M -->|CSV出力| F
IndustryFlow Hubは現在、主にstatic_equipment_data
フォルダに設置された静的CSVファイルからのデータ取り込みをサポートしています。これは産業用データウェアハウスからエクスポートされたデータを想定しており、意図的な粗結合設計となっています。加えて、特定のユースケースに応じて産業用データシステムのAPIを利用したbatchwiseなデータ取得機能も実装を計画しており、一時キャッシュによる安定性とレスポンス速度の改善を実現していきます。将来的には、これらの機能をさらに拡張しつつも、柔軟性とシステム間の独立性を保つ設計思想を維持します。
- Node.js 18以上
- npm または yarn
- (オプション)Docker & Docker Compose
# リポジトリのクローン
git clone https://github.com/toorpia/if-hub.git
cd if-hub
# 依存関係のインストール
npm install
# 開発環境での起動(start-if-hub.shを使用)
./start-if-hub.sh
# または本番環境での起動
./start-if-hub.sh prod
# 直接起動(npm)
npm start
# Docker環境での起動
cd docker
docker-compose up -d
-
サーバーの起動確認
# ブラウザで以下にアクセス http://localhost:3001/api/status
-
テストデータの生成(必要に応じて)
npm run generate-data
-
設備データの配置
- CSVファイルを
static_equipment_data/
フォルダに配置 - システムが自動的に検出・取り込み(1分以内)
- CSVファイルを
顧客環境やネットワーク接続のない環境への配布には、専用の配布パッケージシステムを使用します。
- 自動パッケージ生成: 最適化された配布パッケージを自動作成
- ネットワーク不要: インターネット接続なしで完全動作
- 簡単セットアップ: 3ステップでの自動セットアップ
- PI System統合: 自動データ取り込み機能付き
# 開発環境: パッケージ作成
./offline-deployment/deployment-tools/create-package.sh
# 顧客環境: 3ステップ実行
tar -xzf if-hub-*.tgz && cd if-hub
./configure-pi.sh
./setup.sh
完全な手順・設定・トラブルシューティング → OFFLINE_DEPLOYMENT_GUIDE.md
IF-HUBは以下の技術コンポーネントで構成されています:
- バックエンド: Node.js + Express.js
- データストレージ: ローカルデータベース(デフォルト)、一時キャッシュとして機能、他DBへの拡張可能
- データインポート: CSVパーサー + ファイル監視、API経由batchwiseデータ取得
- APIレイヤー: RESTful API(JSON形式)、統一されたエンドポイント設計
- 拡張エンジン: 外部プロセッサ対応
- Python: 統計処理、機械学習、データサイエンス
- Rust/Go: 高性能な計算処理、メモリ効率の高い処理
- C/C++: レガシーコードの統合、極めて高速な処理
- その他: カスタム言語プロセッサの追加も可能
これらのコンポーネントは疎結合な設計となっており、必要に応じて個別に拡張・置換することができます。たとえば、SQLiteをTimescaleDBに置き換えたり、新しい種類の外部プロセッサを追加したり、データの取得方法をカスタマイズすることが可能です。
IF-HUBは以下の主要ディレクトリで構成されています:
/
├── src/ # メインアプリケーション(Node.js/Express)
├── fetcher/ # データ抽出・条件フィルタリング機構
├── ingester/ # PI Systemデータ取り込み機構
├── gtags/ # 仮想タグ定義と計算スクリプト
├── docker/ # Docker関連設定ファイル
├── docs/ # プロジェクトドキュメント
├── static_equipment_data/ # 設備データCSV格納ディレクトリ
├── tag_metadata/ # タグメタデータ格納ディレクトリ
├── db/ # データベースファイル
└── logs/ # ログファイル
static_equipment_data/
: 設備データCSVファイルを配置(自動検出・インポート)gtags/
: 仮想タグ(計算タグ)の定義を格納tag_metadata/
: タグの表示名や単位情報を格納docker/
: 開発環境・本番環境用のDocker設定
詳細なファイル構成については、開発者ガイドをご参照ください。
- 運用マニュアル - インストール、設定、運用の詳細
- APIマニュアル - APIエンドポイントの詳細と使用例
- 開発者ガイド - アーキテクチャ、コード詳細、拡張方法
- プラグインシステムガイド - プラグイン開発・運用の詳細
- 高次元時系列データのリサンプリング原則 - 時系列データの前処理と解析における理論的基礎
IF-HUBは現在SQLiteをデータストレージとして使用しています。これは小〜中規模の導入に適していますが、より大規模なデプロイメントでは、以下のエンタープライズグレードのデータベースへの移行も検討できます:
-
TimescaleDB - PostgreSQLの拡張として、高度な時系列機能を提供
- 長所: PostgreSQLの拡張であるため、SQLの知識がそのまま活用できる。標準SQLのみならず時系列特有の機能も充実。
- 適用例: 既存のSQLスキルを活用しつつ、時系列データの拡張性を求めるケース
-
InfluxDB - 時系列データに特化した高性能データベース
- 長所: IoTや監視向けに特化した時系列データベース。高い書き込みパフォーマンスと効率的なストレージ。
- 適用例: 大量のセンサーデータを高速に取り込む必要があるケース
-
QuestDB - SQLインターフェースを持つ高速な時系列データベース
- 長所: 極めて高速なクエリ実行と低いリソース消費。SQLサポートにより学習曲線が緩やか。
- 適用例: リアルタイム分析や高速クエリが重要なケース
今後のリリースで、これらのデータベースへのプラグイン方式でのサポートを追加する予定です。
IF-HUBは継続的に進化するプロジェクトであり、以下の機能拡張を計画しています:
- API連携の拡充 - より多様な産業用データシステムとのAPIベース連携機能(OPC UA、MQTT、PI Web API等)
- キャッシュ最適化 - 一時キャッシュのパフォーマンス最適化とデータ保持ポリシーの柔軟な設定
- リアルタイム処理 - streambased処理オプションの追加によるリアルタイムデータ変換
- インタラクティブな可視化 - 簡易なデータ探索・分析ダッシュボード
これらの機能は、ユーザーニーズとコミュニティフィードバックに基づいて優先順位を決定し、段階的に実装していく予定です。
このプロジェクトは Business-Friendly License (BFL) のもとで提供されています。
ライセンス形態:Business-Friendly License (BFL)
- 商用利用:商用環境での利用には、別途ライセンス契約が必要です
- 検証・開発用途:実証実験・PoCなど社内検証用途にはご自由にお使いいただけます
- ソースコード公開:透明性とコミュニティ貢献のため、ソースコードはGitHub上でオープンに公開しています
- 永続ライセンス:このプロジェクトは継続してBFLライセンスのもとで提供されます
詳細については、LICENSE ファイルをご参照ください。
貢献は歓迎します!バグレポート、機能提案、プルリクエストなど、あらゆる形式の貢献に感謝します。大きな変更を加える前に、まずIssueでディスカッションを開始してください。
貢献ガイドラインもご覧ください。