やっと作りたいものが作れました.
前回同様ショートカットアプリとChatGPT、先日紹介したAutomation Controlに加えて少し前に流行った「心の声」の合作.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のiOSバージョン : iOS18.1.1
スポンサーリンク
Automation Controlの設定
前回は使用回数でしたが今回はバージョンアップして使用時間になりました.
それにあたってちょっと工夫はしています.
- Automation ControlのInputに以下を含む
・limit:1日の制限時間(分)
・sum:今日の合計時間(分)
・last day:前回開いた日付(yyyy/MM/dd) - 日付をまたいでアプリを開いたらsumをクリア
- last dayは前回との比較用
前回との変更点は上の通りです.
使用時間でチェックする上で問題だったのは、ログの取得はその時点での最新ひとつだけという点です.
ログを取ってから前回と比較することができないため、どこかに退避させる必要がありました.
そこでInputに単なる数やテキストを入れるのではなく、jsonを入れることで解決しました.
これでInputひとつでいくつものデータを制御できます.
Automation Controlの使い方はこちら.
Automation Control側のアイテムは例えば画像のような感じにします.
- Name:必須
- Description:任意
- Input:入力例↓
{"limit":100,"sum":1,"last day":"2024/12/2"}
limit:当日の制限時間(分)
sum:当日の合計時間(分)
last day:前回の使用日時→今日の日付を入れてください - Select Icon:任意
- Enabled:任意(オートメーション実行時に然るべき値になります)
- その他:任意
このアイテムを使い、該当アプリが開いたか閉じたか…でそれぞれでオートメーションを組みます.
(last dayの値にバックスラッシュが付いてますが、付けなくとも勝手に付くので気にしないでください)
アプリを開いたときのオートメーション
まずはアプリを開いたときに処理するオートメーションからです.
"Manage Item Input Variable"アクションで先程のアイテムを指定、Actionは"Get Variable"を選択します(Variable Valueは使わないです).
これで先程作ったjsonが取り出せるのでlast dayキーの値を取り出します.
Inputの"last day"を更新します.
今日と同じ日時なら自分自身を、そうでなければ"last day"を今日の日時にし、かつ"sum"の値をクリア(0)にして上書きします.
Inputの上書きには"Manage Item Input Variable"アクションを使います.
これで実行時に前回と同じ日ならInputはそのまま、そうでない(基本的には昨日)なら"last day"が今日になり、"sum"がクリアされて0にリセットされます.
上で上書きしたInputの"sum"の値は今日の使用時間に相当します、これを"usage"とでも名付けた変数に置いておきます.
続けて今回のアイテムのログを記録しておきます.
制限時間limitを取り出し、更新済みの"usage"を使ってChatGPTで質問させます.
どう言わせるかはお好みで.
アプリを閉じたときのオートメーション
次はアプリを閉じたときです.
まず"Manage Logs for Item"でアイテムの最新のログを取得します.
記録されたログの日付は「前回アプリを開いた日時」ですね.
このアクションの結果は文章付きなので「入力から日付を取得」で日時だけ取り出します.
この「前回アプリを開いた日時」と今の時間を取れば「前回アプリを開いて閉じるまでの時間」が分かります.
なのでこの2つの時間を取れば終わりなんですが、ショートカットには6時前後の日付が勝手に12時間増えるバグがあります.
なのでそれを巻き戻すレシピを組んでいます(赤く囲った部分).
バグが生じていると前者が12時間、つまり720分進んでいるため結果が720引かれてしまいます、なので結果が負数のときだけ720足してあげます.
なおこの方法だと1日1回はアプリを開かないと正しい処理になりません、2日以上空くと日付間の値は正の値になりますからね.
2日以上空いてかつ日付バグが生じている場合どうするかはまだ未解決です.
ログを取得した時点で12時間進んでいるのでレシピ内で判断がつかないんですよね…
続いてInputのうちsumの値を取り出します.
これはこの時点では「前回までの実行時間」に相当します.
なので「前回までの実行時間」と「今回の実行時間」を足し合わせれば「今回までの実行時間」になります.
これをInputに上書きします.
最後にAutomation ControlのStatusを活用します.
この時点でのInputの"limit"と先ほどの「今回までの実行時間」を比較し、limitを超えていなければStatusをONに、そうでなければOFFにします.
これでオートメーションは完了です.
実行
やはり回数よりも時間の方がリアルですね.
"sum"が"limit"に届いていない間はStatusは緑のままです.
"limit"を超えたかどうかで態度が顕著に変わるよう伝えるには工夫が必要そうです.
制限を超えるとちゃんとStatusがオフになります.
そして日付が変わってから開くと"last day"と"sum"が更新されます.
〆
まだ荒い点はありますが形にはなりました.
スクリーンタイムとはまだ違った使い道として採用してみてください.
2日空きつつ日付バグが生じる懸念については、オートメーションで毎日開くことでとりあえずは解決しますし(開きっぱなしが嫌ならその後「ホーム画面に移動」を使えばいいです).
ログの読み書きはメモアプリやファイルアプリでも出来ます、今回はAutomation Controlに拘ったというところがあります.