半導体関連統計の公表スケジュールをSSOT化してカードに「次回更新」を出す
半導体関連統計の公表スケジュールをSSOT化してカードに「次回更新」を出す
朝、韓国と台湾の統計は全部揃っているのか、単価の細かいデータまで入っているのかが気になって、/update-korea-chip-exports の状況チェックを回させた。揃っているに違いない、と思っていた。結果は未了3件。いちばん大きいのは SIA 世界半導体売上の2026年5月分で、7月6日に公表済みなのに未反映だった。
穴埋め自体はすぐ終わった。その直後に発した一つの質問が、残りの時間を公表スケジュールの UI 整備に変えた。
発端は「全部揃ってる?」の点検
統計 SSOT(exportStats.ts)に対して各系列の最新月を突き合わせさせたところ、未了は3件。SIA の5月分追記、20日速報6月分の絶対値 backfill、品目別旬報の day10 取得だった。単価まわりは正確な値を取るため、KDI 経由で関税庁の公式 PDF をダウンロードして抽出させた。関連テスト129件のパスと dev 環境の描画まで確認して、ここまでは定例作業の範囲だった。
「6月分はまだ?」と自分で聞いてしまった
追記が終わった画面を見て、半導体売上の6月分はまだないのか、いつ更新されるのかと聞いた。答えには自分でたどり着いた。7月6日に5月分が追加された。ということは、6月分は8月だ。SIA は毎月初旬に前々月分を発表する、約2ヶ月ラグの統計だった。
この発表サイクル自体は exportStats.ts の notes に文書化してあった。それでも自分は「まだ?」と聞いた。ページに行って notes を開かないと見えない情報は、ないのと同じ扱いを受ける。ページに行く前、カードコンポーネントの時点で「次の更新はいつか」が分かるようにしたい。ついでに、全統計の公表タイミングを一覧する専用ページを1枚分けることにした。
スケジュールを SSOT に切り出す
statsReleaseSchedule.ts を新設させた。各統計に、対象期間と公表タイミング、表示用の言葉を持たせる。
export interface StatSchedule {
periodFrom: number // 対象期間: データ月の periodFrom 日〜
periodTo: number | null // periodTo 日(null = 月末)
publishMonthOffset: number // 公表: データ月 + Nヶ月の
publishDay: number // publishDay 日頃
publishLabel: string // 「当月11日頃」「翌々月上旬」など
// ...
}
行順は公表ラグの短い順で、旬報、月次、2ヶ月ラグ統計の10本が並ぶ。こうして並べると、同じ半導体まわりの統計でも公表は当月内から翌々月まで3段階に散らばっていて、SIA だけが例外的に遅いわけではないと分かる。
| 統計 | 対象期間 | 公表タイミング |
|---|---|---|
| 韓国 旬報 半導体合計(1〜10日) | 当月1〜10日 | 当月11日頃 |
| 韓国 品目別 旬報 上旬 | 当月1〜11日 | 当月12日頃 |
| 韓国 旬報 半導体合計(1〜20日) | 当月1〜20日 | 当月21日頃 |
| 韓国 品目別 旬報 中旬 | 当月1〜20日 | 当月22日頃 |
| 韓国 半導体月次輸出(確報) | 月全体 | 翌月1日 |
| 韓国 DRAM/NAND輸出単価(月初PDF速報) | 月全体 | 翌月1日頃 |
| 台湾 総輸出 | 月全体 | 翌月7〜9日頃 |
| 韓国 品目別 確報(KCS) | 月全体 | 翌月15日頃 |
| 世界半導体売上(SIA/WSTS) | 月全体 | 翌々月初旬 |
| 日本 機械受注「電子計算機等」 | 月全体 | 翌々月中旬 |
決めたのは「最新反映月をスケジュール側に手で書かない」こと。実データ(exportStats.ts ほか)から動的に導出させるので、統計を追記した瞬間に「次回更新」表示も追従する。スケジュール表が古びて嘘をつく事故を、運用ではなく構造で塞いだ。
この SSOT から、新設ページ /memory-makers/release-schedule(統計の更新スケジュール)と、各統計カードの「次回更新」行の両方を描画させる。カード側は実データの最新反映月から次のデータ月を割り出し、その公表予定を表示する。ページを開かなくても、カードを一瞥すれば「次は8月上旬」と読める状態になった。各統計ページの関連ページセクションにも、スケジュールページへのカードを相互に追加させた。ユニットテスト18件を書かせて、dev 環境での描画確認まで済ませた。
トップの導線も2箇所直した
ページを作っても、カードが出てこなければ入口がない。/memory-makers ハブの親要素にスケジュールのカードが入っていないのに気づいて、「統計の更新スケジュール」カードを追加させた。配置は関連の深い「輸出・市場統計」の隣で、intro の文末にも一覧への一文を足した。
サイトトップも見た。投資セクションに親ハブの「半導体サプライチェーン動向」が出ておらず、その配下にあるはずの輸出/市場統計などの子カード4枚が直接並んでいた。親子が逆だ。子カード4枚を親カード1枚に置き換えさせて、導線を親からハブ、ハブから各セクションへ整理した。トップのカードを検査する既存テスト69件もパスした。
実日付カレンダー案を捨てる
最初に出てきたスケジュールページは、ガントチャートだった。縦軸に全統計、横軸に今月から2ヶ月先までの実カレンダー。対象期間バー、公表日マーカー、反映済みステータス、今日ラインまで付いている。情報としては全部正しい。
出来上がった画面を見て、違う、と返した。6月、7月と具体的な日付が並ぶが、知りたいのはそこではない。締め日に対して公表が翌月なのか翌々月なのか。その関係さえ分かれば何も問題なく、具体的な日付を入れる必要は全くなかった。
作り替えさせた。横軸は対象月(M月)、翌月(M+1)、翌々月(M+2)の相対3バンド固定。各統計1行は、グレーの対象期間バーと青◆の公表マーカー1個だけ。ラベルも「当月11日頃」「翌月1日」「翌々月中旬」という相対表現のみで、具体的な月日は排除した。今日ラインや反映済みステータスは削除した(反映状況は下の一覧表の担当)。日付への依存が消えたので ClientOnly も外せて、SSOT からカレンダー座標系の関数も削除できた。図は薄くなって、答えは速くなった。
学び
- 公表サイクルは notes に文書化してあっても、自分が「6月分はまだ?」と聞いた。文書は読みに行く手前(カード)に出して、初めて機能する
- 「いつ」の UI は実日付より関係で表せることがある。「翌月か翌々月か」に落とすと月が替わっても描き替えが要らず、日付依存が消えて ClientOnly も不要になった
- 最新反映月をスケジュール側に持たせず実データから導出させると、統計を追記するだけで「次回更新」が追従する。表の陳腐化を構造で防げた
次に「6月分はまだ?」と思ったときは、ページに行く前のカードが「8月上旬」と答えてくれるはずだ。