スクショに額縁を
スクショを貼るか落とすか選ぶと、余白・角丸・影・背景を付けた1枚をその場で作り、PNGで保存かクリップボードへコピーできる。背景10種と比率6種、ウィンドウ風の枠。画像はブラウザの中だけで処理して外に送らず、ページを閉じれば消える。保存するのは設定だけ
制作メモ
- AIに任せた
- 出力寸法・余白・角丸・影・固定比率・4096px上限を計算する純関数を実装した/背景10種とウィンドウ風の枠、影、透明背景をCanvasへ描く処理を実装した/ファイル選択・貼り付け・ドロップ・Clipboard API・サンプルの5経路を同じ読込処理へ接続した/背景・比率・余白・角丸・影・枠だけを検証して端末内へ保存する処理を実装した(画像は保存しない)/レスポンシブ画面、着地演出、reduced motion、PNG保存と画像コピーを実装した/レイアウト・背景・保存・ファイル名のユニット16件と、貼り付け・ドロップ・保存PNGの寸法・4096縮小・再読込・44px・通信ゼロを見るE2E 20件を作成した/UI採点ループを3周回した(実装はCodex、採点は別セッションのOpusがスクショだけで採点)。1周目16/20で、見出しと説明文を左寄せの1ブロックに、空状態のヒント文の1文字だけの折返しをなくし、比率チップを3列×2行に、HOW TOを左カラムの下へ、メッセージ欄を重ねる表示に直して2周目16/20。実在した4点(文中の半角スペース・320pxの見出し行・320pxのプレビュー枠の余り・設定カードの追従)を直して3周目18/20で合格/縦型デモ動画(16秒)の振り付けと、録画の頭を切って1コマ目を画像が着地する途中にする道具を用意した/公開前レビュー(Opus)の指摘3件(roundRect非対応で読み込み中のまま止まる/スライダー操作後の⌘Vが無反応/toBlobがnullのとき無言)とフォーカス管理を直し、E2Eを4件足した(計24件)/縦型プロモ動画(36秒・1080×1920・BGM付き)を作る道具を tools/promo/ に用意した。Day 026 の方式を流用し、素のスクショに額縁が付くフック→貼り付け→背景10種→比率→ウィンドウ風の枠→保存の順で、アプリ本体をスマホ枠の iframe で実際に動かして撮る。BGMは明るい音列に差し替えてコード合成
- 自分でやった
- 題材の選定(作る前に候補を出させ、4案から「スクショに額縁を」を選んだ)/実機での確認とX投稿
- 失敗と修正
- コードレビューで、画像を表示中に画像でないファイルを落とすと、エラー画面に切り替わって前の画像まで消える作りになっていた → 画像が既にあるときは表示を保ち、理由だけをメッセージに出すようにした。E2Eに1件追加
コピーがBlobをawaitしてからClipboardItemに渡す書き方で、Safariではユーザー操作の有効期限が切れて失敗しやすかった → ClipboardItemにPromiseのまま渡す書き方にした
公開前レビューで、Canvasの roundRect が無いブラウザ(Safari 16.4未満など)では描画が例外になり、「読み込み中…」のまま無言で止まることが分かった → roundRect が無ければ arcTo で同じ角丸を描くようにし、描画の失敗は理由を出すエラー画面に落とすようにした。roundRect を消したE2Eを追加
スライダーを触った直後に ⌘V / Ctrl+V が無反応だった。貼り付けの横取り防止が input 要素を丸ごと除外していて、range にフォーカスが残ると画像を捨てていた → 除外をテキスト入力欄(range・checkbox・file 以外の input、textarea、contenteditable)だけに絞った。スライダーにフォーカスを置いたまま貼るE2Eを追加
1:1で長辺4096pxになるとiOS SafariのCanvas面積上限に当たり、toBlob が null を返して保存もコピーも無言で終わっていた → null のときは「この画像は書き出せませんでした。比率や余白を小さくしてください」を出すようにした。あわせて状態が切り替わるたびにフォーカスが body へ落ちていたのを、プレビュー・「画像を選ぶ」・「別の画像」へ移すようにした

























