iOSアプリ「うちのデグー」を、ヒーローズ・リーグ2026に応募しました。
キャッチコピーは、小さな毎日を、家族みんなで残す。 です。
この記事では、前半で一般の方向けに「家族で世話の抜け漏れを減らすアプリ」としての使い方を、後半で技術者向けにCloudKit・Widget・AppIntentの構成を紹介します。作品ページと紹介動画へのリンクは記事の最後にあります。
応募概要
- 応募先:ヒーローズ・リーグ2026
- 作品名:うちのデグー
- キャッチコピー:小さな毎日を、家族みんなで残す。
- プラットフォーム:iOS(App Storeで公開中)
紹介動画
動画が表示されない場合は、YouTubeで見るからご覧ください。
なぜ作ったのか
我が家には「こげ」というデグーがいます。
デグーのお世話は、餌、水、掃除、部屋んぽと、毎日の細かな作業の積み重ねです。家族で暮らしていると、これを誰か一人が全部やるわけではありません。朝は自分、夜は家族、ということが普通にあります。
そこで起きるのが、「もう餌あげた?」という確認の問題です。
あげたかどうか分からないので、念のためもう一度あげる。逆に、誰かがあげただろうと思って、誰もあげていない。水の交換も、掃除も同じです。一つひとつは小さなことでも、毎日のことなので抜けや重複が起きやすい。
必要なのは日記ではなく、家族全員が「今日は誰が何をしたか」を同じ画面で見られることでした。それがこのアプリの出発点です。
どんなアプリか
ワンタップでお世話を記録
ホーム画面の「ワンタップ記録」で、餌やり・給水・掃除・部屋んぽなどをすぐに記録できます。お世話の直後に、手を止めずに残せることを一番大事にしました。
体重・日記・リマインダー
体重を記録してグラフで振り返れます。写真付きの日記や、お世話のリマインダーも管理できます。
体重は、記録を振り返るための用途として使っていただくものです。体重の目安や変化の見方については、デグーの体重の目安・月齢別の体重表の記事にまとめています。
家族で共有
招待コードで家族が参加でき、お世話の記録を家族で共有できます。誰が記録したかも表示されるので、「今日は誰が餌をあげたか」がひと目で分かります。
複数のデグーに対応
デグーは複数で飼うことも多い動物です。複数のデグーを登録して、それぞれの記録を管理できます。
ウィジェットから記録
ホーム画面のウィジェットから、アプリを開かずに記録できます。
部屋んぽタイマーなど
部屋んぽ(ケージの外で遊ばせる時間)のタイマーなど、お世話の場面で使う機能も入れています。
ここから技術の話
技術構成
| 役割 | 使っているもの |
|---|---|
| 言語・UI | Swift / SwiftUI |
| 端末内のデータ | SwiftData |
| 家族共有 | CloudKit(公開データベース) |
| 変更の通知 | CKQuerySubscription |
| ウィジェット | WidgetKit / App Group |
| ウィジェット・ショートカットからの操作 | AppIntents |
| 部屋んぽタイマーのLive Activity | ActivityKit |
| グラフ | Swift Charts |
| アプリ内課金/機能解放 | StoreKit 2 |
| PDFレポート生成 | ImageRenderer |
独自サーバーを持たずに、家族で共有する
家族共有を実現するために、このアプリは独自のサーバーを持っていません。CloudKitを使った家族共有です。
家族はそれぞれ自分のiPhoneを使い、別々のApple IDを持っています。この別Apple ID間で記録を共有するために、CloudKitの公開データベースを使い、家族ごとの記録をまとめる構成にしました。
6文字の招待コード
家族の参加は、6文字の招待コードで行います。最初の一人が家族を作ると招待コードが発行され、ほかの家族はそのコードを入力して参加します。
アカウント登録やメールアドレスの交換をしなくても、コードを伝えるだけで家族に加われる。家族向けのアプリでは、この「最初の一歩」の軽さが大事だと考えました。
同期の衝突は last-write-wins
複数の端末から同じ記録を編集すると、どちらの変更を残すかを決める必要があります。このアプリでは、最後に書き込まれた変更を採用するlast-write-winsの方針にしています。
お世話の記録は、同じ項目を家族が同時に編集し合うような性質のデータではありません。複雑な結合ロジックを持つより、シンプルで予測しやすい規則の方が、家族向けのアプリには合っていると判断しました。
削除は tombstone で伝える
同期で見落としやすいのが削除です。ある端末で記録を消しても、ほかの端末からは「消えた」のか「まだ届いていない」のかが区別できません。区別できないと、消したはずの記録が別の端末から戻ってきてしまいます。
そこで、削除した記録はすぐには消さず、「削除済み」という印(tombstone)を残して同期します。ほかの端末はこの印を受け取って、自分の手元からも記録を消します。
CKQuerySubscription で記録の追加を知らせる
家族の誰かが記録すると、ほかの家族の端末にも反映される必要があります。CloudKitのCKQuerySubscriptionを利用して家族の記録追加などを通知し、その通知をきっかけに最新データを取得します。
通知はあくまで「新しい記録がある」ことを知らせるきっかけで、データそのものは通知を受けた端末がCloudKitから取得します。
Widget・AppIntent・ActivityKit で日常操作を短くする
毎日何度も行う記録だからこそ、アプリを開くまでの手間も削りたいと考えました。
- WidgetKit:ホーム画面のウィジェットに記録の状況を表示します
- AppIntents:ウィジェットのボタンから、アプリを開かずに記録できます
- App Group:アプリ本体とウィジェットでデータを共有します
- ActivityKit:部屋んぽタイマーをLive Activityとして表示します
技術構成図について
ProtoPediaの作品ページには、CloudKitを使った家族共有の技術構成図を掲載しています。これは実際のアプリ画面ではなく、技術構成を説明するための図です。端末・CloudKit・ウィジェットの関係を図で確認したい方は、ProtoPediaの作品ページをご覧ください。
ヒーローズ・リーグで見てほしいところ
- 単なるペット日記ではなく、家族で役割を共有するための設計 記録を残すこと自体より、「今日は誰が何をしたか」を家族で共有して、お世話の抜けや重複を減らすことを目的にしています。
- 独自サーバーを持たず、CloudKitで共有を実現していること CloudKitの公開データベースと6文字の招待コードで、別Apple ID間の家族共有を実現しました。last-write-wins と tombstone による削除伝播で、同期の扱いをシンプルに保っています。
- Widget / AppIntent / ActivityKit まで含めて、日常の操作を短くしていること 毎日何度も行う記録だからこそ、アプリを開かずに済む導線まで作り込みました。
作品ページ・紹介動画・ダウンロード
ProtoPediaでは、作品の詳細と技術構成図を確認できます。 ProtoPedia「うちのデグー」
YouTubeでは、紹介動画を見られます。 紹介動画を見る(YouTube)
App Storeから、iPhoneで利用できます。 App Storeで「うちのデグー」を見る
アプリの機能は「うちのデグー」アプリページに、家族でお世話を記録するコツはこちらの記事にまとめています。YutarouLabsのほかのアプリはアプリ一覧からご覧いただけます。