エムティーアイ エンジニアブログ

株式会社エムティーアイのエンジニア達による技術ブログ

Azure API for FHIR を試してみました

はじめに

こんにちは。スマートコンテンツ事業部の松本です。この記事は 医療系システムに関わったことがあるIT技術者(でも医者じゃないから医学には疎い)で FHIR に関心がある、FHIR を初始めるにはまず何をすれば、という人(希少)に書いています。 最近、Azure API for FHIR® が一般提供に移行されたのこれをターゲットに試してみました。

FHIR

国際HL7協会(Health Level Seven International)が策定した、医療情報の共有を目的とした標準仕様です。1 "ファイア" と読みます。

FHIRとは

F AST(容易かつ迅速に)

H ealthcare(医療情報の)

I nteroperability(相互運用性を高める)

R esources(データの集まり)

2

RESTfulで使い易く、JSON・XMLで視認性がよい、見慣れた用語・技術を使っているので医学に疎いIT技術者にも理解できるものになっています。

アメリカでは近年、 HL7 FHIR が主流になりつつあるそうです。日本でも標準化が有識者グループを中心に検討されている最中ですが IT 大手(GAFA, Microsoft, IBM)はいち早く FHIR を標準として対応を進めている3、というのが現状の様です。

  • Google Google Cloud に FHIR に準拠した Cloud Healthcare API をリリース
  • Apple FHIR に準拠した Health Records の機能を iOS 11.3 beta でアップデート
  • Amazon
  • Microsoft Azure API for FHIR の提供
  • IBM

FHIR 以外の医療のデータ規格について

では FHIR の何が良いのか、FHIR 以外にどんな規格があるのかIT技術者視点で並べてみました。

HL7

医療情報交換のための標準規約、医療情報システム間のISO-OSI第 7 層アプリケーション層とのこと、HTTP みたいなもの?

HL7 V2

今から 30 年前(1989)に制定された規格 日本でもそこそこ普及しているらしい。業務で触れたことがありますが昔のシリアルデータを見ているようで視認性が悪く、一桁のズレが大バグを引き起こす扱い難いデータでした。

HL7 V3

データ形式は XML、仕様が肥大化しすぎて不人気。Struts を思い出しました。

CDA

データ形式は XML

SS-MIX

日本の独自規格

Azure API for FHIR

Azure API for FHIRとは、「医療データ ソリューションに対応する高速ヘルスケア相互運用性リソース (FHIR) サービスを簡単に作成してデプロイする」ものだそうです。

習うより慣れろ、で細かいことは考えずにチュートリアルをやってみましょう。

Deploy a FHIR server

まず、FHIR API を構築します。Azureでは 2 パターンの方法があります。

  1. Azure API for FHIR – A PaaS offering in Azure, easily provisioned in the Azure portal and managed by Microsoft.

    PaaSタイプ、Azure ポータルで簡単にプロビジョニングでき、Microsoft によって管理される、データへのアクセスは API 経由のみ、データベース には直接アクセスできない。

  2. FHIR Server for Azure – an open-source project that can be deployed into your Azure subscription, available on GitHub at https://github.com/Microsoft/fhir-server.

    FHIR サーバーを拡張またはカスタマイズする必要がある場合や FHIR API を介さずにデータベースにアクセスする必要がある場合に選択する。

開発環境はローカルPCで "FHIR Server for Azure" を使い、本番環境は "Azure API for FHIR" で 運用がよろしいのでは?と感じました。

今回はお手軽な "Azure API for FHIR" を Azure ポータル上から構築する方法を選択しました。

以下、手順

  1. Create new resource

    f:id:mti-techblog-writer:20200402112525p:plain


    メニューから「リソースの作成」を選択

  2. Search for Azure API for FHIR

    Azure API for FHIR」を検索

  3. Create Azure API for FHIR account

    「作成」を押下

  4. Enter account details

    f:id:mti-techblog-writer:20200406232744p:plain


    入力し、「追加の設定」を押下

  5. Additional settings

    f:id:mti-techblog-writer:20200406232833p:plain


    内容を確認し「レビュー + 作成」を押下

1. Initial setup and FHIR deployment

FHIR API にアクセスするちょっとしたアプリを作ります。

  1. Deploy Azure API for FHIR

    f:id:mti-techblog-writer:20200406233026p:plain


    CORS の設定をします。メソッドは「すべて選択」して「保存」してください。

