Skip to content
jphacksPublic

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

148 Commits

Folders and files

Repository files navigation

ToDo〆~る - 「あと1分だけ」にトドメを

「ついついスマホを開いてしまう」を、やることが進む前向きなきっかけに。

image

SNS × Tech|チーム:あと1分だけ

ToDo〆~るは、ついスマホでSNSを開いてしまう瞬間に、AIチューター「アリ」がアドバイスし、やるべきことの遂行を後押しするiPhoneアプリです。

ついついスマホを開けてしまったことが、やることが一つ進むプラスのきっかけになる体験を目指します。

デモ動画

  • オンボーディング画面
demo_onboarding.mp4
  • 【メイン】ついSNSを見てしまったとき
demo_sns.mp4
  • ToDoを自分で消化するとき
demo_todo.mp4

解決したい問題

😞 よくある悩み

問題点:やることがあるのにSNSを開き、やることが進まず、そんな自分に落ち込んでしまう。

やることがあるのは分かっているけれど、ついSNSやゲームを開いてしまって、自己肯定感が下がってしまう。

このネガティブなイメージを、やることが進む前向きな体験へ変えられないか、と私たちは考えました。

❤️‍🔥 その「ついスマホを開けてしまう」をポジティブに

解決策:スマホを開くきっかけを、やるべきことが進むプラスのきっかけに変えることを目指します。

ついついスマホを開いてしまったときに、AIチューター「アリ」が、普段のリマインダーにある本人のやることを踏まえてアドバイスします。

SNSやゲームを開いてしまったとき、この「アリ」と対話することで、

  • 今SNSやゲームを開かなければいけない理由が明確化される。

  • 今やるべきことを思い出せる。

  • やるべきことを楽しく遂行し、自己肯定感が上がる。

などのメリットが得られます。

同じ「スマホを開く」という行為でも、「SNSに時間を使ってしまった」という後悔から、「やることを一つ進められた」という前向きな実感につなげたいと考えています。

👤 こんな人に使ってほしい

課題や家事など、やることがあるのに、SNSやゲームを開いてしまう、そこのあなた!

対象は、「本当はやらなければいけないことがあるのに、ついSNSやゲームを開いてしまう人」です。

学生に限らず、一人暮らしの社会人など、生活のやることを後回しにしがちな人を想定しています。

ターゲットの例 困りごと ToDo〆~るで目指す体験
課題の途中でSNSを開く学生 書き出しで手が止まり、SNSを見続けてしまう リマインダーにある課題を確認し、「まずここだけ」と取り組む内容を選ぶ
家事の前にゲームを開く社会人 息抜きを始めると、洗濯や片付けに戻れない 家事を一つ選び、取り組んだ時間や完了をふりかえる
やることの途中で連絡を確認したい人 制限中でも、今確認する必要がある 利用目的と、その後に取り組むことを相談し、ルールの範囲で短時間利用する

「ToDo〆~る」の使い方

ToDo〆~る は、Apple標準リマインダー・Screen Time・端末内AIを組み合わせ、「ついついスマホを開いてしまう」ことを、やるべきことの遂行につなげるアプリです。

image

基本の利用フロー:

  1. 連携するリマインダーのリストと、制限するアプリ、アプリごとの1日の上限を選ぶ。
  2. SNSが上限に達したら、ToDo〆~る本体で「やることに取り組む」「アリに相談する」の行動を選ぶ。
  3. やることに取り組んだ場合は、時間を記録してふりかえり、獲得したSNS時間を利用したいアプリへ追加する。
  4. アリに相談した場合は、利用目的とやることを踏まえて対話する。短時間利用の提案をアプリ側が検査し、条件を満たした場合に利用枠を発行する。
  5. 利用枠を使い切ったら再び制限し、やることを選び直す。

✨ 設計のこだわりポイント

  1. 「ついつい開く」を、やることが進むきっかけに

    スマホを開いたときに、アリが本人のやることを思い出させ、具体的な取り組みを後押しします。

    Apple標準リマインダーの選択したリストから、やること・期限・完了状態を取得する設計にしました。新しいToDoアプリへの入力し直しを減らし、普段の課題や家事をそのまま取り組みの対象にできます。

    取り組み後は「完了にする」「まだ続ける」を選んでふりかえります。現在の実装では、25分の取り組みごとにSNS時間5分、やること1件の完了で1分を獲得できます。完了報酬は、リマインダーの更新に成功した後に付与します。

  2. 「今使いたい理由」を相談できる

    「何となく見たい」と「集合場所の連絡を確認したい」では、必要な行動が異なります。

    アリは、本人のやることと会話をもとに、事情の確認、やることへの小さな着手、短時間のSNS利用を提案します。

    例えば「連絡を確認したらレポートに戻る」と伝えた場合に、必要性と利用後の行動を確認する、といった対話を想定しています。

    現在のルールは相談が初期設定で1日3回まで(設定で変更可能)、1回の相談でユーザーの発言は最大5通、納得度80%以上で1〜5分の利用が可能です。利用にはアプリ側の検査と監視登録の成功が必要で、1日の区切りは午前4時です。

  3. アリとキリギリスと一緒に、変化を見つける

    童話「アリとキリギリス」をモチーフに、アリを相談相手、キリギリスをユーザーの分身として描きました。

    会話の納得度や取り組みの進み具合を表情で伝え、数値だけでは感じにくい変化を見えるようにしています。

    会話ではユーザーを責めず、短く具体的な次の行動を提案することを重視しました。相談の途中からでも、やることを選んで取り組みに進める導線を用意しています。

