きょうの一面
読んだ記事のリンクを貼ると、その見出し・リード文・写真が縦書きの新聞の一面に組み上がる。題字の下は漢数字の日付、写真は新聞の網点、本文は禁則処理と縦中横つきの縦組み。3本まで足すと二番手・三番手として紙面が埋まる。できた紙面はPNGで保存して共有できる。取るのはOGPだけで、記事の本文は取らない
所要時間3時間45分
制作メモ
- AIに任せた
- 着手前の実測。NHK・朝日・ITmedia・note・Zenn の5サイトでOGPが取れること、og:image のCORSは4件中2件しか無いこと(=写真も中継しないとPNG書き出しが落ちる)を確かめた。候補に挙げた鉄道遅延のAPIはホストがNXDOMAINで消えており、日本語版Wikipediaの『今日は何の日』は中身が0件だったので落とした/要件定義(ユーザーストーリー7本+UX5階層を通して実装が10件決まった)、実装、ユニット97件とE2E 13件/縦書きの組版。約物の回転・句読点の位置・縦中横・禁則処理の追い出しを純関数に切り出した/写真の網点化(45度の格子・暗いほど大きな点)と、中継のSSRF対策(数値ホストの拒否・リダイレクトの毎回検証)/デモの振り付け、プロモ動画、スクリーンショット採点(別セッションのAIが10項目・20点満点)
- 自分でやった
- 題材の提案(AIの4案を採らず『リンクを貼ると新聞になる』を出した)/紙面に載せる情報量の選択(見出し+本文+写真1枚)/実機での確認とX投稿
- 失敗と修正
- 候補に挙げたAPIが2つとも使えなかった。鉄道遅延情報のjsonはホストがNXDOMAINで消えており、食品バーコードのOpen Food Factsは日本の商品を6件試して6件とも product not found だった → 提案の前に全部叩いて落とした。残った案のうち、本人が『リンクを貼ると新聞になる』という別の像を出したので題材ごと組み直した
記事1本の紙面が、列組みだけでは左半分が白いまま残った。リードは2文(最大120字)しかないので、広い紙面に対して文字が足りない → 1本のときだけレイアウトを分けた。上の帯に見出しと本文、下の帯に写真を全幅で置く。あわせて見出しと本文の大きさを字数から決めるようにした(固定サイズだと短い日に白く残り、長い日にあふれる)
倒したラテン文字の送りを全角の0.55倍にしたら、明朝の m が隣の c と重なった → 送りを0.72倍に広げ、字の大きさも0.8倍に落とした。1桁の数字は縦中横で半分にすると本文の中で沈むので、正立に戻した
写真をブロックの右上に置いたら、本文が尽きたあとの左下が大きく空いた → 写真を左下に接地させ、本文は右から流れて最後に写真の上を通る形にした。縦書きは右から読むので、この順のほうが自然に埋まる
プロモ動画で、透明なエンド画面(inset: 0)がクリックを奪って #submit が押せず、描画が30秒で止まった → 差し込む要素に pointer-events: none を付けた
公開したあとで、記事が1本も無い状態でも「画像を保存」が押せることに気づいた。押すと白紙のPNGが落ちる。別セッションのAIにUIを採点させるまで見つけられなかった(13/20) → app.css の .actions{display:flex} が、ブラウザ既定の [hidden]{display:none} に勝っていた。状態の切り替え自体は正しく動いていたので、テストも通っていた。[hidden]{display:none!important} で押さえ、E2Eに「空のときは保存ボタンが出ない」を足した。ready で見えることしか確かめていなかったのが抜けの原因
本番で note.com を貼ったら、見出しが「―つくる、つながる、とどける。」と区切り記号で始まった → og:title「note ――つくる、つながる、とどける。」から媒体名を落としたあと、ダッシュをそのまま残していた。落とした端の区切り記号を掃除するようにした

































