[{"data":1,"prerenderedAt":209},["ShallowReactive",2],{"content-/vertical-short-video-layout":3,"all-pages-for-dir":187,"related-/vertical-short-video-layout":188,"og-image-/vertical-short-video-layout":208},{"id":4,"title":5,"body":6,"category":167,"concepts":168,"description":169,"extension":170,"meta":171,"navigation":172,"ogImage":168,"path":173,"project_name":174,"published":175,"publishedAt":176,"seo":177,"source":178,"stem":179,"tags":180,"todo":168,"unpublished":175,"updatedAt":168,"__hash__":186},"pages/2026-08/2026-08-18/vertical-short-video-layout.md","縦型ショート動画のレイアウトを専用実装せず、既存のレスポンシブ縦積みで撮った",{"type":7,"value":8,"toc":156},"minimark",[9,14,18,21,26,34,37,40,43,47,50,53,56,59,62,65,68,84,87,90,93,96,99,102,105,108,119,122,126,129,136,139,142],[10,11,13],"h1",{"id":12},"縦のレイアウトはもう画面の中にあった","縦のレイアウトは、もう画面の中にあった",[15,16,17],"p",{},"朝いちで開いたのは、前に自分で書いた縦ショート動画の計画メモだった。\n縦ショート用のレイアウトを作る計画だったはずだ、というくらいの記憶しかなかったので、中身の確認から入らせた。\n任せられる調べ物はサブエージェント（Sonnet 5）に振らせ、図まわりはメインのセッションで持たせる、という分担で指示した。",[15,19,20],{},"計画と既存の決定事項を読ませ、続けてチャート本体のレイアウト構造を洗わせた。\nこの時点では、専用レイアウトを書く前提を疑っていない。",[22,23,25],"h2",{"id":24},"縦幅で開いたページを見て手が止まった","縦幅で開いたページを見て、手が止まった",[15,27,28,29,33],{},"報告を待つあいだ、自分でもシミュレータのページを開いていた。\n",[30,31,32],"code",{},"http://localhost:3200/lessons/progressive-tax-sim"," を、ウィンドウを細くしたまま眺めていた。",[15,35,36],{},"見出しがあり、チャートがあり、その下に税額の計算テーブルが続く。\n縦に積まれている。\n動画に入れたかったテーブルまで、最初から入っている。",[15,38,39],{},"これをそのまま縦のレイアウトにすればいいのではないか。\n専用に組まなくても、これでいいかもしれない。\nスクリーンショットを貼って、レスポンシブの縦表示を動画にする方針へ切り替えた。",[15,41,42],{},"計画メモに書いた「縦用のレイアウトを作る」という行は、着手して間もなく消えたことになる。",[22,44,46],{"id":45},"_7201280-を15倍で撮る","720×1280 を1.5倍で撮る",[15,48,49],{},"方針が決まってからは早かった。\n縦版のレンダリング処理を書き換えさせ、720×1280 のビューポートを1.5倍で撮る形にした。\n出力は 1080×1920 になる。",[15,51,52],{},"縦に積む中身はページの表示順のままにした。\n上から見出し、チャート、税額の計算テーブル、最後にワードマークが並ぶ。",[15,54,55],{},"最初のプレビューで、テーブルが横に20pxはみ出した。\nセルの余白を詰めて収めさせ、プレビュー画像で確かめさせた。",[15,57,58],{},"冒頭フレームには別の問題があった。\n点灯しているべきなのは5%の区分だけなのに、余計なチップが写り込んでいた。\n直させたうえで、すでに公開してある横版の冒頭フレームにも同じ混入がないかを確認させた。",[22,60,61],{"id":61},"レンダリングを待つ時間の使い方",[15,63,64],{},"レンダリングは長い。\n横版は1002フレームある。\n縦版に至っては、残り10分ほどという見込みが出た。",[15,66,67],{},"手を止めて待つのはもったいないので、その間に別の確認を進めさせた。",[69,70,71,75,78,81],"ul",{},[72,73,74],"li",{},"ダウンロードボタンを出さない設定になっている本文中の島の状態",[72,76,77],{},"ギャラリーの再生成コマンド",[72,79,80],{},"R2 の既存キー配置と figures-status.json の記録",[72,82,83],{},"計画書の実施記録の更新",[15,85,86],{},"最後の1つは安全に触れた。\n計画書を置いてあるディレクトリは Nuxt の監視外なので、書き換えてもHMRが走らず、撮影中の画面に影響しない。",[22,88,89],{"id":89},"ダウンロードボタンを再生ボタンの左に置く",[15,91,92],{},"シミュレータのページから MP4 を落とせるようにもした。\n置き場所は再生ボタンの左横で、見た目は既存のピルに合わせている。",[15,94,95],{},"ギャラリー側のダウンロードリンクの規約を先に確認させてから作らせた。\nおかげで、ギャラリーのJSONにも横版と縦版の両方のリンクが並んだ。\nギャラリーは図を選ぶと比較欄が出る作りなので、dev で該当の図を直接開かせて表示を確かめさせた。",[15,97,98],{},"出来上がった縦版は 1080×1920 の35.4秒だった。",[22,100,101],{"id":101},"他のセッションを止めてからコミットに入る",[15,103,104],{},"ギャラリーを再生成させ、ユニットテストを回させた。\n3358件が green で通った。\n差分チェックも通った。\n空になった中間ディレクトリを片付けさせ、計画書の残タスクを更新させた。",[15,106,107],{},"ここでコミットとデプロイを頼んだ。\n他のセッションは全部止めてあるはずで、混ざっているとしても計画書のタスクリスト更新くらいだと踏んだ。\n実際、まず作業ツリー全体を確認させ、混ざっていた差分の中身を特定させてから、3つに分けさせた。",[69,109,110,113,116],{},[72,111,112],{},"図修正17ファイル",[72,114,115],{},"動画一式19ファイル",[72,117,118],{},"計画書1件",[15,120,121],{},"最初の2つでは学習ゲートのクイズが出る。\n1つ目は全問正解して受領証を発行させ、2つ目でも続けてクイズを出させた。\n計画書だけの3つ目は LEARN_SKIP で通した。",[22,123,125],{"id":124},"デプロイと-push","デプロイと push",[15,127,128],{},"ビルドは約6.5分かかる。\nバックグラウンドに回して結果を待った。",[15,130,131,132,135],{},"デプロイは Green で通り、margin は 1374.9 KiB だった。\n",[30,133,134],{},"dist/video/zeimu"," を消してしまわないためのガードも作動していた。\n本番の検証もすべて green で、動画のパスが302で R2 の配信に飛ぶところまで確かめさせた。",[15,137,138],{},"最後に計画書の完了チェックとデプロイ実測CSVを更新させて、4件目のコミットにした。\n作業ツリーはクリーンになった。\nプッシュまで頼み、LFS の40オブジェクトを含む9コミットが origin/main に上がった。\nMac 側は次に pull すれば同じ状態から続けられる。",[22,140,141],{"id":141},"今日の学び",[69,143,144,147,150,153],{},[72,145,146],{},"動画用のレイアウトを新しく組む前に、既存ページを縦幅で開いてみる。レスポンシブが仕上がっていれば、それがそのまま縦動画の画面になっていることがある",[72,148,149],{},"縦版は 720×1280 を1.5倍で撮って 1080×1920 に合わせた。はみ出した20pxはセルの余白で吸収できた",[72,151,152],{},"レンダリングが10分単位で走る作業は、待ち時間に何を確認させるかを先に決めておくと手が止まらない",[72,154,155],{},"コミットを頼む前に他のセッションを止めておくと、作業ツリーに混ざった差分を確認して分けるだけで済む",{"title":157,"searchDepth":158,"depth":158,"links":159},"",2,[160,161,162,163,164,165,166],{"id":24,"depth":158,"text":25},{"id":45,"depth":158,"text":46},{"id":61,"depth":158,"text":61},{"id":89,"depth":158,"text":89},{"id":101,"depth":158,"text":101},{"id":124,"depth":158,"text":125},{"id":141,"depth":158,"text":141},"dev",null,"縦ショート動画用のレイアウトを新しく組む計画だったが、シミュレータのページを縦幅で開いたらそのまま使えると気づいて方針を変えた。720×1280を1.5倍で撮って1080×1920に出し、ダウンロードボタン追加からデプロイまで通した記録。","md",{},true,"/vertical-short-video-layout","eurekapu-nuxt4",false,"2026-08-18T00:00:00.000Z",{"title":5,"description":169},"make-diary","2026-08/2026-08-18/vertical-short-video-layout",[181,182,183,184,185],"縦型ショート動画","レスポンシブ","動画レンダリング","Nuxt","デプロイ","fgo-S2de6lav2FZl1JmMJ2tmCvN-xNMt-LhCZvMGO2Y",[],[189,193,197,201,205],{"title":190,"path":191,"publishedAt":192},"デプロイ25分の内訳を計測して、削れる場所と削れない場所を分けた","/deploy-time-breakdown-measurement","2026-08-14T00:00:00.000Z",{"title":194,"path":195,"publishedAt":196},"dev サーバーを止めずにデプロイできるよう、Nuxt のビルド出力先と Content DB を分けた","/deploy-while-dev-running","2026-07-31T00:00:00.000Z",{"title":198,"path":199,"publishedAt":200},"苦手な語だけを解き直すページを作った日 - 正解1回で消える穴と、自動再生設定のD1同期漏れ","/weak-words-page-and-d1-settings-sync","2026-07-27T00:00:00.000Z",{"title":202,"path":203,"publishedAt":204},"Cloudflare PagesとWorkers Static Assetsの違い、エッジキャッシュが効く仕組み","/cloudflare-pages-workers-static-assets","2026-07-22T00:00:00.000Z",{"title":206,"path":207,"publishedAt":204},"eurekapu-nuxt4の積み残し解消：lint・依存脆弱性ゼロ化から語源単語ページ再構成まで","/eurekapu-nuxt4-maintenance-catchup","https://log.eurekapu.com/favicon.svg",1787123773231]