🐜 ToDo〆~るは、よくある利用制限アプリ・ToDoアプリではない!

課題へのアプローチ ToDo〆~るで結びつけたこと
利用時間の上限による制限 制限に加えて、本人のやることを確認し、着手する内容を選ぶ導線を用意
ユーザーから始めるAI相談 SNSを使いたい場面から相談へ進み、利用理由と本人のやることを一緒に扱う
やることの一覧・通知 取り組み・ふりかえりと、SNS時間の獲得・利用を一連の操作につなぐ

これによって...

  • 「ついついスマホを開いてしまう」を、やることが進む前向きな体験につなげる。
  • やることが進まない自分への落ち込みを、「一つ進められた」という実感へつなげることを目指す。
  • SNSに流れそうなときに、今取り組めるやることを思い出す。
  • 大きなやることにも、まず小さな一歩から着手する。
  • 必要なSNS利用について理由と戻る先を考え、区切りをつける。
  • 取り組んだ時間や完了をふりかえり、次の行動につなげる。

起動方法

  • 開発(ビルド時):Mac / Xcode

  • テストデバイス:iPhone (iOS26.0以上)

  1. 事前準備(言語・権限の設定)

    • 端末内AIを使用するため、テストデバイスでFoundation Modelsが利用可能であることが必要です。また、SiriとAppleIntelligenceの言語設定を統一してください。

    • iOSのスクリーンタイムと連携するため、Family Controls / App Groupsに対応するTeam・プロファイル・App Groupの設定が必要です。

  2. アプリのビルド

    xcodebuild -project todomeru_ios/todomeru_ios.xcodeproj -scheme todomeru_ios -configuration Debug -destination 'generic/platform=iOS' -quiet build

技術スタック

使用したフレームワーク

  • SwiftUI / Observation
  • Foundation Models(端末内AI)
  • Screen Time API(FamilyControls / ManagedSettings / DeviceActivity)
  • EventKit(リマインダー連携)
  • Swift Charts(利用時間のグラフ)
  • Swift Testing(テスト)

主要なドメイン

1. 端末のスクリーンタイムの取得・操作

選択したアプリの使用時間を表示し、アプリごとの1日の上限に応じて利用を制限します。 本体が設定と利用枠を管理し、OSから呼ばれる拡張機能が監視・制限・使用時間の表示を担当します。

データフロー

認可・アプリ選択・上限設定 → ScreenTimeService → DeviceActivityへ監視登録
上限到達・利用枠の消費 → TodomeruMonitor → ManagedSettingsで制限画面(Shield)を適用
OSの利用記録 → PlayTimeReport内で集計 → 使用時間・合計・週次グラフを表示
  • 認可と選択: FamilyControlsで本人の認可を求め、OS標準の画面で対象アプリを選びます。選択結果は中身を直接読めないトークンとして端末内に保存します。
  • 制限の監視: 午前4時を区切りに日次上限を監視します。上限0分で追加時間や有効な利用枠もないアプリは、通知を待たずに制限します。
  • 制限画面と本体: Shieldの表示とボタン操作は専用の2拡張が担当します。本体のチャットは別画面で、iOS 26.5以降はボタンから本体を開く処理、それ以前は手動で開く案内を用意しています。
  • 一時利用と再制限: ポリシー検査・監視登録・保存に成功してから解除します。利用枠は対象アプリの実利用時間で消費し、使い切るとMonitor拡張が再制限します。
  • プロセス間の共有: 本体と拡張はApp Groupで設定・上限到達・利用枠終了などの状態を共有し、本体への復帰時にも照合します。
  • 使用時間の扱い: 実使用時間はReport拡張内だけで集計・表示し、本体へ書き戻しません。本体からは上限や取り組み時間を渡し、約60秒ごとや復帰時に表示の更新を試みます。

主な実装: ScreenTimeService.swift / TodomeruMonitor.swift / PlayTimeReportExtension.swift

2. 端末のリマインダーの取得・操作

Apple標準リマインダーをやることの正本とし、普段登録している課題や家事をそのまま取り組みの対象にします。 ReminderServiceがEventKitとの接続を、AppStoreが連携リストの設定・取り組み記録・報酬の管理を担当します。

