個人向け日記 daily-snap を始めた動機と、写真・天気・Google カレンダー・AI 対話を同じ舞台に乗せる理由。1日の記録は追記の積み上げと、AI 側の束ねの二層で考える。
日記が続かない理由は、だいたい「書くのが面倒」か「何を書けばいいか分からない」かのどちらかだと思っている。自分も同じで、綺麗な文章を書こうとすると一瞬で終わる。だから daily-snap は最初から、気楽に書けることを最優先にした。
同時に、ただのメモだと後から読んでもピンと来ない。そこで手を伸ばしたのが 写真・天気・Google カレンダー みたいな、いわゆる外部の手がかりだ。予定のタイトルや移動の前後、降っていた雨、撮った写真。これらは「当時の自分」を呼び戻すトリガーになりやすい。
もう一つ軸になったのが AI との対話だ。ここは雑に「便利ツール」としてではなく、質問と提案で記憶を掻き起こす相棒として置きたい。会話の中で「それ、いつだっけ?」が減る方向を狙う。実装はまだ途中の塊も多いが、設計の出発点はここまで素直に決めた。
「1日の記録」の捉え方も、二層に分けている。一つは、人間側の入力が 同じ日付のエントリに追記されていくレイヤー。もう一つは、AI 側がカレンダーや天気、会話の流れを参照しながら その日を束ねて提案するレイヤー。混ぜて説明すると誤解が出るので、以降の記事でもこの分け方を前提に書く。
要件の「正」はリポジトリ直下の purompt.md に寄せている。画像上限・圧縮・PWA・API の向き先など、プロダクトの拘束条件はコードより先にここを読むと迷子になりにくい。
公開は snap.yutok.dev 、コードは dairy-snap 。最初のコミット 13341ca(Initial commit)あたりから追える。自分用のサービスだからこそ、本文や会話をサーバログに流さない・許可リストで閉じる、みたいな前提も最初から強めにした。
「便利になった」を測る指標を豪華にしすぎると、個人開発はすぐ止まる。だから最初は次のような 行動指標に落とした。
| 観点 | 成功に近いサイン | まだ早いサイン |
| --- | --- | --- |
| 書き始め | /today を開いてすぐ追記できる | 設定と格闘してから書ける |
| 思い出 | 天気・予定・写真のどれかが「その日」の手がかりになる | 記録がテキストだけで色が消える |
| AI | 質問が増え、書く内容の粒度が上がる | 生成文をそのまま貼るだけになる |
| 信頼 | 失敗しても「何を見たか」が説明できる | ブラックボックスで止まる |
この連載は、上の表を満たすために どこに時間を使ったかのログだと思って読んでもらえると嬉しい。
この連載は「完成報告」ではなく、作りながら学んだことと、まだ燃え残っている課題の方が多めになる。次回は、画面とルーティングをどう割ったか(/today 中心の理由)を書く。
E2EE や pgvector、オフライン完走みたいな「聞こえが良い単語」は、まだ途中か未着手が混ざる。だから記事では、キラ星だけ拾って盛らない。代わりに、なぜそこに投資するか(検索とプライバシーのトレードオフ、体感速度とコスト、個人利用ならではの割り切り)を残す。失敗も多い。ほぼ全部の工程で一度は詰まった、というのが実情に近い。
自分にとっての成功指標は、リリースノートの長さじゃなくて、明日も開きたくなるかだ。だから UI の迷いを減らす話と、AI を「文章生成機」にしない話は、連載を通して何度でも繰り返す。
各回は単体でも読めるけど、おすすめは **日付順(04-02 → 04-30)**だ。途中で「なぜこんなテーブルがあるの?」が出たら DB の回に戻る。「認証が変」なら proxy の回へ。みたいに、迷子になったときの索引として使ってほしい。コードは常に dairy-snap が正で、このブログはメモと意思決定の残し方が主役だ。
リポジトリの CHANGELOG.md が日付単位の旅行記。連載の伏線用にだけ並べる。
prisma generate、Node heap、ダミー DATABASE_URL、PORT)snap.yutok.dev のトップ、ログイン前後、今日画面の空の状態と書いた後。プロダクトの顔になるので、個人情報が映るならモザイク必須。
画像は後から content/blog 側に差し込む予定なので、撮れたら 日付・画面幅・モザイク範囲をファイル名に含めてストックしておくと、あとで楽だった。
daily-snap 開発ログ
次: 入口を /today に寄せたら、迷いが一段減った話
索引: 04-08 DB · 04-10 MAS · 04-11 AI · 04-14 PWA · 04-15 画像 · 04-17 認証 · 04-18 天気/予定 · 04-30 Docker
daily-snap の PWA・オフライン方針。IndexedDB キュー、オンライン復帰時の同期、競合は履歴+UIで拾う想定。現状は開発途中であることを前提に、理想形と足場を分けて書く。
dairy-snap を Docker / Cloud Build / Cloud Run 気味に寄せるときに踏んだ地雷の型。standalone、prisma generate、Node heap、ダミー DATABASE_URL、PORT。04-16 前後のコミット列を軸に、個人開発でもハマる点を整理する。
天気(Open-Meteo)と Google カレンダーのキャッシュ・分類が、日記と AI の文脈にどう効くか。entry-weather・WeatherAmPmDisplay・weather-tool などコード上の出所と、設計意図・本番運用をまとめる。
Google OAuth・許可リスト・JWT セッションの方針と、middleware から proxy へ寄せた経緯。HTTPS 背後での secureCookie、Docker 本番との相性。04-17 前後のコミットを手がかりに。
daily-snap の画像アップロード。最大辺2048px、AVIF優先(非対応ならWebP)の圧縮、ストレージ抽象と本番 GCS 前提。日記アプリで画像が重い問題への殴り方。
AI チャットの SSE(ストリーミング)をローカル・本番で確認した手順と、環境差分で再発しうる罠。ai_artifacts / audit_logs を厚くする理由と、本文をサーバログに出さない方針。