# ヘルスケアアプリを構築する

> チュートリアル：Anpheros をヘルスケアアプリの医療データバックエンドとして使用する — 患者、測定値、病状、投薬、ドキュメント、検査結果、同意、Webhook、SDK。

Source: https://developers.anpheros.com/ja/guides/build-a-healthcare-app

このチュートリアルでは、ヘルスケアまたは医療アプリケーションが Anpheros Platform を医療データバックエンドとしてどのように使用できるかを示します。患者レコードの保存方法、読み書きの方法、他のシステムとの接続方法、患者が管理を維持する方法について説明します。以下のすべての呼び出しは、公開 API ([リファレンス](https://developers.anpheros.com/docs)) の一部です。

## 作成するもの

典型的な患者向けアプリ（慢性疾患トラッカー、ファミリーヘルスアプリ、リモートモニタリングコンパニオンなど）は、以下の機能が必要です。

1.  患者ごとの記録（測定値、病状、投薬、文書）を保持する。
2.  その記録をリストやタイムラインとして表示する。
3.  他のソース（デバイス、検査機関、クリニック）からのデータを受け入れる。
4.  患者の同意を得て、記録の一部を共有する。
5.  何かが変更されたときに反応する。

Anpheros を使用すると、アプリは独自のユーザー、画面、ビジネスロジックを保持し、医療記録はプラットフォームに委任されます。

```
Mobile / web app ──► your backend ──► Anpheros Platform API ──► FHIR R4 record of each patient
                         ▲                                              │
                         └──────────── signed webhooks ◄────────────────┘
```

バックエンドが API キーを保持し、アプリはバックエンドと通信します。（すでに Anpheros レコードを持つ患者のために動作するアプリは、代わりに OAuth を使用します。ステップ 7 を参照してください。）

## 1. Sandboxキーの取得

サンドボックスはセルフサービスです。ダッシュボード（`https://platform.anpheros.com/dashboard/`）でGoogleでサインインし、「Sandbox keyを取得」を押してください。サンドボックスキーは`sk_test_`から始まり、サンドボックスデータベースにのみアクセスできます。このデータベースには、プロジェクトごとに30人の合成患者のコピーが用意されています。

```bash
export BASE=https://platform.anpheros.com
export KEY=sk_test_…
curl $BASE/v1/patients -H "Authorization: Bearer $KEY"
```

## 2. 患者の作成

アプリの各ユーザーには、プロジェクトが所有する患者レコードが割り当てられます。

```bash
curl -X POST $BASE/v1/patients -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -H "Idempotency-Key: $(uuidgen)" \
     -d '{"given": "Elena", "family": "Ionescu", "birth_date": "1985-09-03", "gender": "female"}'
```

レスポンスには、患者の`id`（この人物に対するあなた自身の識別子 — 他のプロジェクトでは異なるものが表示されます）とその`fhir`参照が含まれます。

## 3. Measurements、Conditions、Medicationsの書き込み

データがどこから来たかを `author_type`: `patient`、`practitioner`、`device`、`import`、または `ai` で明記してください。省略した場合、プラットフォームは `import` を記録し、決して `patient` を仮定しません。

```bash
# a blood-pressure reading from a connected device (LOINC panel with two components)
curl -X POST $BASE/v1/patients/$PID/observations -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -H "Idempotency-Key: $(uuidgen)" -d '{
  "code": "85354-9", "display": "Blood pressure panel", "category": "vital-signs",
  "effective_at": "2026-09-28T08:00:00Z", "author_type": "device",
  "components": [
    {"code": "8480-6", "display": "Systolic", "value": 128, "unit": "mm[Hg]"},
    {"code": "8462-4", "display": "Diastolic", "value": 82, "unit": "mm[Hg]"}
  ]}'

# a diagnosis (ICD-10 by default)
curl -X POST $BASE/v1/patients/$PID/conditions -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -d '{"code": "I10", "display": "Essential hypertension", "onset": "2024-03-01", "author_type": "practitioner"}'

# a medication (ATC by default)
curl -X POST $BASE/v1/patients/$PID/medications -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -d '{"display": "Amlodipine 5 mg", "code": "C08CA01", "dosage": "1 tablet in the morning", "start": "2024-03-01", "author_type": "patient"}'
```

Observation カテゴリ: `vital-signs`、`laboratory`、`symptom`、`activity`、`survey`、`exam`、`imaging`、`social-history`。書き込みごとに FHIR リソースとして保存され、自動的に `Provenance` エントリが作成されます。

## 4. ドキュメントの保存

```bash
# create the document, then upload the bytes
curl -X POST $BASE/v1/patients/$PID/documents -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -d '{"title": "Blood tests 2026-09-14", "kind": "lab_report", "content_type": "application/pdf", "date": "2026-09-14"}'
curl -X PUT $BASE/v1/documents/$DOC/content -H "Authorization: Bearer $KEY" -H 'content-type: application/pdf' --data-binary @report.pdf
```

アップロード後のオリジナルは不変です。そこから抽出した値は、`derived_from` を使用して元のドキュメントを参照できます。

## 5. レコードの読み込み

```bash
curl "$BASE/v1/patients/$PID/observations?category=vital-signs&limit=20" -H "Authorization: Bearer $KEY"
curl "$BASE/v1/patients/$PID/medications?status=active" -H "Authorization: Bearer $KEY"
curl "$BASE/v1/patients/$PID/timeline?from=2026-06-01" -H "Authorization: Bearer $KEY"   # everything, chronologically
```

完全なFHIRモデルが必要な場合、同じデータが`/fhir/R4`で利用可能であり、IDも同じです（[FHIR R4 API](https://developers.anpheros.com/ja/guides/fhir)）。

## 6. ラボおよびデバイスの接続

- **検査レポート:** CSV、HL7 v2 ORU^R01、またはJSON形式の`POST /v1/patients/{id}/labs/import`は、検査レポート全体をLOINCコード付きの検査結果（Observation）に変換します（[ラボコネクタ](https://developers.anpheros.com/ja/guides/lab-connector)）。
- **デバイスおよびウェアラブル:** 測定値のLOINCコードとともに`author_type: device`でObservationを記述します（心拍数、SpO₂、歩数、睡眠時間などは[FHIRコードシステム](https://developers.anpheros.com/ja/guides/fhir-code-systems)に記載されています）。

## 7. 患者が既に持つレコードに到達する (OAuth)

もしその人が既にAnpherosにレコードを持っている場合（例えばAnpheros Daily経由）、あなたのアプリは新しい患者を作成する代わりにアクセスを要求できます。アプリケーションを登録し、必要なスコープと共に同意ページにユーザーを誘導し、コードをトークンと交換し、アクセストークンを使用してAPIを呼び出します。患者は期間を選択でき、いつでもアクセスを無効にできます。詳細: [認証とOAuth](https://developers.anpheros.com/ja/guides/authentication)。

## 8. Webhook による変更への対応

```bash
curl -X POST $BASE/v1/webhooks -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -d '{"url": "https://your.app/anpheros/hook", "events": ["resource.created", "consent.revoked"]}'
```

各配信の `Anpheros-Signature` ヘッダーを検証します ([Webhooks](https://developers.anpheros.com/ja/guides/webhooks))。

## 9. SDK を使用する

TypeScript での同じフロー:

```ts
import { Anpheros, apiKey } from '@anpheros/sdk';

const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });
const { data: patients } = await anpheros.patients.list();
const vitals = await anpheros.observations.list(patients[0].id, { category: 'vital-signs', limit: 20 });
```

同様の形式の Dart / Flutter クライアントも `anpheros_sdk` ([SDKs](https://developers.anpheros.com/ja/guides/sdks)) として利用可能です。

## 本番環境への移行前

- 本番環境のキー（`sk_live_`）は、署名済みのデータ処理契約を締結した認定済み組織に発行されます。
- 「[セキュリティ、プライバシー、およびデータレジデンシー](https://developers.anpheros.com/ja/guides/security)」ページと「[制限事項](https://developers.anpheros.com/ja/guides/limits)」をお読みください。
- エラーはタイプ別に処理し、サポートへ連絡する際は `Anpheros-Request-Id` ヘッダーを引用してください（[エラー](https://developers.anpheros.com/ja/guides/errors)）。

## 関連情報

- [TypeScriptでヘルスケアAPIを構築する方法](https://developers.anpheros.com/ja/guides/healthcare-api-typescript): Expressを使用したステップバイステップチュートリアル
- [Flutterでヘルスケアアプリを構築する方法](https://developers.anpheros.com/ja/guides/healthcare-app-flutter): Dart SDKを使用したステップバイステップチュートリアル
- [FHIRバックエンドでAIヘルスケアアプリを構築する方法](https://developers.anpheros.com/ja/guides/build-ai-healthcare-app): TypeScriptでのステップバイステップチュートリアル
- [Anpherosで構築する](https://developers.anpheros.com/ja/guides/build-with-anpheros)
- [医療アプリのバックエンドとデータベース](https://developers.anpheros.com/ja/guides/medical-app-backend)
- [医療データAPI](https://developers.anpheros.com/ja/guides/medical-data-api)
- [ヘルスケアソフトウェア開発](https://developers.anpheros.com/ja/guides/healthcare-software)
- [FHIRで個人健康記録（PHR）アプリを構築する方法](https://developers.anpheros.com/ja/guides/personal-health-record-app)
