はじめに
なんでこんなに時間がないんですかね?
個人開発もしたい。
試験勉強もしたい。
本も読みたい。
やりたいことはいくらでもあるのに、1日は誰にとっても等しく24時間。
ここ最近、資格勉強もさぼりがちで、個人開発なんていつできるんだ、なんて思っていました。
活動時間を増やそうと睡眠時間を削ると次の日のパフォーマンスが明らかに落ちてしまいます。
毎日やりたいことができていないけど、今日もスマホを開いている
仕事に家事・育児。確かに自由な時間は多くありません。
それでも、わずかに残っている自由時間まで溶かしていたのがスマホでした。
無意識でスマホを開き、手が勝手にスワイプし、
ビジネスチャットで社内の出来事を見続ける。
Instagramを開けば、レコメンドに流れてくる二郎系ラーメンをおいしそうに食べている人の動画を見る。
これは主体的に見に行っているんじゃなくて、受け身で見ているなと思いました。
中島みゆきさんが作詞・作曲を手掛けたTOKIOの「宙船(そらふね)」を聴くと、自分の人生のオールを、自分以外の何かに握らせてはいないか、と考えることがあります。
惰性でレコメンドを眺めている時間は、まさにそんな状態なのかもしれません。
ちょっとスマホで、今日はおやすみ
問題は、スマホを触っている数分そのものではありませんでした。
その割り込みによって、本当にやりたかったことに使う「まとまった時間」まで細切れになっていたことです。
少なくとも自分の場合、スマホを閉じた瞬間に元の作業へ100%戻れるわけではありませんでした。
集中を必要とすることに取り組むには、まとまった思考の連続性が必要になります。
細かな割り込みが何度も入ることで、その連続した領域が確保しづらくなります。
まずは、細切れに発生する「受け身のスマホ時間」という割り込みを減らすことにしました。
だから今回守りたかったのは、単なる「時間」ではなく集中できる時間の連続性です。
自分の意志力を信用しない
「見ないようにする」は再現性が低い
もう、このアプリを見ない!って決心したことは何度もあります。
ふとしたときに、スマホを開き、無意識のうちにスワイプ&タップをして、アプリを開いている自分にびっくりすることがありました。
意志ではなく、仕組みで
最近、あんまりしたいことができず、時間ばかり過ぎてることが悲しくなってきました。
どうにかしなければ!
開かないように頑張るのではなく、無意識に開いても、そのまま使い続けられないようにする。
人間の自制心に頼るのではなく、仕組み側で制約をかけるって話です。
どんな仕事でも、
「個々人で気をつける」よりも、「そもそも間違えにくい仕組みにする」方が再現性は高い。
自分の生活にも同じ考え方を持ち込んでみることにしました。
今回解決したかったこと
欲しかったのは、かなり単純な仕組みです。
無意識に対象アプリを開いても、そのまま使い続けられないようにしたい。
要件に落とし込む
特定のアプリだけを制限したい
対象にしたいのは、つい無意識に開いてしまう特定のアプリだけ。
制限するアプリと時間帯を変えれば、用途はいろいろ考えられます。
- ビジネスチャットなどの仕事アプリは、勤務時間外に使えないようにする
- XやInstagramは、勤務時間中に使えないようにする
- YouTubeは、22時以降使えないようにする
今回はこの中でも、仕事系のアプリを「平日の勤務時間だけ使える」ようにしました。
決めた時間帯だけ利用可能にしたい
今回設定した条件は次の通りです。
- 平日の9:00〜17:59だけ利用可能
- 9:00より前は利用不可
- 18:00以降は利用不可
- 土日は利用不可
- 祝日も利用不可
- その他のアプリには影響を与えない
- 通知は確認でき、必要なら制限を解除できる
実現までの過程
まずはiPhoneの設定を見る
最初に思いつくのは、iPhoneの「スクリーンタイム」でした。
スクリーンタイムでも曜日ごとの制限や休止時間は設定できます。
ただ、今回欲しかったのは「指定したアプリだけを平日9:00〜17:59に許可し、祝日は平日であっても使えない」という条件です。
スクリーンタイムだけでは、この条件をそのまま表現するには少し足りませんでした。
AIに相談
実現方法が分からなかったのでChatGPTに相談してみたところ、ショートカットの「オートメーション」を使う方法にたどり着きました。
自力でも調べられたと思いますが、「ちょっと困っている」程度の課題を実際に試すところまで持っていくハードルが、AIによってかなり下がったと感じます。
そもそもショートカット・オートメーションって?
iPhoneの「ショートカット」アプリでは、用意されている「アクション」を組み合わせて、一連の処理を作ることができます。
さらに「オートメーション」を使うと、
「特定の時刻になった」
「特定の場所に着いた」
「特定のアプリを開いた」
といったイベントをきっかけに、その処理を自動で実行できます。
今回は、「制限対象のアプリを開いた」ことをトリガーにして、利用してよい条件かを判定するオートメーションを作りました。
実装
処理の流れ
まず、対象アプリを「開いたとき」にオートメーションが実行されるようにします。
そこから先の判定は次の通りです。
対象アプリを開く
↓
オートメーション発火
↓
祝日? → ホーム画面へ戻して終了
↓
土日? → ホーム画面へ戻して終了
↓
9時より前 or 18時以降?
→ ホーム画面へ戻して終了
↓
そのまま利用
まずできたものがこちら
ひとまず動くものはできました。
ただ、かなり苦労しました。
if をネストしていくと、どの「その他の場合」がどの条件に対応しているのか、ぱっと見では分かりません。
動く。けど、読みづらい。
なんだこれ。
自分の本職を思い出す
そこで、自分が普段コードを書いていることを思い出しました。
ショートカットとソースコードはもちろん同じものではありません。
ただ、処理の流れを分かりやすくし、ネストを減らし、意図を読み取りやすくするという点では、普段コードを書くときの考え方がそのまま使えそうです。
実装Tips:デバッグで値が意図通りか確認したい
普段コードを書いているときなら、IDEなどを使って途中の値が意図通りになっているか確認します。
ショートカットでも同じことができないか調べたところ、「通知」を一時的に挟む方法が使えました。
リファクタリング前のスクショでは数字が次より小さい 900の場合の直下にある「通知」アクションです。
これで
- どこで処理が止まっているか
- 曜日が意図通りのフォーマットで取れているか
- 時間が意図通りのフォーマットで取れているか
を確認し、無事動くものができました。
意図通りに動いたときは普通に感動しました。ショートカットの可能性を感じました。
できあがったけど分かりづらい
処理を見返すと、処理の分岐が分かりづらくて考えました。
インデントレベルが分かる拡張機能とか入れればいい?
記事の読者から、「そこじゃない」と聞こえてきたような気がします。
もしこれが普段のコードなら、レビューで絶対に指摘されるポイントだと思います。
条件に該当した時点で処理を終了する、いわゆるアーリーリターンの形にすれば、深いネストを避けられそうです。
これ、ショートカットでもできないだろうか。
ChatGPTに相談してみると、「ショートカットを停止」を使えば実現できることが分かりました。
リファクタリング後のショートカットはこれ
リファクタリング後は、
「使ってはいけない条件なら、ホーム画面へ戻してその場で終了」
というガード節を上から並べる形になりました。
これによって、後続処理をすべて「その他の場合」の中に入れていく必要がなくなり、ネストが大きく減りました。
大変気分がいいですね。
土曜日と日曜日はOR条件で一つにまとめました。
時間判定も単純化できました。今回は9時・18時というちょうどの時刻が境界なので、HHmmのような文字列を作らず、「現在の日付」から「時」だけを取得して判定しています。
実装Tips:祝日判定の方法
祝日判定のために外部APIを呼び出す必要はありませんでした。
iPhoneには、端末に設定されている地域に応じた祝日カレンダーが用意されています。
今回は「カレンダーの予定を検索」で、
開始日が今日 かつ カレンダーが「日本の祝日」
という条件で予定を検索しています。
予定が1件でも見つかれば、その日は祝日と判定します。
※この方法は、iPhoneのカレンダーで「日本の祝日」カレンダーを利用できる状態になっていることが前提です。
実装Tips:日付フォーマット
曜日の判定には、日付のカスタムフォーマット EEEE を使いました。
EEEE を指定すると、日本語環境では「月曜日」「土曜日」のように曜日名を取得できます。
上記リンクに使えるフォーマットの紹介もあります。
なお、出力される曜日名は端末の言語・地域設定の影響を受けるため、今回は日本語環境を前提にしています。日時表示はロケールによって変わり得ることもAppleが案内しています。
実装Tips:処理を終わらせるには
ガード節にするには、「ホーム画面へ移動」したあとに「ショートカットを停止」を入れる必要があります。
ホーム画面へ戻しただけでは、処理そのものは終わっていないので、そのまま次のアクションへ進んでしまいます。
コードを書いているときなら当たり前に考えることなのに、ショートカットになるとなぜか抜け落ちるんですよね。
Appleのドキュメントにも、「停止」アクションはSwiftのreturnやbreakに似ていると説明されています。
実装Tips:ショートカットファイルをAIに渡してみる
驚きなんですが、ショートカットをファイルとして出力し、それをChatGPTに渡すと、中身を解析し、リファクタ案をファイルで出力してくれました。
生成されたファイルをiPhoneで開くと、リファクタリング後の内容をUI上で確認できました。
残念なことに生成されたファイルを見ることはできますが、そのままiPhoneでショートカットに登録することはできませんでした。
セキュアですね!
macOSには、書き出したショートカットへ署名するshortcuts signコマンドが用意されています。
ただし、今回AIが生成したファイルをMacで署名すればそのまま利用できるかまでは検証していません。
それでも、ChatGPTが生成したショートカットの内容をiPhoneのUI上で確認できたというだけでも驚きでした。
完成品をそのまま使うところまではいきませんでしたが、ショートカットを作ったり改善したりするハードルは、さらに下がりそうです。
※ ショートカットや設定ファイルを外部サービスに渡すときは、念のため中身を確認し、出して問題ない情報だけを扱うのがおすすめです。
実際に使ってみての変化や思ったこと
無意識に開いていることに気付けるようになった
設定後も、癖で対象アプリをタップすることはあります。
条件外ならすぐホーム画面へ戻されるので、
「あ、今また無意識に開こうとしていたな」
とそこで初めて気付きます。
使ってみて1か月くらい経ちますが、今でも無意識でタップして、ホーム画面に戻されます。
自分が怖いです。
習慣って恐ろしいものですね。
その反面、良い習慣を身につけると、人生も少しずつ良い方向に変わっていくんだろうなと、自己啓発本やビジネス書を読んだ後のようなことを考えていました。
生活にメリハリがついた
受け身でスマホを眺める謎の時間がかなり減ったことで、仕事時間、家族時間、個人の活動時間のメリハリがついたと思います。
一番大きかったのは「時間」より「思考の連続性」
この仕組みを入れて一番大きかった変化は、
「1日に何十分も時間が増えた」
ことではないです。
細かな割り込みが減ったことで、
一つのことを考え続けられる時間が増えたこと
です。
スマホを見る2分間だけではなく、そこから元の作業へ戻るまでに発生していたスイッチングコストも減りました。
結果として、
個人開発をする。
本を読む。
資格試験を勉強する。
そんな、ある程度まとまった集中を必要とする作業に入りやすくなりました。
AIで「小さな課題」を仕組みに変えるハードルが下がった
自力で調べても実現できたと思います。
でも「調べてまで解決するほどではない」と放置していた可能性が高いです。
AIによって、課題を感じてから試作品を作るまでの初動コストが下がったと感じます。
おわりに
今回やったことは、かなり小さな仕組みです。
ただ、「見ないように頑張る」のではなく、
「そもそも簡単には使い続けられない状態を作る」だけで、思っていた以上に生活にメリハリがつきました。
日常の中で「毎回気をつけていること」があれば、それは仕組みに任せられないか、一度考えてみるのもよさそうです。
私はひとまず、空いた時間で資格勉強を進めたり、ジムで運動したり、そして今こうしてこの記事を書いています。
自分のオールで、自分の船を前に進めていきます!

