InterSystems IRIS for Health 2025.3 による FHIR R4 デモ環境。 Docker Compose で起動するだけで、FHIR リポジトリ・電子カルテ UI・Interoperability プロダクションが一式動作する。
元テンプレート: Intersystems-jp/IRIS-FHIR-Oximeter-Template
- FHIR R4 リポジトリ — JsonAdvSQL ストレージ戦略による高性能な FHIR サーバーを体験
- 電子カルテ UI — FHIR API だけで動く患者サマリ画面(バイタル・病名・アレルギー・検査結果)
- Interoperability 連携 — SpO2 低下を検知して HL7 v2.5 メッセージを自動生成するフロー
- マルチモデルアクセス — 同じデータに FHIR REST / SQL / ObjectScript / グローバル変数でアクセス
前提条件: Docker Desktop がインストールされていること
IRIS for Health の製品版イメージを使用する。全機能が利用可能。
ライセンスキー: dockerfiles/iris/iris.key に配置が必要。評価ライセンスの発行は InterSystems までお問い合わせください。
docker compose up -d --build
bash demo/01_load_patients.sh # デモデータ投入(起動完了後)| コンテナ | ホスト名 | ポート | 説明 |
|---|---|---|---|
| iris4h | iris | 11201:1972 (SuperServer), 11204:52773 (Web Server) | IRIS for Health 2025.3 |
| webgw4h | webgw | 11202:80 (HTTP), 11203:443 (HTTPS) | Web Gateway 2025.3 |
認証情報: _SYSTEM / SYS
必要に応じて
docker-compose.ymlのポートフォワード設定を環境に合わせて変更してください。
ライセンスキーなしで手軽に動作を確認したい場合は、Community Edition を利用できる。アクセスURLやデモスクリプトは通常版と共通。
docker compose -f docker-compose.community.yml up -d --build
bash demo/01_load_patients.sh # デモデータ投入(起動完了後)| コンテナ | ホスト名 | ポート | 説明 |
|---|---|---|---|
| iris4h-community | iris | 11201:1972 (SuperServer), 11202:52773 (Web Server) | IRIS for Health Community 2025.3 |
アクセスURLは通常版と同じ(http://localhost:11202/...)。
Community版の制限: Web Gateway を含まず、IRIS の内蔵 Web Server で直接応答する。また、Community Edition には同時接続数やデータベースサイズ等の制限がある。詳細は コミュニティ版と製品版の違いについて を参照。
FHIR リソースを POST するだけで FHIR R4 リポジトリにデータが格納される。JsonAdvSQL ストレージ戦略(2024.1〜)により、FHIR REST API の検索性能・標準準拠性・スケーラビリティが大幅に向上している。
FHIR データを SQL で分析したい場合は、FHIR SQL Builder で SQL テーブルを生成できる(http://localhost:11202/csp/fhirsql/index.html)。
同じデータに FHIR API / SQL / ObjectScript / グローバル変数の 4 つの方法で同時アクセスできる。IRIS のマルチモデルエンジンならではの特徴。
docker exec -it iris4h iris session IRIS -U FHIRSERVER実行例は demo/03_objectscript_queries.txt を参照。
操作手順:
- 電子カルテ UI で患者を選択
- 「SpO2入力」タブを開く
- スライダーで血中酸素飽和度(SpO2)を 90% 未満に設定
- 「SpO2を記録する」ボタンをクリック
./Out/に HL7 ファイルが出力される
スクリプトでの実行:
bash demo/04_oximeter_test.shでも同じ操作を curl で実行できる。
裏側の仕組み:
ボタンをクリックすると、電子カルテ UI が FHIR Bundle(Patient + Observation)を IRIS に POST する。IRIS 側では常時稼働している Interoperability プロダクションがこのリクエストを受け取り、BPL(ビジネスプロセス)が SpO2 < 90% を検知すると、DTL(データ変換)で HL7 v2.5 SIU_S12 メッセージに変換してファイル出力する。BPL も DTL も Management Portal の GUI で定義されており、コードを書く必要がない。
処理フロー:
FHIR Bundle POST
→ HS.FHIRServer.Interop.Service
→ Solution.FHIRBPL(SpO2 < 90% を判定)
→ Solution.FromFhirObsToSIUS12(DTL: HL7変換)
→ EnsLib.HL7.Operation.FileOperation(./Out/ にHL7ファイル出力)
ビジュアルトレースで処理フローを可視化:
http://localhost:11202/csp/healthshare/fhirserver/EnsPortal.MessageViewer.zen
Docker イメージビルド時に FHIR サーバー・プロダクションを自動セットアップする初期化クラス。
- FHIRSERVER ネームスペース作成 — Interoperability 対応ネームスペースを構築
- ソースのインポート — BPL・DTL・プロダクション定義をコンパイル
- FHIR R4 サーバー構築 — JsonAdvSQL ストレージ戦略で FHIR エンドポイントを作成
- Interop 連携 — FHIR リクエストが Interoperability Service を経由するよう設定
- 電子カルテ UI 登録 —
/csp/emrを CSP アプリケーションとして登録 - プロダクション開始 —
Solution.FoundationProductionを自動起動
FHIR リクエストを受け取り、SpO2 値を評価するビジネスプロセス(BPL)。
- FHIR CRUD を
HS.FHIRServer.Interop.Operationに委譲 - Bundle 内の Observation から SpO2 を抽出
- SpO2 < 90% の場合、DTL 変換を呼び出して HL7 メッセージを生成
BPL のコンテキスト(SpO2値・患者名・患者ID)から HL7 v2.5 SIU_S12 メッセージを組み立てるデータ変換(DTL)。
FHIR R4 API を直接呼び出す電子カルテ風 UI。単体 HTML で動作し、ライブラリ(Bootstrap / jQuery / Font Awesome)も同梱しているため、インターネット接続不要で動作する。
主な機能:
- 患者一覧(20名、検索フィルタ付き)
- 患者サマリ表示(病名・アレルギー・バイタル・検査結果)
- 異常値のハイライト(SpO2 < 90%, 体温 >= 38.0℃, HbA1c >= 7.0% 等)
- アラートバッジ(SpO2低下、発熱、高血圧、アレルギー注意)
- SpO2 入力 → Bundle POST(Interop 連携で HL7 出力をトリガー可能)
- FHIR JSON 生データ表示
demo/01_load_patients.sh で投入される臨床的に整合性のあるダミーデータ:
| リソース | 件数 | 内容 |
|---|---|---|
| Patient | 20名 | 全国各地の日本人(20代〜80代、男女各10名) |
| Observation (SpO2) | 19件 | 正常値(97%)〜重症(78%) |
| Observation (体温) | 19件 | 平熱(36.3℃)〜高熱(39.1℃) |
| Observation (血圧) | 13件 | 正常(118/75)〜重症高血圧(170/110) |
| Observation (検査) | 20件 | 血糖値・HbA1c・ヘモグロビン・クレアチニン |
| Condition | 23件 | 糖尿病・高血圧・CKD・心不全・COPD・喘息・肺炎・睡眠時無呼吸 |
| AllergyIntolerance | 10件 | 薬剤(ペニシリン等)・食物(そば等)・環境(花粉等) |
IRIS for Health 2024.1 で導入された FHIR サーバーのデフォルトストレージ戦略。従来の HS.FHIRServer.Storage.Json と比べ、FHIR REST API の検索性能・標準準拠性・スケーラビリティが大幅に向上している。
特徴:
- 検索性能の向上 — コンパートメント検索、
_include/_revinclude(:iterate対応)、拡張プレフィックス(sa,eb,ap)をフルサポート - マルチモデルアクセス — FHIR REST / SQL / ObjectScript / グローバル変数の 4 方式で同時アクセス
- SQL 分析 — FHIR SQL Builder でプロジェクションを定義すれば、BI ツール(Tableau、Power BI 等)から JDBC/ODBC 接続可能
| 項目 | Json(レガシー) | JsonAdvSQL(推奨) |
|---|---|---|
| 導入バージョン | 2024.1 より前 | 2024.1 以降(デフォルト) |
| コンパートメント検索 | 制限あり | フルサポート |
_include / _revinclude |
制限あり | フルサポート(:iterate 対応) |
| 検索プレフィックス | 基本のみ | sa, eb, ap 対応 |
| パフォーマンス | 標準 | 大幅に改善 |
HS.FHIRServer.Interop.Service(ビジネスサービス)
→ Solution.FHIRBPL(ビジネスプロセス: SpO2判定)
→ HS.FHIRServer.Interop.Operation(FHIR CRUD実行)
→ Solution.FromFhirObsToSIUS12(DTL: HL7変換)
→ To_Scheduling / EnsLib.HL7.Operation.FileOperation(HL7ファイル出力)
iris4h-demo/
├── docker-compose.yml # Docker Compose 定義(製品版)
├── docker-compose.community.yml # Docker Compose 定義(Community版)
├── readme.md # このファイル
│
├── dockerfiles/
│ ├── iris/
│ │ ├── dockerfile # IRIS for Health イメージ定義
│ │ ├── iris.script # IRIS 初期化スクリプト
│ │ ├── Setup.cls # FHIRサーバー・プロダクションのセットアップクラス
│ │ └── iris.key # ライセンスキー(※git管理外)
│ └── webgw/
│ ├── dockerfile # Web Gateway イメージ定義
│ └── opt/iris/
│ ├── CSP.conf # Apache CSP モジュール設定
│ └── CSP.ini # Web Gateway 接続設定
│
├── src/
│ ├── emr/
│ │ └── index.html # 電子カルテ UI(FHIR fetch API ベース)
│ └── Solution/
│ ├── FHIRBPL.cls # ビジネスプロセス(BPL: SpO2チェック)
│ ├── FoundationProduction.cls # プロダクション定義
│ └── FromFhirObsToSIUS12.cls # データ変換(DTL: FHIR→HL7 SIU_S12)
│
├── demo/
│ ├── 00_agenda.md # デモ Agenda
│ ├── 01_load_patients.sh # デモデータ投入(患者20名+臨床データ)
│ ├── 03_objectscript_queries.txt # ObjectScript クエリ集
│ ├── 04_oximeter_test.sh # パルスオキシメーター デモスクリプト
│ └── view_hl7.sh # HL7 メッセージ UTF-8 表示ビューア
│
└── Out/ # HL7 メッセージ出力先(実行時に生成)
└── .gitkeep
- FHIR Server: An Introduction — FHIR サーバーのアーキテクチャと JsonAdvSQL の概要
- Installing a New FHIR Server — FHIR サーバーのインストール手順
- Customizing a FHIR Server — FHIR サーバーのカスタマイズ
- FHIR SQL Builder — FHIR SQL Builder の概要
- New in IRIS for Health 2024.1 — JsonAdvSQL の導入
- New in IRIS for Health 2024.3 — JsonAdvSQL の検索パフォーマンス改善
- エンジニアのための IRIS for Health ガイド — 「自分で作らなくていいもの」一覧
- 電子カルテ UI アーキテクチャ(スライド用) — FHIR API だけで動く電子カルテのデータフロー・技術スタック
- IRIS for Health がサポートする医療標準規格 — HL7 v2/FHIR/CDA/DICOM/IHE 等の対応一覧
- 症例検索アーキテクチャ(Embedding + Vector Search) — 自然言語による類似症例検索の設計
- FHIR R4 仕様
- 元テンプレート: IRIS-FHIR-Oximeter-Template
- iris-fhir-portal(UI アセット元)
