[{"data":1,"prerenderedAt":735},["ShallowReactive",2],{"content-/2026-04-29-diary":3,"all-pages-for-dir":733,"og-image-/2026-04-29-diary":734},{"id":4,"title":5,"body":6,"category":713,"description":714,"extension":715,"meta":716,"navigation":626,"path":717,"project_name":718,"published":719,"publishedAt":720,"seo":721,"stem":722,"tags":723,"todo":731,"updatedAt":731,"__hash__":732},"pages/2026-04/2026-04-29/diary-2026-04-29.md","2026年4月29日の開発日記 - 蔵書841冊タグ付け／ScrollArticle共通化／GIF→SVGアニメ",{"type":7,"value":8,"toc":694},"minimark",[9,14,18,22,29,32,37,45,51,68,79,82,86,89,93,104,112,114,118,129,133,144,152,154,158,181,185,196,204,206,210,235,239,250,258,260,264,267,271,290,298,300,304,307,315,317,320,566,568,571,610,612,615,657,659,662],[10,11,13],"h1",{"id":12},"_2026年4月29日の開発日記","2026年4月29日の開発日記",[15,16,17],"p",{},"朝、Cドライブの空き容量が10%を切っていた画面を眺めるところから始まり、夜には蔵書841冊が二軸＋第3軸（コンテンツ）で分類され、Excel講座の全章が共通の縦記事レイアウトに揃い、GIFターンテーブルが7種類のSVGアニメに化けていた。並走したセッションは11本、プロジェクトは3つ（book-knowledge-base / eurekapu-nuxt4 / mdx-playground）。",[19,20,21],"h2",{"id":21},"今日のタイムライン",[15,23,24],{},[25,26],"img",{"alt":27,"src":28},"タイムライン","/2026-04/2026-04-29/timeline-2026-04-29.png",[19,30,31],{"id":31},"今日やったこと",[33,34,36],"h3",{"id":35},"_1-cドライブ大規模クリーンアップ733gb使用-188gb空きへ","1. Cドライブ大規模クリーンアップ：733GB使用 → 188GB空きへ",[15,38,39,40,44],{},"朝イチで空き容量が10%を切っていた C ドライブを丸1日かけて整理した。",[41,42,43],"code",{},"uv cache clean"," で37GB、Tempから11GB、Google Drive残骸を削除、Microsoft 365 Personal の OneDrive を「ファイルオンデマンド」に切り替え、Dropbox の「ハードドライブ容量を管理」で200GBをクラウドのみへ。Docker / WSL / npm cache / Adobe Media Cache まで一通りスキャン。",[15,46,47],{},[48,49,50],"strong",{},"主な成果:",[52,53,54,58,65],"ul",{},[55,56,57],"li",{},"18.3% → 22.4% まで空き容量が回復し、188GB を解放",[55,59,60,61,64],{},"Google Drive ミラーリング時代の残骸を ",[41,62,63],{},"gogcli"," スキルで突き合わせて安全に削除",[55,66,67],{},"OneDrive と Dropbox の「同期はするがローカルに置かない」モードを正しく理解した",[15,69,70,73,74],{},[48,71,72],{},"詳細:"," ",[75,76,78],"a",{"href":77},"/disk-cleanup-windows-cdrive","Cドライブ大規模クリーンアップで733GB使用→188GB空き達成",[80,81],"hr",{},[33,83,85],{"id":84},"_2-蔵書841冊にセミラティス的タグを付ける","2. 蔵書841冊にセミラティス的タグを付ける",[15,87,88],{},"Amazon商品メタの全件取得を完走させたあと、841冊をサブエージェント8並列でタグ付けした。Codexに2回（v1→v3）プランレビューを依頼し、キー設計バグと検証ロジックの欠落を直してから本番投入。shelf UIに★区切り（5.0/4.5以上/4.0以上）の横線とタグフィルタを追加し、ユーザー要望から「コンテンツ軸」（第3軸：連結／簿記／キャッシュフロー計算書／Excel等）を新設して98ペアを補正した。",[15,90,91],{},[48,92,50],{},[52,94,95,98,101],{},[55,96,97],{},"baseline 60冊＋781件を8バッチに分割、サブエージェント並列でJSONL生成→DB投入",[55,99,100],{},"タイトルマッチ自動付与＋Claude全件再走査の二段構えで漏れを最小化",[55,102,103],{},"著者情報（#bylineInfo）も追加で344件取得（CAPTCHAで中断、明日朝リトライ）",[15,105,106,73,108],{},[48,107,72],{},[75,109,111],{"href":110},"/2026-04-29-shelf-semilattice-tagging","蔵書841冊にセミラティス的タグを付ける：サブエージェント8並列＋Codex2回レビュー",[80,113],{},[33,115,117],{"id":116},"_3-restructure-book-を-turso-api-に書き換えて専門書2冊を再構造化","3. /restructure-book を Turso API に書き換えて専門書2冊を再構造化",[15,119,120,121,124,125,128],{},"旧コマンドはローカル SQLite を ",[41,122,123],{},"better-sqlite3"," で直接叩く前提だったので、Embedded Replica + Turso クラウドに合わせて全面書き換えた。書き換え後、専門書2冊（連結CFマニュアル341→31、設例CF Q&A 411→95）に通し、合計752チャンクを126セクションに圧縮。蔵書UIには「整」（黄色：cleanup_status）と「済」（緑：restructure_status）の2バッジを並べ、書籍ページから ",[41,126,127],{},"/shelf"," への戻り導線も右上に追加した。",[15,130,131],{},[48,132,50],{},[52,134,135,138,141],{},[55,136,137],{},"スラッシュコマンド本体を Turso API 対応に書き換え",[55,139,140],{},"752チャンク → 126セクション（うち626チャンク削除、FTS検索でも検証）",[55,142,143],{},"shelf画面でカバー画像左上に「済」バッジ表示（著者NULLでも消えない実装）",[15,145,146,73,148],{},[48,147,72],{},[75,149,151],{"href":150},"/2026-04-29-restructure-book-turso-migration","/restructure-book を Turso API に書き換えて専門書2冊を再構造化",[80,153],{},[33,155,157],{"id":156},"_4-excel講座の統合記事パターンを-scrollarticle-に共通化","4. Excel講座の統合記事パターンを ScrollArticle に共通化",[15,159,160,161,164,165,168,169,172,173,176,177,180],{},"朝、",[41,162,163],{},"contents.vue"," にフック→伏線→回収構造を入れたところから一日が転がった。short-video-strategy スキルにあるホテル再建計画氏の方法論を講座のスクロール体験に移植。途中、",[41,166,167],{},"hardware"," と ",[41,170,171],{},"contents"," で目次レイアウトが揃わない問題に当たり、原因が ",[41,174,175],{},"scroll-layout"," の DOM 構造分岐だと判明。",[41,178,179],{},"ScrollArticle.vue"," を新規作成して両側を共通化した。Codex 3回レビューを挟み、モバイルでデスクトップTOCとモバイル本文が二重描画されるバグも潰した。stream-deck の各章も「1章=1統合記事」に集約。",[15,182,183],{},[48,184,50],{},[52,186,187,190,193],{},[55,188,189],{},"ScrollArticle.vue を共通コンポーネント化、h2/h3 の id 属性が DOM に正しく載って deep link が機能",[55,191,192],{},"フック→伏線→回収構造を導入、画像モーダル（.scroll-img / .exercise-img）を白背景で拡張",[55,194,195],{},"用語を「統合記事パターン」「スライドパターン」に固定",[15,197,198,73,200],{},[48,199,72],{},[75,201,203],{"href":202},"/2026-04-29-excel-scroll-article-unification","Excel講座の統合記事パターンを ScrollArticle に共通化した日",[80,205],{},[33,207,209],{"id":208},"_5-cf精算表ページに年次推移表を追加列幅をピクセル単位で揃える","5. CF精算表ページに年次推移表を追加、列幅をピクセル単位で揃える",[15,211,212,168,215,218,219,222,223,226,227,230,231,234],{},[41,213,214],{},"/cashflow-statement/v2/statement",[41,216,217],{},"/v2/accounting/annual-table"," の年次推移表を ",[41,220,221],{},"V2AnnualTableSection"," に統一し、CF計算書の直下に年次推移表を挿入して財務3表の縦並びを成立させた。借/貸列・期首列を削除、CF計算書ページのみ補助科目を畳む ",[41,224,225],{},"compact"," プロパティを追加。最後の難所は列幅で、",[41,228,229],{},"table-layout: fixed"," と列幅定数化で完全一致（x=307→659→779→899→1019→1139）。",[41,232,233],{},"/simplify"," 3エージェント並列レビューで574行→451行（-123行）まで削った。",[15,236,237],{},[48,238,50],{},[52,240,241,244,247],{},[55,242,243],{},"V2AnnualTableSection.vue を新規作成、CF精算表＋年次推移表ページを共有",[55,245,246],{},"table-layout: fixed で列幅をピクセル単位で同期",[55,248,249],{},"PL 8グループをメタデータ駆動に再構成し、テンプレートDRY化",[15,251,252,73,254],{},[48,253,72],{},[75,255,257],{"href":256},"/2026-04-29-cf-annual-table-column-alignment","CF精算表ページに年次推移表を追加、列幅をピクセル単位で揃えて財務3表を縦並びにした",[80,259],{},[33,261,263],{"id":262},"_6-gifターンテーブル75フレーム-svgアニメデモ7種","6. GIFターンテーブル75フレーム → SVGアニメデモ7種",[15,265,266],{},"ユーザーから受け取った Adobe Firefly のターンテーブルGIF（74フレーム）を ImageMagick で分解し、コンタクトシートで全体像を確認。yaw＋pitchの2軸データであることが判明したので、まずラスター（PNG/GIF）でデモを12種作った。途中で「実は全部ラスター処理でSVGに一切変換していない」と気づいて自己訂正。ユーザーから提供されたSVG74ファイルでデモを書き直し、2軸ビューア／カラーパレット動的変更／パーツ表示／レイヤー分解／線画ドローイング／連続再生／蛇行飛行アニメの7種を完成させた。",[15,268,269],{},[48,270,50],{},[52,272,273,276,287],{},[55,274,275],{},"75フレームのスプライトシート＋CSSアニメHTMLデモ",[55,277,278,279,282,283,286],{},"SVGの ",[41,280,281],{},"\u003Cstyle>"," を innerHTML 書き換えで効かないバグを ",[41,284,285],{},"path.style.fill"," 直接設定で回避",[55,288,289],{},"雲削除＋画面外飛行パターンへユーザーフィードバックで改修",[15,291,292,73,294],{},[48,293,72],{},[75,295,297],{"href":296},"/2026-04-29-svg-turntable-animation-demos","AdobeターンテーブルのGIF75フレームをImageMagickで分解してSVGアニメデモを7種作った",[80,299],{},[33,301,303],{"id":302},"_7-bloom-energy-q1-2026-決算分析記事","7. Bloom Energy Q1 2026 決算分析記事",[15,305,306],{},"朝の隙間時間で、Bloom Energy（$BE）の過去5年・21四半期分の業績まとめ記事を作成。チャート1枚と本文。",[15,308,309,73,311],{},[48,310,72],{},[75,312,314],{"href":313},"/bloom-energy-q1-2026-trends","Bloom Energy Corporation $BE Q1 2026決算と過去5年21四半期の業績推移",[80,316],{},[19,318,319],{"id":319},"今日の試行錯誤",[321,322,323,345],"table",{},[324,325,326],"thead",{},[327,328,329,333,336,339,342],"tr",{},[330,331,332],"th",{},"#",[330,334,335],{},"テーマ",[330,337,338],{},"試したこと",[330,340,341],{},"結果",[330,343,344],{},"気づき",[346,347,348,366,383,407,424,441,458,475,492,509,528,545],"tbody",{},[327,349,350,354,357,360,363],{},[351,352,353],"td",{},"1",[351,355,356],{},"Amazonメタ取得",[351,358,359],{},"バックグラウンド再走→cp932で例外",[351,361,362],{},"30件ごとログ出力で止まるだけでDB書き込みは成功",[351,364,365],{},"stdout/stderrのUTF-8切替を入れて再発防止",[327,367,368,371,374,377,380],{},[351,369,370],{},"2",[351,372,373],{},"著者取得",[351,375,376],{},"全788件を再取得",[351,378,379],{},"5件連続CAPTCHA→344件成功で中断",[351,381,382],{},"「連続5件」判定は成功が間に入るとリセット。累積カウンタが必要",[327,384,385,388,391,394,401],{},[351,386,387],{},"3",[351,389,390],{},"841冊タグ付け",[351,392,393],{},"Codex v1レビュー",[351,395,396,397,400],{},"キー設計 ",[41,398,399],{},"(file_no, category)"," でINSERT OR REPLACE破壊リスク",[351,402,403,406],{},[41,404,405],{},"source"," を含めた3カラム複合キーへ変更",[327,408,409,412,415,418,421],{},[351,410,411],{},"4",[351,413,414],{},"コンテンツ軸の漏れ",[351,416,417],{},"タイトルマッチで自動付与→Claude全件再走査",[351,419,420],{},"漏れは大きく見つからず、誤付与5件を除外",[351,422,423],{},"「速いが取りこぼす」と「遅いが文脈で拾う」の二段構えが効く",[327,425,426,429,432,435,438],{},[351,427,428],{},"5",[351,430,431],{},"/restructure-book",[351,433,434],{},"旧コマンドをそのまま実行",[351,436,437],{},"better-sqlite3前提で1行も動かない",[351,439,440],{},"スラッシュコマンドをTurso API対応に全面書き換え",[327,442,443,446,449,452,455],{},[351,444,445],{},"6",[351,447,448],{},"shelf 「済」バッジ",[351,450,451],{},"著者列の右隣に表示",[351,453,454],{},"著者NULLだとバッジも消える",[351,456,457],{},"カバー画像左上に重ねて配置（白文字＋緑背景）",[327,459,460,463,466,469,472],{},[351,461,462],{},"7",[351,464,465],{},"目次レイアウト差異",[351,467,468],{},"hardware側のCSSだけ揃える",[351,470,471],{},"構造が違うので根本解決にならず",[351,473,474],{},"scroll-layout構造そのものを共通化（ScrollArticle.vue 新規）",[327,476,477,480,483,486,489],{},[351,478,479],{},"8",[351,481,482],{},"モバイル幅確認",[351,484,485],{},"iPhone 375px で表示",[351,487,488],{},"ScrollArticleとtheater-mobileが二重描画",[351,490,491],{},"article モード時は theater-mobile を v-if で隠す",[327,493,494,497,500,503,506],{},[351,495,496],{},"9",[351,498,499],{},"CF年次推移表の列幅",[351,501,502],{},"CSS の min-width / width 調整",[351,504,505],{},"FY26列だけ1〜2px ズレる",[351,507,508],{},"table-layout: fixed + 列幅定数化で完全一致",[327,510,511,514,517,522,525],{},[351,512,513],{},"10",[351,515,516],{},"SVGカラーパレット",[351,518,519,521],{},[41,520,281],{}," の innerHTML 書き換え",[351,523,524],{},"path の色が元のまま（再評価されない）",[351,526,527],{},"path.style.fill で inline style 設定（presentation attribute対抗）",[327,529,530,533,536,539,542],{},[351,531,532],{},"11",[351,534,535],{},"雲＋ターンテーブル飛行",[351,537,538],{},"画面内で機体が回転",[351,540,541],{},"雲のサイズが固定で奥行きが嘘っぽい",[351,543,544],{},"雲削除＋画面外フレームアウト/インを挟む",[327,546,547,550,553,560,563],{},[351,548,549],{},"12",[351,551,552],{},"Cドライブクリーンアップ",[351,554,555,556,559],{},"OneDrive ",[41,557,558],{},"all folder"," を一気にクラウド化",[351,561,562],{},"39,699件で10時間表示→止めて様子見",[351,564,565],{},"スマートシンク/オンデマンドの仕組み（200GBは論理サイズ、実体13GB）を腹落ち",[80,567],{},[19,569,570],{"id":570},"今日の学び",[52,572,573,579,585,591,604],{},[55,574,575,578],{},[48,576,577],{},"二段構えが効く",": 「自動マッチで速く拾う＋全件再走査で文脈拾い」は精度を上げる。タグ付けでもチャンク統合でも同じ構造。",[55,580,581,584],{},[48,582,583],{},"共通化は構造から",": CSSだけ揃えても根本解決にならない。DOM 構造そのものを分岐させない設計に踏み込む必要がある（ScrollArticleがその好例）。",[55,586,587,590],{},[48,588,589],{},"table-layout: fixed は最後の砦",": 列幅をピクセル単位で揃えたいときは、auto レイアウトでの調整に粘らず、fixed＋定数化に早めに切り替える。",[55,592,593,596,597,600,601,603],{},[48,594,595],{},"CSSクラスはpresentation attributeを上書きする",": SVGの ",[41,598,599],{},"fill=\"...\""," 属性が ",[41,602,281],{}," のCSSルールに勝つので、動的に色を変えたいときは inline style で書く。",[55,605,606,609],{},[48,607,608],{},"Cドライブの容量食い犯人は予想と違う",": pagefile.sys や hiberfil.sys ではなく、開発ツールキャッシュ（uv 37GB / npm / Temp）と OneDrive / Dropbox のローカル同期分が大半。",[80,611],{},[19,613,614],{"id":614},"明日やること",[52,616,619,629,635,641,647],{"className":617},[618],"contains-task-list",[55,620,623,628],{"className":621},[622],"task-list-item",[624,625],"input",{"disabled":626,"type":627},true,"checkbox"," 著者情報の残り444件をリトライ（CAPTCHAクールダウン明けを確認してから）",[55,630,632,634],{"className":631},[622],[624,633],{"disabled":626,"type":627}," ゲシュタルトのGIF動画を講座ページに置き換える作業",[55,636,638,640],{"className":637},[622],[624,639],{"disabled":626,"type":627}," Excel講座の全ページを統合型 / スライド型でレビュー（統合型に倒せるものを洗い出し）",[55,642,644,646],{"className":643},[622],[624,645],{"disabled":626,"type":627}," CF Q&A 設例書籍（95セクション化済み）の蔵書UIで「済」バッジ反映を確認",[55,648,650,652,653,656],{"className":649},[622],[624,651],{"disabled":626,"type":627}," book-knowledge-base の ",[41,654,655],{},"bs-pl-impact-100-cases","（180チャンク）の OCR マージ修正",[80,658],{},[19,660,661],{"id":661},"関連記事",[52,663,664,669,673,677,681,685,689],{},[55,665,666],{},[75,667,668],{"href":77},"Cドライブの空きを7.9%から22.4%に戻した話 — 開発者のWindowsクリーンアップ手順",[55,670,671],{},[75,672,111],{"href":110},[55,674,675],{},[75,676,151],{"href":150},[55,678,679],{},[75,680,203],{"href":202},[55,682,683],{},[75,684,257],{"href":256},[55,686,687],{},[75,688,297],{"href":296},[55,690,691],{},[75,692,693],{"href":313},"Bloom Energy Q1 2026決算と過去5年の四半期推移：売上倍増と利益率プラス転換の構造変化",{"title":695,"searchDepth":696,"depth":696,"links":697},"",2,[698,699,709,710,711,712],{"id":21,"depth":696,"text":21},{"id":31,"depth":696,"text":31,"children":700},[701,703,704,705,706,707,708],{"id":35,"depth":702,"text":36},3,{"id":84,"depth":702,"text":85},{"id":116,"depth":702,"text":117},{"id":156,"depth":702,"text":157},{"id":208,"depth":702,"text":209},{"id":262,"depth":702,"text":263},{"id":302,"depth":702,"text":303},{"id":319,"depth":696,"text":319},{"id":570,"depth":696,"text":570},{"id":614,"depth":696,"text":614},{"id":661,"depth":696,"text":661},"diary","蔵書841冊にセミラティス的タグを付け、Excel講座の統合記事パターンを共通コンポーネントに集約。CF精算表に年次推移表を加えて列幅をピクセル単位で揃え、GIFターンテーブルを75フレームに分解してSVGアニメを7種作った1日。","md",{},"/2026-04-29-diary","daily-log",false,"2026-04-29T00:00:00.000Z",{"title":5,"description":714},"2026-04/2026-04-29/diary-2026-04-29",[724,725,726,727,728,729,730],"日記","書籍デジタル化","TursoDB","Vue","SVG","Codex","Windows",null,"OgQ2M-wrjQ-RpC3AiqrenaAy62MpXudHltcUP3hiI8I",[],"https://log.eurekapu.com/favicon.svg",1777533703105]