Android版

個人で Google Play に登録するのは大変なので、いわゆる野良APK です。 データは端末の中だけにあり、ネットワークは使いません。

動作環境

  • Android 7.0 以上

  • 64bit の ARM 端末(arm64-v8a)。スマホ・タブレットとも可

  • 実機で確認したのは Android 16(シャープ AQUOS sense8)と Android 10(TECLAST M40 タブレット)

インストール

GitHub の Releases から eyedrop.apk をダウンロードし、次のどちらかでインストールします。

スマホで直接インストールする

  1. スマホのブラウザで eyedrop.apk をダウンロード

  2. ダウンロードした eyedrop.apk をタップ

  3. 「この提供元のアプリを許可」を求められたら、ブラウザ(またはファイルアプリ)に許可してインストール

PC から USB 経由でインストールする

  1. スマホで「設定 → デバイス情報 → ビルド番号」を7回タップし、開発者向けオプションで「USB デバッグ」をオン

  2. スマホを USB で PC につなぎ、「USB デバッグを許可」で許可

  3. PC で次を実行(adb は Android SDK Platform-Tools に含まれます)

$ adb install -r eyedrop.apk

インストール直後はデータが空です。「目薬」タブで目薬を追加するか、 バックアップ(または CLI版の eyedrop.db)を「設定」タブの「ファイルから復元」で取り込みます。 アプリを上書きで更新してもデータは消えませんが、機種変更などに備えて 「設定」タブの「ファイルに保存」でときどきバックアップしてください。

署名の確認(フィンガープリント)

配布している APK は次の証明書で署名しています。 ダウンロードした APK が本物かどうかは、証明書の SHA-256 フィンガープリントがこれと一致するかで確かめられます。

  • 証明書: CN=kuma35

  • SHA-256: 97:4A:8A:A3:16:77:C6:CF:66:BA:03:AE:A0:47:88:37:CB:A8:07:05:83:62:6D:FD:34:35:8F:32:19:23:4D:A0

確認には Android SDK Build-Tools の apksigner を使います(keytool -printcert -jarfile では読めません)。

$ apksigner verify --print-certs eyedrop.apk
Signer #1 certificate DN: CN=kuma35
Signer #1 certificate SHA-256 digest: 974a8aa31677c6cf66ba03aea0478837cba8070583626dfd34358f3219234da0
...

画面と使い方

画面は下部のタブ(サマリー・目薬・一括棚卸し・設定)で切り替えます。 画面の例は サンプルデータ で、次回来院日を4ヶ月後にしたものです。 画面上部の「A-」「A+」で文字の大きさを変えられます。 左上のメニュー(≡)では、名前の表示(代表目薬名・目薬名)の切り替え、一括棚卸しタブへの移動、 サマリーのコピーができます。

来院の直前と当日の使い方

  1. 来院の直前に、手元の未開封の目薬を数え、「一括棚卸し」タブで「棚卸し実行」します(下の「一括棚卸し」参照)

  2. 実行するとサマリーに移るので、「次回来院までに必要な本数」を確かめます

  3. 来院日は、アプリを開くと出るサマリーを見せて(または読み上げて)、必要な本数を伝えます

  4. 処方された目薬は、「目薬」タブの各目薬の「入庫」で記録します

サマリー

サマリー

来院日(既定は今日)と次回来院日(既定は来院日の2ヶ月後)を表示し、 次回来院までに必要な本数を目薬ごとに計算します。 来院日・次回来院日は押すとカレンダーで変えられます。 表は横にスクロールでき、必要本数に続いて根拠(足りない日数・在庫残日数・未開封・通常期間・開封分残日数)を表示します。 計算のしかたは 推定のしくみ を参照してください。

目薬在庫・注意

下にスクロールすると「目薬在庫」(未開封の本数、開封中の1本の開封日・推定残日数、通常何日で使い切っているか)と、 廃棄期限を過ぎているなどの「注意」があります。 左上のメニューから、サマリーを Markdown・テキスト・チャットAI 用でコピーできます。

目薬

目薬タブ

