GCPのCloud Healthcare APIを利用したFHIRリポジトリの構築の入門


# はじめに

この記事は[PHC BXC Advent Calendar 2022](https://qiita.com/advent-calendar/2022/phc_bxc) 24日目の記事です

PHC株式会社メディコム事業部ビジネストランスフォーメーションセンターの天満と申します。ビジネストランスフォーメーションセンターではSREとして活動しております。

本日の記事ではGoogle Cloud Platfromが提供するCloud HealthcareAPIを利用してFHIRストアの構築することで、FHIRとGoogle Healthcare APIの簡単な入門をしていきたいと思います。

# 導入

## FHIRとはなにか

FHIRについて説明する前に、まず医療情報の共通化の歴史について振り返ろうと思います。
米国では早くから医療情報に関するメーカー毎の独自連携仕様を解消することに着目していました。そうしたニーズから医療情報の共通規格を策定する組織としてHL7が誕生しました。IT業界で言うところのIETFに相当します。
HL7が策定した個別の連携共通仕様としてHL7v2は1988年から提唱されました。こちらはIT業界で言うところのRFCに相当すると思います。
HL7v2は現在では日本でも地域医療連携などで使われるSS-MIXの中のデータ形式としても利用されています。
このv2に続き、2000年代に流行したようにXMLでデータをフォーマット化したHL7 CDAと言う物があります。
これらのフォーマットは基本的にはファイルベースでの交換仕様であり、RESTfulなWebベースを想定した物ではありませんでした。

現在のIT環境ではタブレット端末やIoT機器などより多様な機器とつながる必要がある事に加え、クラウドサービスも多く登場しております。その中でよりモダンなWebAPIベースのメッセージ仕様として誕生したのがFHIR(Fast Healthcare Interoperability Resources)です。
FHIRてはデータをRESTfulなjson形式でやり取りします。仕様は全て定義された物でなく、80%ルールとして基本ルール以外の項目について拡張プロファイルを定義するような形になっています。

### 参考資料

https://www.mhlw.go.jp/stf/newpage_15747.html


## Cloud Healthcare APIとは


FHIRのシステム構築にはその医療データの保存とAPIを介したCRUD処理を行うFHIRリポジトリ(FHIRサーバーとも)を構築する必要があります。
GCPのCloud Healthcare APIはこのFHIRサーバーを提供するマネージドサービスです。
GCPの基盤の上に乗っているため、セキュリティ管理はGCPの機能を利用することができ、可用性とパフォーマンスも強力な分散実行技術により担保されています。

# 構築手順

それでは実際にCloud Healthcare APIを利用してFHIRリポジトリを構築していきたいと思います。

## FHIRストアの構築

- [Cloud Healthcare API](https://console.cloud.google.com/healthcare/browser)

Cloud Healthcare APIの画面を初めて開くと、以下のAPIを有効にする画面が出てきますので、これを有効にします。

![2022-12-24-17-39-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513773/d11916c9-4065-c8a3-b0f7-66d21328828e.png)

「データセットを作成」から、名前とリージョンを指定してFHIRストアを作成します。東京リージョンに保存する場合はリージョン名に「asia-northeast1」を選択してください。

![2022-12-24-19-02-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513773/2ae8362f-ac16-9e6a-da50-266374d8b584.png)

次に「データストア」を以下のように指定して作成します。

- タイプ：「FHIR」を選択します
- ID：任意の名前を入力します
- Version：現在のFHIR最新の安定板の「R4」を指定します。

残りは特に入れずに作成を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513773/c21aa3fc-a15e-7a5c-edb0-7cd1287d0790.png)


作成ボタンを押すと、しばらく待った後に指定したID名でデータストアが作成されます。

以上で準備が整いました

## データの入力

それでは作成したデータストアに実際にFHIR形式のデータを入力してみたいと思います。

まず、サンプルデータとして以下のようなFHIRデータをjsonで用意します。

```json
{
    "resourceType": "Patient",
    "id": "11111111-1111-1111-1111-111111111111",
    "name": [
        {
            "use": "official",
            "family": "PHC",
            "given": [
                "BX"
            ]
        }
    ],
    "gender": "male",
    "birthDate": "1969-11-21",
    "address": [
        {
            "line": [
                "西新橋2-38-5"
            ],
            "city": "港区",
            "state": "東京都",
            "postalCode": "105-8433",
            "country": "JP"
        }
    ]
}
```

次に、このデータをgcloudコマンドとcurlコマンドを使用して送信します。
gcloudコマンドは以下のURLの記事から事前に準備をしておいてください。

https://cloud.google.com/sdk/docs/install?hl=ja

gcloudの準備ができていましたら、以下のシェルコマンドから先ほどのサンプルデータをPOST通信で送信します。
```bash
PROJECT_ID="[ここにプロジェクトIDを入れる]"
LOCATION="[ここにを入れる]"
DATASET_ID="[ここにデータセット名を入れる]"
FHIR_STORE_ID="[ここにデータストアIDを入れる]"

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/fhir+json" \
    -d @sampledata.json \
    "https://healthcare.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/datasets/${DATASET_ID}/fhirStores/${FHIR_STORE_ID}/fhir/Patient/"

```
これでデータの登録が完了できました。
この時、Cloud Healthcare APIからのレスポンスには正式なFHIRデータストア内で一意のPatient IDが返ってきていると思います。

登録されたデータはFHIRビューアの方からも確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513773/9601c53c-ce2c-ea34-ac43-f0d73eceee36.png)

## データの取得

登録したデータを今度はAPIを介して取得してみようと思います。
先ほどの登録時のレスポンスから帰ってきているPatientIDを使って、以下のシェルコマンドを実行します。

```bash
#!/bin/bash

PROJECT_ID="[ここにプロジェクトIDを入れる]"
LOCATION="[ここにを入れる]"
DATASET_ID="[ここにデータセット名を入れる]"
FHIR_STORE_ID="[ここにデータストアIDを入れる]"
PATIENT_ID="[ここにPatientIDを入れる]"

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/datasets/${DATASET_ID}/fhirStores/${FHIR_STORE_ID}/fhir/Patient/${PATIENT_ID}"
```

このシェルコマンドを実行すると、レスポンスから正しく先ほど登録したPatientのデータが取得できていることが確認できます。

## 参考資料

https://cloud.google.com/healthcare-api/docs/concepts/introduction?hl=ja

https://www.cloudskillsboost.google/quests/88
 

# まとめ

本記事の内容でGCPのCloud Healthcare APIを利用してFHIRリポジトリを作成し、そのデータセットを使ってFHIRデータの登録と取得をRESTfulなAPIを介して行えることを確認しました。

今後、FHIRやその他の方法も含めて、医療のデータ連携をより容易に便利なものへとしていくことで医療ITのさらなる発展させていきたいと考えています。

PHC株式会社では健康を願うすべての人々に新たな価値を創造し豊かな社会づくりに貢献するべく、
医療分野の様々な事業に取り組んでおります。
今回紹介したようなIT技術を活用した医療分野の発展にご興味のある方はぜひPHC株式会社メディコム事業部をよろしくお願いいたします。