Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

477 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ヘッダー画像

fictional-drug-and-disease-ref-flutter

架空医薬品・疾患データを扱う医療リファレンスアプリの参考実装。連携 mock-server と組み合わせて動作する Flutter アプリです。

Dart License pre-commit

ポートフォリオリポジトリのため外部 PR は受け付けません (Renovate Dependency Dashboard およびセキュリティ通知のため Issue は有効化)。


DISCLAIMER

このアプリの全ての医薬品・疾患・臨床情報は架空のサンプルデータです。医療判断・診断・処方・服薬判断その他のいかなる医療行為にも一切用いないでください。

This application contains FICTIONAL drug, disease, and clinical content. It is NOT medical advice and MUST NOT be used for diagnosis, treatment, prescribing, or any other medical decision.


検索画面 医薬品詳細画面 疾患詳細画面 ブックマーク画面
検索画面 医薬品詳細画面 疾患詳細画面 ブックマーク画面
閲覧履歴画面 計算ツール画面 BMI 計算ツール画面 eGFR 計算ツール画面 CrCl
閲覧履歴画面 計算ツール画面 BMI 計算ツール画面 eGFR 計算ツール画面 CrCl
ズーム 履歴削除
ズーム 履歴削除

主な特徴

  • mock-server 連携でオフライン開発可能 — Ktor 製の mock-server を 1 コマンドで起動し、全 HTTP 通信を fixture で完結
  • CI で trust 分類 + 4 shard golden VRT — 外部 PR を CI で拒否し、信頼済 PR のみ macOS runner 上で golden VRT を 4 shard 並列実行 (.github/workflows/ci.yml)
  • 独自 golden comparator — Roborazzi 仕様を Dart で clean-room 再実装 (test/golden/_comparator/、third_party 表記済)
  • l10n SSOT 整合 contract test — mock-server の Kotlin enum KDoc と Flutter 側 arb を test/l10n/drug_filter_alignment_test.dart で照合
  • 6 画面構成 — 検索 (医薬品・疾患セグメント切替・履歴ドロップダウン) / 医薬品詳細 / 疾患詳細 / ブックマーク / 閲覧履歴 / 計算ツール
  • 臨床計算ツール — BMI (体重/身長²) / eGFR (日本人係数式) / CrCl (Cockcroft-Gault 式) を独立モジュールで実装、計算履歴をローカル DB に保存

動かす

# 1. mock-server を起動 (別リポジトリ)
git clone https://github.com/Corvus400/fictional-drug-and-disease-ref-mock-server.git
cd fictional-drug-and-disease-ref-mock-server && ./scripts/setup.sh && ./scripts/start.sh

# 2. 本リポジトリで依存解決
flutter pub get

# 3. mock-server に接続する dev flavor で起動
flutter run --flavor dev -t lib/main_dev.dart

# Cloudflare ドメイン経由で BE に接続する場合
flutter run --flavor prod -t lib/main_prod.dart --dart-define-from-file=dart_defines/prod.json

mock-server の詳細は mock-server README を参照してください。


配布 / インストール

配布版は prod flavor でビルドし、Cloudflare ドメイン経由の BE (https://fictional-drugref.win) に接続します。

Android APK をダウンロード iOS TestFlight でインストール Privacy Policy

Android では上の Android APK download から最新リリースの app-prod-release.apk をダウンロードし、端末で提供元不明アプリのインストールを許可してから APK を開きます。配布 APK は release 署名で作成されるため、次回以降は同じアプリとして上書き更新できます。

iOS では上の iOS TestFlight から TestFlight の外部テスターに参加し、TestFlight アプリ経由でインストールします。配布中の最新ビルドは TestFlight 側で案内されます。


E2E テスト

E2E は Patrol で patrol_test/ 配下に実装しています。mock-server と emulator/simulator が必要なため CI や pre-push には含めず、手動で実行します。

flutter pub global activate patrol_cli 4.3.1
scripts/run-patrol-e2e-matrix.sh

scripts/run-patrol-e2e-matrix.shhttp://localhost:8080/health を確認し、mock-server が未起動の場合のみ隣接する mock-server リポジトリの scripts/start.sh を起動します。既定では Android emulator、iPhone Simulator、iPad Simulator それぞれで portrait / landscape を実行します。

Patrol の app/test server は既定ポート衝突を避けるため 18082 / 18081 を使います。必要に応じて FDDR_E2E_PATROL_APP_SERVER_PORTFDDR_E2E_PATROL_TEST_SERVER_PORT で上書きできます。


アーキテクチャ

lib/ を UI / application / domain / data の 4 層で分離しています。HTTP クライアント (Dio + Retrofit) と永続化 (drift / SharedPreferences) は data 層、UseCase と Riverpod Provider は application 層、不変な Domain Model は domain 層、Widget / Page は ui 層に集約しています。

graph TD
  UI["lib/ui — Widget / Page"]
  APP["lib/application — UseCase / Riverpod Provider"]
  DATA["lib/data — Repository / DTO / Mapper / API Client"]
  DOMAIN["lib/domain — Entity / ValueObject"]
  EXT["mock-server (Ktor) | SQLite (drift) | SharedPreferences"]
  UI --> APP
  APP --> DATA
  APP --> DOMAIN
  DATA --> DOMAIN
  DATA --> EXT
Loading

リポジトリ運用

  • 依存更新の PR は Renovate で管理しています。
  • GitHub Actions と workflow の依存更新は手動レビューで適用しています。
  • 外部 PR は CI で拒否されます (レビュー対象外)。
  • 一般的なサポート / 機能要望 / バグ報告は GitHub Issues では受け付けていません。
  • セキュリティ報告は SECURITY.md の手順に従ってください。

ライセンス

本プロジェクトは MIT License で公開しています。

サードパーティソフトウェア

本リポジトリは以下のサードパーティ成果物を同梱・参照しています。ライセンス全文は third_party/ および assets/fonts/ 配下に再掲しています。

ライブラリ ライセンス 用途
Roborazzi Apache-2.0 golden test 出力 (*_compare.png / *_actual.png / JSON schema) の仕様参照。test/golden/_comparator/ 配下の Dart 実装は clean-room 再実装。詳細は third_party/roborazzi/ を参照
Noto Sans JP SIL OFL 1.1 assets/fonts/ 配下に同梱。Reserved Font Name: "Noto"
Materialize CSS MIT ローカル golden test レポート (build/reports/golden/index.html) が CDN 経由で読み込み。再配布なし
DroidKaigi/conference-app-2025 Apache-2.0 ワークフロー設計の参照 (出力命名・ディレクトリレイアウトの将来 CI 互換性のため)。ソースコードは借用していない

About

Flutter portfolio sample app referencing fictional drugs and diseases. Built with Riverpod, Drift, and a Clean Architecture layout. All data is entirely fictitious.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages