[{"data":1,"prerenderedAt":398},["ShallowReactive",2],{"content-/financial-articles-batch-publishing":3,"all-pages-for-dir":396,"og-image-/financial-articles-batch-publishing":397},{"id":4,"title":5,"body":6,"category":374,"description":375,"extension":376,"meta":377,"navigation":378,"path":379,"project_name":380,"published":381,"publishedAt":382,"seo":383,"stem":384,"tags":385,"todo":394,"updatedAt":382,"__hash__":395},"pages/2026-04/2026-04-27/financial-articles-batch-publishing.md","AEHRのバックログSVGチャートとLumentum/AAOI投資判断メモを一気に公開した日",{"type":7,"value":8,"toc":361},"minimark",[9,13,17,21,83,98,102,108,113,120,232,235,242,245,248,252,255,259,276,280,287,290,293,296,328,331,357],[10,11,5],"h1",{"id":12},"aehrのバックログsvgチャートとlumentumaaoi投資判断メモを一気に公開した日",[14,15,16],"p",{},"Downloads配下に積もっていた素材を、その日のうちに3本まとめて公開記事に変えた。AEHRのバックログを積み上げ横棒チャートで描いて再利用テンプレートの再現性を試した記事、Lumentum (LITE) の投資判断メモをそのまま公開した記事、AAOI を自分で書いてからユーザー提供メモでファクトチェックして上書きした記事。フォーマットも担当者も違う3本を、同じ日付ディレクトリに揃えた。",[18,19,20],"h2",{"id":20},"何を公開したか",[22,23,24,40],"table",{},[25,26,27],"thead",{},[28,29,30,34,37],"tr",{},[31,32,33],"th",{},"ファイル",[31,35,36],{},"種別",[31,38,39],{},"ソース",[41,42,43,58,71],"tbody",{},[28,44,45,52,55],{},[46,47,48],"td",{},[49,50,51],"code",{},"aehr-backlog-chart-template-test.md",[46,53,54],{},"SVGチャート + 解説",[46,56,57],{},"Downloads配下のテンプレート",[28,59,60,65,68],{},[46,61,62],{},[49,63,64],{},"lumentum-lite-investment-thesis.md",[46,66,67],{},"投資判断メモ",[46,69,70],{},"Downloads配下の既存メモ",[28,72,73,78,80],{},[46,74,75],{},[49,76,77],{},"aaoi-investment-thesis.md",[46,79,67],{},[46,81,82],{},"自前収集 → ユーザー提供メモでファクトチェック",[14,84,85,86,89,90,93,94,97],{},"3本とも ",[49,87,88],{},"apps/web/content/2026-04/2026-04-27/"," 直下に置いた。AEHRはチャート画像 (",[49,91,92],{},"aehr-backlog-chart.svg",") と生成スクリプト (",[49,95,96],{},"scripts/generate-aehr-backlog-chart.mjs",") も同梱した。",[18,99,101],{"id":100},"aehr-テンプレートを他人に渡しても再現できるかを試した","AEHR: テンプレートを他人に渡しても再現できるかを試した",[14,103,104,107],{},[49,105,106],{},"Downloads/backlog_stacked_chart_template.md"," には「期首バックログ + 受注 - 売上 = 期末バックログ」のT字勘定を19四半期ぶん積み上げる、再利用前提のプロンプトが入っていた。書いた本人は描けて当然で、別セッションのClaudeに渡したときに同じ図が出てこないと「再利用テンプレート」を名乗れない。今回は意図的に「他人視点」でゼロから読んで実装した。",[109,110,112],"h3",{"id":111},"データ整合性チェックでfy25-q1のズレを発見","データ整合性チェックでFY25 Q1のズレを発見",[14,114,115,116,119],{},"チャートを描く前に、19四半期ぶんの「期首残 + 受注 = 売上 + 期末残」を全行で検算した。FY25 Q1 だけ $5.6M の差が残った。テンプレート原文の数字を尊重してそのまま採用し、記事内で「整合性が取れない四半期がある」と明記する形に倒した。チャート上にも ",[49,117,118],{},"合計 22.3 = 22.2"," のような注記を残してある。",[121,122,127],"pre",{"className":123,"code":124,"language":125,"meta":126,"style":126},"language-javascript shiki shiki-themes vitesse-light vitesse-light","// 整合性チェックの考え方\nconst isConsistent = (q) =>\n  Math.abs((q.openBacklog + q.bookings) - (q.revenue + q.endBacklog)) \u003C 0.5\n","javascript","",[49,128,129,138,166],{"__ignoreMap":126},[130,131,134],"span",{"class":132,"line":133},"line",1,[130,135,137],{"class":136},"sxvE3","// 整合性チェックの考え方\n",[130,139,141,145,149,153,156,160,163],{"class":132,"line":140},2,[130,142,144],{"class":143},"stQ0i","const",[130,146,148],{"class":147},"senZ8"," isConsistent",[130,150,152],{"class":151},"shFtX"," =",[130,154,155],{"class":151}," (",[130,157,159],{"class":158},"s4oTP","q",[130,161,162],{"class":151},")",[130,164,165],{"class":151}," =>\n",[130,167,169,172,175,178,181,183,185,188,191,194,196,199,201,204,206,208,210,213,215,217,219,222,225,228],{"class":132,"line":168},3,[130,170,171],{"class":158},"  Math",[130,173,174],{"class":151},".",[130,176,177],{"class":147},"abs",[130,179,180],{"class":151},"((",[130,182,159],{"class":158},[130,184,174],{"class":151},[130,186,187],{"class":158},"openBacklog",[130,189,190],{"class":143}," +",[130,192,193],{"class":158}," q",[130,195,174],{"class":151},[130,197,198],{"class":158},"bookings",[130,200,162],{"class":151},[130,202,203],{"class":143}," -",[130,205,155],{"class":151},[130,207,159],{"class":158},[130,209,174],{"class":151},[130,211,212],{"class":158},"revenue",[130,214,190],{"class":143},[130,216,193],{"class":158},[130,218,174],{"class":151},[130,220,221],{"class":158},"endBacklog",[130,223,224],{"class":151},"))",[130,226,227],{"class":151}," \u003C",[130,229,231],{"class":230},"sM54T"," 0.5\n",[109,233,234],{"id":234},"値ラベルが小さすぎたら省略する",[14,236,237,238,241],{},"FY22 Q1 の期首残 1.6 のような小さい値は、棒の幅が 16px しかなく、ラベル文字（18px相当）を載せると枠を突き抜けて読めなくなる。",[49,239,240],{},"barWidth \u003C 18 ? '' : value"," の分岐を1行入れて、視認できないラベルは諦める実装にした。テンプレート原文には書かれていなかった「省略の閾値」が、ここで初めて顔を出した。",[109,243,244],{"id":244},"配色をモノクロからカラーに切り替えた",[14,246,247],{},"最初はテンプレート原文どおり4階調グレースケールで描いた。フロー2要素（受注・売上）に注目させたかったので、受注をオレンジ (#c2410c)、売上をネイビー (#1e40af) に振り、期首残・期末残はグレー据え置きで背景化した。ブラウザがキャッシュした古いSVGを掴み続けたので、強制リロードでようやく差分が反映された。",[109,249,251],{"id":250},"chrome-devtools-mcpの接続が安定しない","Chrome DevTools MCPの接続が安定しない",[14,253,254],{},"dev server を起動してブラウザ確認に行ったら、Chrome DevTools MCP の接続が落ち着かなかった。レンダリング後のHTMLを直接取得する経路に切り替えて、SVGの構造とサイズだけ確認して先に進めた。確認手段が1つ詰まっても、別ルートが残っていれば作業は止まらない。",[18,256,258],{"id":257},"lumentum-公開前の調整は2点だけ","Lumentum: 公開前の調整は2点だけ",[14,260,261,264,265,268,269,272,273,275],{},[49,262,263],{},"Downloads/Lumentum_LITE_投資判断メモ.md"," を読んだら、投資メモとしての構造が整っていてAI臭も薄かった。frontmatterを足して ",[49,266,267],{},"path"," を ",[49,270,271],{},"/lumentum-lite-investment-thesis"," に切り、本文の細かい言い回しを2箇所だけ調整して、そのまま ",[49,274,88],{}," に置いた。Downloads配下の元ファイルは破壊的な操作になるので残してある。",[18,277,279],{"id":278},"aaoi-自分で書いた記事をユーザー提供メモで上書きした","AAOI: 自分で書いた記事をユーザー提供メモで上書きした",[14,281,282,283,286],{},"最初はユーザーから「LITEと同じ章立てで書いて」と頼まれただけだったので、自分で AAOI の決算と業績推移を集めて、Lumentum と並べて読める形で書いた。あとから別セッションで作成された詳細メモ (",[49,284,285],{},"Downloads/AAOI_投資判断メモ.md",") が共有された。",[14,288,289],{},"そのまま置き換えるのではなく、まず主要数字を1つずつファクトチェックした。元メモには検証で確認できた重要事実が多く含まれていたが、いくつか正確でない数字が混じっていた。ファクトチェックを通った数字だけを採用し、自分の記事に上書き反映した。",[14,291,292],{},"「先に書いた自分の記事 vs 後から来た詳細メモ」のどちらを残すかではなく、「数字単位で検証して合成する」形にしたのが今日の選択だった。",[18,294,295],{"id":295},"学びメモ",[297,298,299,307,316,322],"ul",{},[300,301,302,306],"li",{},[303,304,305],"strong",{},"再利用テンプレートは他人に渡して初めて価値が測れる",": 自分で書いて自分で再現できるのは当然で、別セッションで再現できなかった瑕疵（20四半期表記なのに実データは19四半期、FY25 Q1の $5.6M ズレ）が今回テンプレートを更新する材料になった",[300,308,309,312,313,315],{},[303,310,311],{},"整合性が取れない数字は隠さず記事に書く",": チャート上に ",[49,314,118],{}," と残したことで、後で見返したときに「ここはデータソース由来のズレ」だと一目でわかる",[300,317,318,321],{},[303,319,320],{},"ファクトチェックは数字単位で行う",": 元メモを丸ごと採用するか丸ごと棄却するかの二択ではなく、数字を1つずつ検証して通ったものだけ残す。AAOI 記事はこの方法で「自分の収集 + ユーザー提供メモ」のハイブリッドになった",[300,323,324,327],{},[303,325,326],{},"確認手段は2系統持っておく",": Chrome DevTools MCP が詰まっても、HTML直接取得で構造とサイズの検証はできた。1系統に依存しないことで「ブラウザで見られないから止まる」を避けられた",[18,329,330],{"id":330},"関連ファイル",[297,332,333,338,343,348,353],{},[300,334,335],{},[49,336,337],{},"apps/web/content/2026-04/2026-04-27/aehr-backlog-chart-template-test.md",[300,339,340],{},[49,341,342],{},"apps/web/content/2026-04/2026-04-27/aehr-backlog-chart.svg",[300,344,345],{},[49,346,347],{},"apps/web/content/2026-04/2026-04-27/lumentum-lite-investment-thesis.md",[300,349,350],{},[49,351,352],{},"apps/web/content/2026-04/2026-04-27/aaoi-investment-thesis.md",[300,354,355],{},[49,356,96],{},[358,359,360],"style",{},"html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .sM54T, html code.shiki .sM54T{--shiki-default:#2F798A;--shiki-dark:#2F798A}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":126,"searchDepth":140,"depth":140,"links":362},[363,364,370,371,372,373],{"id":20,"depth":140,"text":20},{"id":100,"depth":140,"text":101,"children":365},[366,367,368,369],{"id":111,"depth":168,"text":112},{"id":234,"depth":168,"text":234},{"id":244,"depth":168,"text":244},{"id":250,"depth":168,"text":251},{"id":257,"depth":140,"text":258},{"id":278,"depth":140,"text":279},{"id":295,"depth":140,"text":295},{"id":330,"depth":140,"text":330},"dev","Downloads配下に放置されていたバックログ積み上げチャートのテンプレートを実際にSVG化して公開記事にし、Lumentum (LITE) の投資判断メモをそのまま公開、AAOIは自分でデータを集めて記事化したあとユーザー提供メモでファクトチェックして上書きした、3本同時公開の作業ログ。整合性チェックでFY25 Q1に$5.6Mのズレを見つけ、AAOIの主要数字でいくつか修正を入れた。","md",{},true,"/financial-articles-batch-publishing","mdx-playground",false,"2026-04-27T00:00:00.000Z",{"title":5,"description":375},"2026-04/2026-04-27/financial-articles-batch-publishing",[386,387,388,389,390,391,392,393],"SVG","チャート","投資メモ","公開記事","AEHR","Lumentum","AAOI","ファクトチェック",null,"EyidODZCXixmNTIXkIxlqQ9DBUCFRvCXmJ-6rWc7EFY",[],"https://log.eurekapu.com/favicon.svg",1777329227032]