目薬ごとのカードで、次の操作をします。

  • 開封(出庫): 新しい1本を在庫から出して使い始める。使っていた1本は使い切りとして記録

  • 入庫: 処方された本数を記録

  • 棚卸し: 未開封の本数を数え直したときに記録

  • 詳細: 目薬名・開封の履歴・在庫の履歴など

  • 利用終了: その目薬(代表目薬名ごと)を使わなくなったとき

上の「目薬追加」で新しい目薬を登録します。

目薬の詳細

目薬の詳細
  • 目薬名: ジェネリックなどで実際にもらう目薬の名前が変わったら「目薬を追加」。 代表目薬名(例: コソプト)はそのままで、目薬名(例: ドルモロール)を追加・利用終了できます

  • 随時: 毎日ではなく必要なときに使う目薬。必要本数を計算せず在庫だけ表示します

  • 廃棄期限設定: 「開封後4週間で廃棄」などの目安。過ぎると「注意」に表示します

  • 点眼パターン変更: 1日の点眼回数などが変わったとき。直近の1本をイレギュラーにし、 それより前の実績を推定に使わないようにします

  • 開封の履歴: タップでイレギュラー(推定に使わない)を切り替えます。 一番新しい開封は取り消せます

一括棚卸し

一括棚卸し

来院の直前に、使用中の目薬の未開封の本数をまとめて数え直します。 左上のメニューの「一括棚卸し」からも開けます。

  • 目薬ごとのカードに、記録上の未開封の本数が最初から入っています。 大きな「-」「+」で実際の本数に合わせます。記録と違う本数にすると 「記録上 2本 → 3本に修正」のように色が変わります

  • 文字を大きくしても、「-」「+」と本数は画面の幅に収まる大きさ(150%)までにしています

  • 日付は1つで、既定は今日です。日付を変えると、本数はその日の記録上の本数に戻ります

  • 「一括棚卸しコメント」(任意)に書いたコメントは、すべての目薬の棚卸しの記録に同じものが入ります

  • 「棚卸し実行」を押すと、本数が同じ目薬も「数えて確かめた」記録として、すべての目薬の棚卸しを記録します。 「一括棚卸し: 4件を記録(うち本数の修正 2件)」のように表示し、サマリーに移ります

  • 「記録上の本数に戻す」で入力を初めに戻せます

  • 本数を変えた(またはコメントを書いた)まま「棚卸し実行」をせずにほかのタブに移ろうとすると、 「一括棚卸しを実行していません」と確認します。「留まる」で一括棚卸しに戻り、 「構わず移動」で入力を消して移ります(何も記録しません)

目薬ごとに1つずつ棚卸しするときは、「目薬」タブのカードの「棚卸し」を使います。

設定

バックアップ(ファイルに保存・共有で送る)、ファイルから復元、年次更新、 次回来院日の既定の期間、表示(黒地に白)を設定します。

ビルド

Linux(Ubuntu 24.04 で確認)で APK を作る手順です。ビルドする PC には Python 3.10 以上が必要です (スマホには Python は不要です。APK に同梱されています)。

$ git clone https://github.com/kuma35/eyedrop.git eyedrop
$ cd eyedrop
$ python3 -m venv venv
$ venv/bin/pip install -r requirements.txt
$ cd mobile
$ ../venv/bin/flet build apk --yes --arch arm64-v8a    # → build/apk/eyedrop.apk
$ ~/Android/sdk/platform-tools/adb install -r build/apk/eyedrop.apk   # USB でつないだスマホへ
  • 初回のビルドは Flutter・JDK・Android SDK を自動で取り込むので時間がかかります(Android SDK は ~/Android/sdk)

  • 32bit の ARM 端末向けには --arch armeabi-v7a で作ります

  • APK は PC の開発用の鍵(~/.android/debug.keystore、自動作成)で署名されます。 上書き更新には同じ鍵で署名した APK が必要です。配布版の APK を入れたスマホに自分でビルドした APK を入れるときは、 先にバックアップを取ってアンインストールしてから入れ、「ファイルから復元」でデータを戻してください