子ども4人がiPadで毎日つける「朝・昼・夜のおしごと」チェックを、リロードしても・親のスマホからでも同じに見えるよう、データベースに保存して公開しました。
ひとことで言えば──「できた!」のタップを、iPadの中ではなくクラウドのデータベース(Cloudflare D1)に1行ずつ書き込むようにしたので、どの端末で開いても同じ進み具合が出ます。
子どもの名前・タスクはダミーデータに置き換えています
本番と同じプログラムを手元で動かし、中身だけ架空の4人に差し替えて撮影しました。
「リロードで消えたら困るもの」を書き出すと、答えは子どもの“できた”の記録でした。これが消えると、子どもは頑張りが消えてがっかりし、親は確認できません。そこから逆算して、5つの表(テーブル)に分けました。
あおいのiPadでタスクをタップしてから、「全部の端末をリロード」「iPadの閲覧データを消す」を押してみてください。保存先を切り替えると結果が変わります。
表(テーブル)=Excelのシートのようなもの。行(レコード)=1件のデータ。主キー(PRIMARY KEY)=「この組み合わせの行は1つしか作れない」という決まり。
第7回講義の軸は2つでした。①保存方法には段階がある(Markdown→JSON→データベース)、②データベースは便利だがAIから遠い(棚の奥)。そこで「全部をデータベースへ」ではなく、データごとに置き場所を分けました。
子ども4人が各自のiPadで、親がスマホで、同じ記録を同時に読み書きします。1つのファイル(JSON)を丸ごと上書きする方式だと、後から保存した人が前の人の分を消してしまいます。データベースなら「1行だけ追加・更新」ができます。
完了記録は「日付×子ども×タスク」で毎日増えます。「今日の朝の分は全部終わった?」を数える処理(SQLの集計)が、表になっていると一瞬で書けます。
別に作った学習アプリでは、進捗を1つのかたまり(JSON)で丸ごと保存していました。空のデータで上書きされ、子どもの英単語の記録が消える事故が起きました(2026-06-15)。「行単位で保存できる箱」を選んだのはこの経験からです。
課題の推奨は Vercel+Neon(Postgres)です。私は同じ考え方(表とSQLを使うクラウドのデータベース)を、Cloudflare D1で実装しました。
wrangler deploy の1コマンドで画面とサーバーが本番に出る。Claude Codeだけで完結2026-07-16にスプレッドシート版からD1版へ移しました。旧版は戻せるように残してあります。
| 自作ツール | 保存先 | そう決めた理由 |
|---|---|---|
| Markdownプレビュー(3ヶ月目の画面) | ブラウザ内(localStorage・IndexedDB) | 使うのは自分1人。フォルダの場所の覚え書きだけなので、サーバーに送る必要がない |
| 学習アプリの進捗同期 | Cloudflare KV(1アプリ=1つのJSON) | 1人分の状態を端末間でそろえるだけ。代わりに毎日のバックアップで上書き事故に備える |
| かぞくアルバム | R2(写真の実物)+KV(写真の情報) | 画像は表に入れず、ファイル置き場へ。30日で自動削除 |
| 研究(論文執筆)の管理 | リポジトリ内のMarkdown・JSON | AIが毎回読む決定記録。棚の奥にしまうとAIが読み落とすので、手元に置く |
progress表の主キーを「日付+子ども+タスク」にしました。同じタスクを2回タップしても、行は増えずに上書きされるだけです。
「朝ぜんぶ終わった」の通知を送る前に、notified表へ「2026-09-30_あおい_朝」のような印を書きます。印がもうあれば送りません。連打しても通知は1通です。
親のPINはデータベースにもコードにも書かず、秘密の金庫に置きました。画面のプログラムを子どもが読んでも、PINは分かりません。
通信に失敗したら、形式を変えて送り直し、画像を縮小してもう一度送ります。それでも駄目なら、iPadの中に「再送待ち」として残し、電波が戻ったら自動で送ります。子どもは撮り直さなくて済みます。
最初にデータベースへ入れたタスク一覧(55件)は古い元データから作ったものでした。実際に使っていたシートと比べると、38件の中身が違い、47件が足りませんでした。
完了時刻を「9:49:10」と「18:52:31」のように桁をそろえずに保存していました。文字として並べると「1」が「9」より先に来るため、朝一番が「18:52」と表示されました。
「Load failed」という手がかりの少ないエラーでした。電波が悪いのかサーバーが悪いのか区別できません。
隣のアプリ(かぞくアルバム)で、30秒ごとに一覧を読み直していたら、無料プランの1日の上限を数時間で使い切り、画面全体がエラーになりました。
たまった完了記録をAIに読ませて、「今週は夜の歯みがきが抜けやすい」のような週の振り返りを親に届けたいと考えています。AIに渡すのはSQLで集計した表だけにして、道を外れないようにする設計がハーネスエンジニアリングの練習になると考えています。