データフロー

リマインダーへの認可・リスト選択 → EventKitで取得 → TaskItem → ホーム・相談・取り組み画面
ふりかえりで「完了にする」 → EventKitへ保存 → 成功後に完了表示と報酬を更新
取り組み・完了の報酬 → AppStoreの台帳 → 選択したアプリの利用時間へ追加
  • 認可と対象: 初回設定でリマインダーへのフルアクセスを求め、連携するリストを選びます。選択したリストIDは端末内のJSONへ保存し、設定画面から変更できます。
  • 取得するデータ: 選択リストの未完了タスクと当日完了したタスクを取得し、ID・名前・リスト・期限・優先度・完了状態などをTaskItemへ変換します。メモや関連文書の中身は取得しません。
  • 一覧と相談への接続: ホームの「今日」は期限切れも含む未完了と当日の完了、「すべて」は期限なしも含む未完了を表示します。相談では今日の未完了を優先し、なければ全未完了から最大4件を候補にします。
  • 外部変更の反映: 起動・復帰時やホームの手動更新で再取得します。タスク選択画面から取り組みを始める際も再取得し、対象の存在と未完了状態を確認します。
  • 完了と報酬: ユーザーの完了操作をEventKitへ保存できた場合だけ、完了報酬の1分を記録します。取り組み時間の報酬とは分けて記録し、同じ完了への二重付与を防ぎます。
  • 保存の分担: リマインダー一覧はサービスのメモリに保持して再取得し、アプリ独自の取り組みや報酬はJSONに保存します。AIの発言だけでリマインダーを完了にする処理はありません。

権限なしとタスク0件を分けて表示し、完了の保存失敗時は再試行を案内します。 主な実装: ReminderService.swift / TaskSelectViewModel.swift / ReflectionViewModel.swift

3. AIとの会話

アリとの文字による相談を通じて、今アプリを使いたい理由を整理し、やることへの着手や短時間の利用につなげます。 PersuasionViewModelが会話の進行を、AIProviderが生成方式の選択を、UnlockPolicyが利用条件の検査を担当します。

  • 入力する情報: 対象アプリの呼び名、候補タスクの名前・リスト名・期限、今回の会話を渡します。履歴は今回の入力を含めて直近8メッセージ・合計2,000文字以内に絞ります。
  • AIの切り替え: APIキー設定時はClaude API、キーがなければ利用可能なFoundation Models、どちらも使えなければキーワードによる固定応答を選びます。生成に失敗した場合も固定応答へ切り替えます。
  • データの処理先: Foundation Modelsは端末内で生成します。Claude APIを使う場合は、タスク名や会話などの入力をAnthropicのサーバーへ送信します。
  • 返答の形式: 返答文・0〜100の納得度・次の行動・提案タスク・利用秒数を共通のAIReply型で扱います。タスク名や会話はデータとして扱い、解除ルールを変更する命令として扱わないよう指示します。
  • 利用の判定: 納得度80%以上で、相談の有効性・回数上限・既存の利用枠をアプリ側が検査します。利用時間は1〜5分とし、AIの提案秒数が範囲外・未指定なら5分を使います。
  • 会話の管理: 1回の相談はユーザーの発言が最大5通、1日の回数上限は初期値3回で設定可能です。会話・相談回数・利用枠はAppStoreが端末内のJSONへ保存します。

AIの返答だけでは制限を変更せず、監視登録や保存に失敗した場合も解除しません。 主な実装: PersuasionViewModel.swift / AIContract.swift / UnlockPolicy.swift

力を入れた点

  • UI/UX(Figma)
    • モチーフ:SNSを使おうとするキリギリス(ユーザー)を、アリ(AI)がやることへ向かうよう促します。
    • 操作性:制限画面のボタンは「やることを先に片付ける」「AIに相談する」の2通りにしました。
    • デザイン:アリとキリギリスが対話しているようなチャット画面を設計しました。
  • AIとのスムーズな会話
    • リマインダーの情報: 本人のやることの名前や期限を会話に取り込み、今の状況に合った声かけや、着手しやすい最初の一歩の提案につなげています。
    • プロンプト設計: ユーザーを責めず、短い返答と具体的な提案を返すよう調整しました。質問は一度に1つとし、回答済みの内容を聞き直さないよう指示しています。
    • AIの納得度: 今アプリを使う必要性や利用後の行動の具体性を評価するようAIに指示し、「納得度」を0〜100で表示します。80%以上でアプリ側の条件検査へ進み、短時間の利用につなげます。

今後の展望

  • TestFlightやApp Storeを通じたアプリの配布を目指します。

  • Androidにも対応し、より多くのユーザーが利用できるようにしていきます。

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

Generated from jphacks/JP_sample