アプリを開かなくても、次の予定と着地が見える
この記事は、自社の業務アプリ DataParade Core の事例の一部です。全体は 特設ページ にまとめています。
この記事が満たす要求: 「開いた瞬間に「今、最初にやること」が分かる」(特設ページ /00 の一覧)
iPhoneとiPadのホーム画面に、アプリのウィジェットを置いています。次の予定、今、最初にやること、きょう何をしていたかの小さな絵、今期の着地。アプリを開かなくても、端末を手に取れば見えます。
ウィジェットは小さな画面ですが、作るのにいちばん手こずりました。何を載せ、どう更新し、どこで止まったかを書きます。

載せるのは「次の一手」と「きょうの絵」
ウィジェットの中身は3つの大きさで少しずつ違います。小さいものは次の予定だけ。中くらいは次の予定と今、最初にやること、そしてきょうの絵。大きいものはそれに通知と今期の着地が加わります。

「きょうの絵」は、手を動かした時間を棒で、AIの作業と心拍と体の動きを線で描いた24時間の小さなグラフです。ホーム画面の「この日、何をしていたか」と同じ材料を、同じAPIから受け取っています。ウィジェットの中で計算はしません。数字はサーバーが1か所でまとめます。
予定の枠は「出せるだけ出す」ことにしました。行数を手で決めると、余白が残ります。何行入るかは端末の側で測って決めます。
更新は、端末を手に取ったとき
ウィジェットはOSが決めた間隔でしか動きません。朝いちばんに古い予定が出ていると、それだけで信用を失います。
そこでアプリの側からも更新を頼むようにしました。アプリが前面に来たとき、つまり端末を手に取ってアプリを開いたときに、最新の数字を取り直してウィジェットへ渡します。iPhoneを起動した瞬間、iPadを開いた瞬間に合わせる形です。
全端末が同じ名前で入っていて、iPhoneのトークンが消えた話
ある日、iPhoneのウィジェットが7時間止まっていました。原因はトークンの名前です。
ウィジェットはアプリとは別のトークンでサーバーに入ります。そのトークンに付ける端末の名前を、全部の端末で同じ「ios」にしていました。Macのアプリが自分のトークンを作り直したとき、同じ名前のiPhoneのトークンが取り消されたのです。iPhoneのウィジェットは、トークンが無いことに気づかず、古い絵を出し続けました。
直したのは3点です。トークンの名前を端末ごとに変える。トークンが拒まれたら、ウィジェットが自分でトークンを捨てて取り直す。アプリが前面に来たら更新する。「一度も使われていないトークン」を先に見る、という確かめ方もここで覚えました。
入るかどうかは文字数で数えず、実寸で測ります
ウィジェットの中で文字が切れる、余白が残る、という直しを何度も繰り返しました。
最初は文字数から「これなら入る」と見積もっていました。文字の幅は文字によって違うので、必ずどこかで切れます。次に、行の高さを実測して枠に何行入るかを計算する形にしました。3つの候補を用意して、入る中でいちばん多い行数を採ります。
「入るか」は数えるのではなく測る。この決めごとにしてから、iPadとiPhoneの両方で余白が消えました。
実機だけ仮の絵のままだった原因
シミュレータでは動くのに、実機だけウィジェットが仮の絵のまま止まる、ということがありました。
候補を16通り用意して「入るものを選ぶ」作りにしていたのが原因でした。実機のウィジェットには使えるメモリの上限があり、16通りを全部組み立てた時点で止まります。シミュレータにはその上限がないので気づけません。候補を3つに絞って解決しました。
この件で、確かめ方を1つ決めました。ウィジェットに渡す本物のデータを、ウィジェット側の型でそのまま読む試験を持つ。試験用の見本データでは、本物の16件の予定で起きることが再現できませんでした。
予定に「誰と」を結びます
カレンダーの予定には、同席する人を結んでいます。人の名簿と結ばれていれば、予定を押すだけで、その人の進め方や前回の話が出ます。
最初はメールアドレスで結ぼうとしました。予定に入っているアドレスと名簿のアドレスを合わせる形です。ところが、手元の予定を全部調べると、アドレスが入っているものはごくわずかでした。予定の本文に「参加者: 名前」と書いてあるものがほとんどです。名前で結ぶことにし、名簿の側に呼び方の揺れ(別名)を持たせて当てています。
案件が付いていない予定は、その場で「付ける」を押して結べます。付けた瞬間から、その案件のページにその予定が出ます。

毎年必ず来る手続きは、日付ではなく式で持ちます
法人には毎年必ず来る手続きがあります。決算、税の申告、共済の前納、届出の期限。これらをカレンダーに固定の日付で入れると、翌年に全部入れ直しになります。
そこで「期末の2か月後」「毎年9月の末」のように、式で持つことにしました。年が変わっても式は変わりません。
もう1つ、区分を足しました。「記録として持つが、通知はしない」です。担当が税理士の手続きは、私の手が要りません。カレンダーには残し、通知は鳴らさない。通知の設計は、ここでもホームと同じ考えです。
端末には、自分の名前を名乗らせます
働き方の画面に「どの端末で動かしたか」があります。これを作るとき、どの端末かを推測で当てようとして失敗しました。
最初は機種名で分けました。するとMacのアプリが「iPad Pro」と名乗ります。MacでiPad用のアプリを動かすと、機種名はiPad Proになるのです。私はiPad Proを持っていません。次に稼働時間の重なりで当てようとしましたが、メインのMacは24時間動いているので何とでも重なり、決め手になりません。
結局、端末に自分の名前を名乗らせることにしました。アプリが起動時にコンピュータ名を送ります。iPhoneが「localhost」と名乗った日もあり、それは名前として扱わないと決めました。
名乗りは台帳の名簿で1台1つに束ねます。同じ機械が、手を動かした記録では「main」、アプリを触った記録ではコンピュータ名、と2つの名前で数えられていた時期があり、同じ時間が二重に積まれていました。名前を足す場所を名簿だけにしてから、この二重は消えました。
まとめ
- ウィジェットには次の一手ときょうの絵。数字はサーバーが1か所でまとめる
- 更新は端末を手に取ったとき。トークンは端末ごとに分け、拒まれたら自分で取り直す
- 入るかどうかは文字数で数えず実寸で測る。候補は3つまで
- 端末は推測せず、自分の名前を名乗らせて名簿で束ねる
アプリを開いて確かめる回数は、ウィジェットを置いてから目に見えて減りました。開くのは、何かをするときだけです。
自社の業務アプリの全体像は 特設ページ に。次の記事: 会計の数字と、経営の着地は別に持つ

