【要約】勉強した分だけ Mac を使える家庭内ツールを作った [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
親が子どものMac利用時間を管理する際、単なる時刻指定の制限では「学習量に応じた報酬」という柔軟な運用が困難であった。従来の管理手法では、以下の課題に直面していた。
- ・既存のスクリーンタイム機能では、学習量と利用時間の連動が難しい。
- ・「20時まで」といった時刻ベースの制御では、学習による時間の加算が実現しにくい。
- ・管理のしやすさと、子どもが自律的に学習する動機付けの両立が課題であった。
// Approach
開発者は、時刻ベースの許可ではなく、利用可能な「残り秒数」を管理する残高モデルを採用し、AWSを活用したサーバーレス構成で実装した。
- ・設計の転換: 「AllowUntil(許可時刻)」から「RemainingSeconds(残り秒数)」へモデルを変更。
- ・バックエンド構成: API Gateway、Lambda、DynamoDBを用いたサーバーレスアーキテクチャ。
- ・Mac側制御: LaunchDaemonとPythonを用い、定期的にAWSへ残高を問い合わせるエージェントを実装。
- ・セキュリティ対策: device token、HMAC、nonceを導入し、リプレイ攻撃やなりすましを防止。
// Result
この仕組みにより、親はWeb UIを通じて、子どもの利用状況をリアルタイムに把握・制御できるようになった。
- ・体験設計の実現: 親向けUIにより、残り時間や利用履歴を1画面で可視化。
- ・拡張性の確保: 将来的な学習ドリルとの自動連動を見据えたデータモデルを構築。
- ・運用の安定化: 通信失敗時の猶予期間設定や、親アカウント利用時のカウント除外などの例外処理を実装。
Senior Engineer Insight
> 家庭内ツールとしてはオーバーエンジニアリングだが、IoT的な「状態監視・判定・制御」のサイクルが極めて綺麗に設計されている。特に、時刻ベースではなく「残高ベース」に設計を切り替えた点は、要件の抽象化として非常に優れている。実戦では、通信遅延やオフライン時の挙動(猶予期間の設定)が重要となるが、そこまで考慮されている点は評価できる。スケーラビリティとコストのバランスもサーバーレスで最適化されている。