2. Register a public client application

  1. クライアントアプリケーションを登録する。

    f:id:mti-techblog-writer:20200402113634p:plain


    「Azure Active Directory」を選択

    f:id:mti-techblog-writer:20200402113724p:plain


    「新規登録」を押下

    f:id:mti-techblog-writer:20200402113744p:plain


    「登録」を押下

「アプリケーション (クライアント) ID」「ディレクトリ (テナント) ID」を控えておいてください。

  1. Client application settings

    f:id:mti-techblog-writer:20200402114447p:plain


    「認証」を選択、若干チュートリアルと違うので「前のエクスペリエンスに切り替える」を選択します(2020/4現在)。

    f:id:mti-techblog-writer:20200406233149p:plain


    「リダイレクトURI」にこれから作成するWeb AppのURIを、「暗黙の付与」「アクセストークン」「IDトークン」をチェックして「保存」します。

    リダイレクトURIは「https://fhirxxxapp.azurewebsites.net」としました。最後に「保存」を押します。

    f:id:mti-techblog-writer:20200402114701p:plain


    「アクセス許可の追加」

    f:id:mti-techblog-writer:20200402114732p:plain


    「所属する組織で使用している API」「Azure Healthcare APIs」を選択

    f:id:mti-techblog-writer:20200402114801p:plain


    「user_impersonation」をチェック、「アクセス許可の追加」を押下します。

3. Test access to the application

省略しますがチュートリアルの手順通り、特に悩むことはなく完了しました。データはここから入手したものを POST しました。

4. Create a web application that reads this FHIR data

  1. Create web application

    f:id:mti-techblog-writer:20200402114837p:plain


    「リソースの作成」から「Web App」検索し「作成」します。

    f:id:mti-techblog-writer:20200406234049p:plain


    「App Service プラン」は無料の「F1」にしました。「作成」を押します。

    f:id:mti-techblog-writer:20200406234152p:plain


    「App Service Editor」を起動

    f:id:mti-techblog-writer:20200406234241p:plain


    「index.html」を追加

    f:id:mti-techblog-writer:20200406234259p:plain


    チュートリアルのサンプルソースを編集し貼り付けます。編集箇所は

    var msalConfig = {
         auth: {
             clientId: '51f4e44d-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
             authority: "authority359b5e93-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
         },
         cache: {
             cacheLocation: "localStorage",
             storeAuthStateInCookie: true
         }
     }
 
     var FHIRConfig = {
         FHIRendpoint: "https://mydemoxxxxxxx9.azurehealthcareapis.com/"
     }
     var requestObj = {
         scopes: ["https://mydemoxxxxxxx9.azurehealthcareapis.com/user_impersonation"]
     }
  • clientId 「アプリケーション (クライアント) ID」

  • authority 「ディレクトリ (テナント) ID」

  • FHIRendpoint 「Azure API for FHIR」の URI

  • scopes 「Azure API for FHIR」の URI

患者データが表示されることを確認、お疲れ様でした。

msal.jsなんて便利なものがあることを初めて知った、ありがとう。

雑感

チュートリアルの内容は アプリの登録とAD認証がほとんどで FHIR はAPIを叩いて学んでくれという感じでした、見慣れた RESTful API なので Curl, Postman さえ使えれば IT技術者でもなんとかなりそうです。その際、データ定義の情報源になるのがHL7 FHIR Release 4です。

まず、ドキュメントの体裁がとても綺麗なのが驚きました。ドキュメントツールは何を使っているのだろう?とても見やすく好感が持てます。こういうの大事ですね。

また、データ定義も Gender という見慣れた項目も真面目に考察しており、大抵のシステムは "Male", "Female", "Other" 位しかない所を社会的(LGBT 云々)・生物学的(患者が動物の場合も考慮している!)要素を踏まえて検討しているあたりさすがお医者さんが考えたシステムだな、と思いました。

現在(2020/03)、世界的に新型コロナウイルス(COVID-19)が猛威を振るっています。国境を軽々と超えるウィルスに対して医療データの国際的な相互利用はあまり進んでいません。

世界にインターネットが普及し一人一台スマホ持っている現状なのに医療データのフォーマットが標準化されず乱立しPHRの普及や医療ビッグデータの利活用が行われないのはとても残念なことです。

FHIR の普及を願ってやみません。

これからやること

Azure Active Directory SMART on FHIR proxy

FHIR 版オープンソーシャルアプリ? OAuthを利用したPHR アプリが作れそうです。

IoMT FHIR Connector for Azure

IoMT デバイスから保護対象医療情報 (PHI) をクラウドでセキュアに取り込み、正規化して、保持する新しいツール

体組成計やスマートウォッチと FHIR 連携するツール

参考情報

FHIR研究会