ForgeからHL7FHIRのリソースプロファイルを新規作成してみる

# 実行環境
- Mac OS 10.14.6 (Mojave)
- Forge 23.0 for R4 (Fall 2019 Edition Ver.23.0.0.0)

# はじめに
- HL7 FHIR プロファイルエディタ 「[Forge](https://fire.ly/products/forge/)」 のインストール方法は[こちらの記事](https://qiita.com/ishihara-jp/items/9cf4266c757ac8d0f66e)を参照ください。
- 今回はForgeを使って新しいリソースプロファイルを作って、[Simplifier](https://simplifier.net/)にアップするところまでを解説します（いわゆる "Hello, World!!" まで）。
- より詳しい説明は公式ページの[このあたり](https://simplifier.net/guide/profilingacademy/modules)を参照ください。
- Simplifierのアカウント作成までできている前提で始めます。

# 手順
## 1.プロジェクト作成
- [Simplifier](https://simplifier.net/)にアクセスして、サインイン
- ユーザーアイコンから "Portal" を選択
![スクリーンショット 2019-11-25 21.17.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/2ae5d2ff-53c6-b36f-c46e-4ca7f83405d8.png)

- Projectタブから "Create" をクリックします。（フリーアカウントだと１つのプロジェクトしか出来ないようです）
![スクリーンショット 2019-11-25 21.19.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/4872703e-574a-19fa-8f86-f6448dd5fd0b.png)

- プロジェクトについて必要事項を入力します。
    - Title : プロジェクト名を設定します。仕様を公開する場合にURLに反映されます。  
      例：https://simplifier.net/プロジェクト名/リソースプロファイル名（後述）
    - Description : プロジェクトの説明文
    - FHIR version : ベースとするFHIRの仕様バージョン　（選択肢：DSTU2, STU3, R4）
    - Scope : 適用範囲　（選択肢：International, National, Institute, Regional, Test）
    - Nationality : 適用国
- ここでは、下記のように設定して、"Create"をクリック。
![スクリーンショット 2019-11-25 21.24.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/8e2223d4-2d37-4488-5779-809a895da06c.png)

- 下記のようなプロジェクトのポータル画面が出来上がります。
![スクリーンショット 2019-11-25 21.29.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/12d40ccb-cbd6-266d-739e-42c48f315358.png)

## 2.ワークスペースを作る
- Forgeを起動します。
![スクリーンショット 2019-11-25 21.30.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/f1cd0a87-4cf3-c73b-b73b-d07421e2972b.png)

- Fileメニューから、"Open Profile Folder" をクリック
- 適当な空フォルダを指定して、"Open"をクリック。（この時、保存形式をXMLかJSONを選べます）
- 今回は、`/Users/XXXXX/Documents/simplifier`を選択。JSON形式に設定。  
  （ForgeはWINDOWS仕様のため、Documentsフォルダが"My Documents"と表示されます。）
![スクリーンショット 2019-11-25 21.33.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/cee0a790-af76-1ac4-e12a-5353a32849a0.png)
- 下記のようにリソースプロファイルを格納するローカルのワークスペースが出来ます。
![スクリーンショット 2019-11-25 21.35.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/2458b875-2e69-d36f-e67e-7bd9dea26593.png)

## 3.リソースプロファイルを作る
- さあ、いよいよここから本番。Fileメニューから"New Profile"を選びます。
![スクリーンショット 2019-11-25 21.38.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/c8058c5f-9adb-d23b-4cd8-f27a4c211c35.png)
- ダイアログの一番左側にあるラジオボタンから、"Resource profile"を選択
- ここでは、例として "Observation" （患者やデバイスに関する検査・評価項目に関するリソース）をリストから選びます。
- 次に、定義するリソースプロファイル名を "Name" のテキストボックスから定義します。デフォルトでは"My〜"となります。（"Canonical url" と "File name" は、Nameに応じて自動で設定されます。）
- ここでは、デフォルトのまま下記のように設定して "OK" をクリック
![スクリーンショット 2019-11-25 21.54.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/f7b9c33a-b40f-316b-c336-4c7e68840a83.png)


- すると、下記画面のようにMyObservationというリソースプロファイルが作成されます。
![スクリーンショット 2019-11-25 21.57.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/c24db7fa-dbd4-6cf5-c9e7-77ce42937afa.png)

## 4.独自に仕様を変更してみる
- 先ほど作ったMyObservationを選択して、現在の仕様を確認できます。
- 例えば、"Element Tree"タブから、"Observation" -> "subject" -> "Identifier" を選択すると、"Cardinality" は `0...1` となっていることが確認できます。この場合、検体IDが０（つまり無くても良い）もしくは１つまで定義できることを意味します。ここで仮に、このプロジェクトでは独自の仕様変更として、`1...1`（必ず１つ定義）に変更してみたいと思います。Cardnalityのところにある"1...1"というボタンをクリックしてみます。（最初これが、変更用のボタンであることに気づきませんでした・・・泣）
![スクリーンショット 2019-11-25 22.03.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/804f9e5e-7235-1eeb-3545-738e6eadc988.png)
- すると、Cardinalityが`1...1`に変更されました。それと同時に、元々の仕様から変更された項目にペンマーク（？）が表示されます。
![スクリーンショット 2019-11-25 22.06.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/1950e23a-0f19-2d4f-78d4-a9c33243a4ab.png)
- "Save"ボタンをクリックして、一旦これを保存してみましょう。（先ほど設定したワークスペース配下に適当なファイル名で保存できます。ここでもXML形式かJSON形式か選べます。）
![スクリーンショット 2019-11-25 22.09.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/cebf3158-c7ac-b6cf-153a-b74feabf7add.png)
- 参考までに、保存したJSON形式のファイルの中身は下記のようになっていました。ちゃんと、`baseDefinition`に対して、`differential`に`"min": 1`という変更が加えられたことが書かれていました。

```JSON
{
  "resourceType": "StructureDefinition",
  "id": "67bae5b9-b152-48d3-8942-4338e9b80cff",
  "meta": {
    "versionId": "1",
    "lastUpdated": "2019-11-25T13:14:09.608+00:00"
  },
  "url": "http://example.org/fhir/StructureDefinition/MyObservation",
  "name": "MyObservation",
  "status": "draft",
  "date": "2019-11-25T13:14:08.794913Z",
  "fhirVersion": "4.0.0",
  "mapping": [
    {
      "identity": "workflow",
      "uri": "http://hl7.org/fhir/workflow",
      "name": "Workflow Pattern"
    },
    {
      "identity": "sct-concept",
      "uri": "http://snomed.info/conceptdomain",
      "name": "SNOMED CT Concept Domain Binding"
    },
    {
      "identity": "v2",
      "uri": "http://hl7.org/v2",
      "name": "HL7 v2 Mapping"
    },
    {
      "identity": "rim",
      "uri": "http://hl7.org/v3",
      "name": "RIM Mapping"
    },
    {
      "identity": "w5",
      "uri": "http://hl7.org/fhir/fivews",
      "name": "FiveWs Pattern Mapping"
    },
    {
      "identity": "sct-attr",
      "uri": "http://snomed.org/attributebinding",
      "name": "SNOMED CT Attribute Binding"
    }
  ],
  "kind": "resource",
  "abstract": false,
  "type": "Observation",
  "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Observation",
  "derivation": "constraint",
  "differential": {
    "element": [
      {
        "id": "Observation.subject.identifier",
        "path": "Observation.subject.identifier",
        "min": 1
      }
    ]
  }
}
```
## 5.Simplifierへアップロードしてみる
- 先ほど定義した独自仕様を公開してみましょう。"File"メニューから、"Publish to Simplifier.net"を選択
![スクリーンショット 2019-11-25 22.11.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/6baa7130-efd7-7dc3-ff35-61f7b6c2d09c.png)
- 続けて、Simplifierに登録したアカウント情報（"Username"と"Password"）を入力して、"Connect"をクリック
![スクリーンショット 2019-11-25 22.11.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/a8e7ccba-fd8d-f167-8366-e8f9d53df236.png)
- 次に"Project"のプルダウンをクリックすると、冒頭で作ったプロジェクト名が表示されるはずなので、それを選びます。
- 最後に"Save"ボタンをクリック！　これでアップロード完了です。
- ブラウザからSimplifierのポータルサイトへ行ってみると、Resourcesに新しく"Profiles"というのが出来ているはずです。これをクリックすると・・・
![スクリーンショット 2019-11-25 22.15.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/abb1c9e6-1e24-043a-5a2e-7bbe9b83a862.png)
- 先ほど作ったオリジナルのリソースプロファイル名が表示されます。さらに、これをクリックしてみましょう。
![スクリーンショット 2019-11-25 22.16.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/514a8902-dc69-34c8-d43a-6a60456b7638.png)
- 仕様を詳しく見ることができます。例えば、"Overview"タブから、先ほど定義した"subject"の"identifier"を見てみると、`Cardinality`が正しく`1...1`と反映されていることが確認できるはずです。
![スクリーンショット 2019-11-25 22.18.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528836/8ba16a86-9f39-5014-8e62-ceb70a44be3a.png)


今回はここまでで終わりです。お疲れ様でした。

（できれば、独自定義したリソースプロファイルを使ったサンプルプログラムの実装までいきたいなぁ・・・）