ひとしずくの木
開くと鉢植えの木がいて、「水をあげる」を1日1回押すとその日のぶんだけ育つ。木の形は端末ごとの種から決まり、忘れた日はしおれるが枯れない。成長を再生し、1080×1080のPNGで保存できる。残すのは種の番号と水をあげた日付だけで、通信はしない
制作メモ
- AIに任せた
- 現地日付の判定、日数差、1日1回の水やり可否、しおれ具合、日数帯と節目(7・14・30・50・100日)ごとの文言を求める純関数を実装した/種とステップごとの乱数から決定的に枝・葉・花を増やす木の生成処理を実装した。同じ種と回数なら同じ木になり、前日までの形は変わらない(prefix性)/木の見た目を、年齢別ギャラリー画像を見ながら作り直した(幹・横枝・小枝の3種に分け、樹冠を楕円に収め、花は4日に1つ上限30、幹は子孫の数で太くする)/鉢・枝葉・花・しおれ・しずく・波紋をCanvas 2Dで描く処理と、水をあげた瞬間の1.4秒の演出、成長の再生とスキップ、木の高さに合わせて上へ伸びる表示枠を実装した/種の番号と水をあげた日付だけを検証してlocalStorageへ保存する処理と、日付・URL入りの1080×1080 PNG書き出しを実装した/ユニット28件(日付・判定・木の決定性とprefix性・座標範囲・保存)とE2E約30件(1日1回・翌日・再読込・しおれ・時計逆行・壊れたデータ・保存不可・やり直し・再生・PNG寸法・reduced motion・3幅・44px・通信ゼロ)を作成した/体験評価(別セッションのOpusが実際に操作して採点・12/20)の指摘から、毎日同じ文をやめる・空の表示枠を切り詰める・再生中の表示とスキップ・保存画像の日付とURL・不在時の文言を直した/UI採点ループを3周回した(実装はCodex、採点は別セッションのOpusがスクショだけで採点)。1周目16/20→2周目17/20→3周目18/20。済み状態のボタンのコントラスト(2.35:1→6.24:1)、無効ラベル、デスクトップの空白、折返し、ボタン寸法、伝言の位置を直した/縦型プロモ動画(36秒・1080×1920・BGM付き)を作る道具を tools/promo/ に用意した。日付を固定し、木の描画をアプリ本体の純関数で合成側に上書きすることで、途中の秒から描いても同じ画になる
- 自分でやった
- 題材の選定(4案から「毎日開くと育つ植物」を選んだ)/実機での確認とX投稿
- 失敗と修正
- 画像保存用Canvasに背景を塗った後、共通の木描画が先頭で描画領域を消去し、PNGの木の周囲が透明になっていた → 木描画に消去の有無を渡せるようにし、画面では消去、保存画像では生成り色の背景を残して描くようにした
樹形の検算で、上端まで達した先端から伸ばす枝が範囲内への縮小で長さ0になる種が見つかった → 上端付近では左右の空いている方向へ水平に伸ばし、範囲と決定性を保ったまま必ず見える長さを持たせた
最初の木は細い棒に小さな粒が付いた見た目で、60日を超えると花だらけになった。要件の数値どおりでも絵として貧弱だった → 年齢別のギャラリー画像を見ながら、幹・横枝・小枝の規則と葉の大きさ、花の頻度と上限を作り直した。決定性・prefix性・座標範囲のテストは変えずに通した
種の段階では正方形の表示枠の85%が空白で、読み込み中に見えた。小さい画面では「水をあげる」が初画面に入らなかった → 枠の高さを木の高さから決めて、育つほど上へ伸びる作りにした(種は幅の4割程度、大きい木で正方形)
共有ボタンの枠のコントラスト検査で、地色を黒として測られて落ちた。bodyの背景がグラデーションだけで、単色の層が無かった → 背景の最後の層に生成り色を足した(検査はグラデーションの色停止点を拾うため、transparentが黒として扱われていた)
済み状態のボタンの色を検証するE2Eが、読み込み直後の180msのtransitionの途中の色を拾って落ちた → 自動で待つ toHaveCSS に変えた


























