見出し画像

【開発してみた】ICカードでスマート勤怠管理「WorkClock」|医療情報技師が自作したWindowsアプリ

こんにちは、「猫@医療情報技師」です。
今回は、生成AIでプログラム作成にハマった私が自作の勤怠管理ツールを作成しました。

その名も「WorkClock」。

ICカードの社員証(MIFARE)をかざすだけで、出勤・退勤をスマートに記録。クラウドでしっかりデータを管理できる、Python製の軽量なWindowsアプリケーションです。


🎯 開発のきっかけ

上司から「あの事業所だけ勤怠管理システムの予算が通らなかった」の一言から、最終的に「作って」と依頼されたのがはじまり。

ずっと「紙の出勤簿」で、アナログな勤怠管理が業務負担になっている現場、ようやく勤怠管理システムの予算が通ったと思いきや、なぜあの事業所だけ通らなかった!?

なので「社員証をかざすだけで、記録から集計、バックアップまで完結できたら…」と、このプログラム作成がスタートしました。


💡 WorkClockとは?

「WorkClock」は、ICカードをかざすだけで出退勤を記録できるWindowsアプリケーションです。
カードを読み込むと、自動で出勤・退勤を判断し、クラウド(Google Sheets または Firebase)に保存されます。

システム全体像

🔁 WorkClockの仕組み(システムフロー)

実際の動作はどうなってるの?と気になる方も多いと思います。
ここでは、社員証をかざしてから、出勤 or 退勤が記録されるまでの流れをご紹介します。

✅ Step-by-Stepの流れ

  1. 職員が社員証をかざす  → MIFAREカード対応リーダーに「ピッ」とかざします。

  2. ネットワーク接続をチェック  → オフラインなら、その場で処理は止まり、エラー通知が出ます。

  3. カード情報の読み取り&職員データを照合  → 事前に登録された情報があるかどうかを確認します。

  4. 出勤 or 退勤の自動判別  バックエンドがどちらかによって処理方法が変わります:

システムフロー

🔍 主な特徴とこだわりポイント

  • 完全自動処理
     カードをかざすだけで出勤・退勤を自動判定

  • 通知で安心
     音声&画面でリアルタイムにフィードバック(「出勤です」「退勤です」など)

  • クラウド&ローカル保存の二重構造
     Google Sheets / Firebase Firestore + SQLiteでデータを安全に保管

  • セキュリティ設計
     カードIDはSHA-256ハッシュ化、認証情報はWindows DPAPIで暗号化

  • 職員登録も簡単
     未登録のカードをかざすと自動で登録画面を表示

  • システム常駐型
     タスクトレイに常駐し、シンプルなUIで操作も直感的


⚙️ システム構成

項目内容対応OSWindows 10 / 11使用技術Python / wxPythonカード対応MIFAREカード(USB接続)保存形式Google Sheets / Firebase / SQLiteバックアップ自動(毎日AM3時)+手動+起動時、最大30世代保持
※ICカードの読込みはひつじかいの雑記帳さんのSheepSmartCard.Dllをお借りしました。ただ、サイトがもうないようですね・・


👨‍💻 開発中に意識したこと

✔ 「API設定をわかりやすく説明」

初期設定では認証キーの作成方法の手順も表示出来るように設定。出力方法などを表示可能。ウィザード形式でガイドし、運用開始までのハードルを極力下げました。

✔ 「基本は常駐タスクトレイ」

普通に利用する端末なので、邪魔にならないようにタスクトレイに常駐。
トレイアイコンから直感的に勤怠表示・職員登録・設定変更が行えます。

タスクトレイメニュー

✔ 「セキュリティで認証キーを守る」

認証コードは大切な情報。これはローカルDBに暗号化して保存。
DBを抜き取られても、その端末、ユーザーでないと複合化出来ないようにしました。

ハッシュ化/暗号化/複合化

✍ 今後の展望(願望)

「出退勤の可視化を強化したい」という声をさらに反映し、今後は以下の機能強化も視野に入れています:
(多分そこまで求められないでしょうけども。)

  • Webダッシュボードでのリアルタイム表示

  • 管理者向けのアラート通知機能

  • モバイル対応(ICカード→NFCスマホ対応)など


🙌 最後に

このシステムは、私の手が届かない場所でも安定して動作する必要がありました。だからこそ、今回はできる限り堅牢なツールとして仕上げることを意識し、開発には一カ月を費やしました。Claude様バンザイ。

今回、初めてAPI連携にもチャレンジ。意外とすんなり動いてくれて、ちょっと感動しています。ただ、FireStoreの設定は手強かったです。あれは…慣れなんでしょうかね。

これまで病院という環境柄、ローカル環境にこだわってきましたが、今後はクラウドを活用したシステム構築にも取り組んでいきたいと考えています。

今後も、不定期ではありますが、こういった開発の記録やちょっとした工夫などを投稿していく予定です。
よろしければ、また覗いてみてくださいね。

それでは、またお会いしましょう!

いいなと思ったら応援しよう!