台湾の外銷訂単CSVが止まったので経済部の新聞稿xlsxを予備経路にした(韓国品目別旬報の欠けとコミットゲートの誤検知も直す)
台湾の外銷訂単CSVが止まったので経済部の新聞稿xlsxを予備経路にした(韓国品目別旬報の欠けとコミットゲートの誤検知も直す)
前日分(10月12日)の日記生成チェーンは、朝のうちに最後まで回り終えていた。
統合日記と詳細記事をまとめたコミットは e690f56a になっている(10月12日の日記)。
それでも、報告には片付いていない点が残っていた。
自分が頼んだことは三つある。
- 非公開にしたい記事を
_local-unpublishedへ移す - 原因が分かっているなら、Codex のコミットレビューを通す
- 統計の2件は、よく分からないので正常な状態にしておく
非公開にしたい記事を _local-unpublished へ移した
ある記事を、サイトには出さずに置いておきたかった。
ただ、content/ の通常の場所に置いたままだと、公開ビルドの SQL ダンプに本文が残りかねない。
ダンプに残るなら、非公開にした意味がない。
そこで apps/web/content/_local-unpublished/ へ移すように頼んだ。
この移動は、あとで統計の修正とは別のコミットにしてもらった。
台湾の外銷訂単は、公開CSVが7月分で止まっていた
台湾の輸出受注(外銷訂単)は、公開 CSV から取っている。 その CSV は、何度取り直しても 8/20 版(7月分まで)しか返してこなかった。
まず、8月分を最初にどこから取ったのかを git の履歴で確かめてもらった。 そのうえで、経済部の新聞稿のような別の公開経路を探させた。
経済部の新聞稿ページ(8月分)は取得できた。 新聞稿には、全附表をまとめた xlsx が付いていた。 貨品別の表(表2)には、電子產品と資訊通信の列がある。 CSV が止まったときは、この xlsx から CSV より新しい月だけを補う形にした。
実装の途中で、取得の段で一度つまずいた。
- Node の fetch は、Cloudflare に 403 で弾かれた
- curl なら通った(TLS の特徴で判定されているようだ)
そのため、予備経路の取得は curl で行う。
もう一つの落とし穴は、xlsx の見出しにあった。 結合セルの見出しのせいで、年增率の列を金額と読むおそれがある。 そこで、最初に現れた列を採るようにした。 この部分のテストを6件足してもらい、テストは15件とも通った。
実データで取得スクリプトを走らせると、改定0件、exit 0 で冪等になった。
取得元の後退を知らせる警告も、出なくなっている。
taiwanExportOrders.ts は D1 から再生成し、値は変わらずヘッダーだけが変わった。
経緯は issue(2026-10-02 の取得元の後退)に追記し、解決済みにした。
最後に、外銷訂単のページが表示できることを確かめた。
韓国の品目別旬報は、SSDの行が空のまま入った
韓国の品目別旬報は、X の投稿から取り込んでいる。 10月上旬分の品目別の数値が、10/12 の投稿に出ていた。 9月上旬分も、同じ投稿元から取っている。
数値を読み取って D1 に10件追加したところ、テストが1件落ちた。 原因は、SSD の10月の行が day10 と day20 のどちらも null で入ったことだった。
この行を消したい。 ただ、D1 は追記型なので、まず削除の手段を確かめてもらった。 そのうえで、値が null の SSD の2行だけを D1 から消した。
TS 側からも SSD の行を外し、D1 から生成し直した。 TS の差分は意図した追記の13行だけで、D1 の中身と一致した。 念のため手編集の検知を外して D1 から作り直し、同じ内容になることも確かめた。 テストが通り、品目別旬報のチャートに10月が出ていることも画面で確認した。
単価の9月後半はどこへ行ったのか
報告を受けて、自分でも画面を見た。 すると、単価のチャートで9月後半の分が抜けているように見えた。
スクリーンショットを貼って、何が原因かを尋ねた。 このセッションのログには、その答えが残っていない。
コミットゲートは、記事URLの「sk-」をキーと見なしていた
朝のチェーンでは、日記のコミットのときにゲートが「OpenAI 形式のキー」の可能性を検出していた。
調べると誤検知で、記事 URL の中の sk- に反応していた。
/elon-musk-teach-the-problem-not-the-tool
^^^ musk- の末尾が sk- に見えた
このゲートは、秘匿情報らしい文字列を見つけると Codex のレビュー自体を飛ばす。 つまり誤検知のせいで、日記のコミットはゲートでの Codex レビューを受けずに通っていた。
原因が分かっているので、レビューを通してほしいと頼んだ。 Claude Code にコミットの差分(110ファイル)を再現させた。 次に、検知に当たる箇所が誤検知の1件だけかを洗い出させようとした。 ところが、ゲートの判定を迂回する形になるため、この経路は権限で拒否された。 作業はそこで止まり、判断が自分に返ってきた。
返事は「検知パターンを修正しましょう」にした。 迂回するのではなく、検知する側を直す。
検知パターンに後読み(lookbehind)の条件を足してもらった。
sk- の直前を見る条件で、musk- のように単語の途中に現れた sk- を拾わないようにした。
直したあとは、二つの向きで確かめた。
- 誤検知は消えた
- 本物のキーの形をした文字列は、今までどおり検知される
再現したコミット e690f56a に、ゲートそのものをかけ直した。
今回は誤検知に邪魔されず、Codex のレビューが最後まで走った。
コミットとプッシュ
作業が終わったかを確かめると、頼んだ分は済んでいたが、どれもまだコミットしていなかった。 そこで、コミットとプッシュを頼んだ。
mdx-playground は2コミットに分けた。
先に統計の修正(daf74b2c)、次に記事の移動である。
Codex の指摘は、どちらのコミットにも出なかった。
~/.claude のリポジトリでは、先に入ってきていた1コミットを pull してから、コミットしてプッシュした。
このコミットで、Codex が検知パターンの「大文字と数字を含む」という条件を指摘してきた。
誤検知を止めるには後読みの条件だけで足りるので、この条件は外してもらった。
最後に、両方のリポジトリが origin と一致していることを確かめた。
試行錯誤のまとめ
| 試したこと | 結果 |
|---|---|
| 外銷訂単の公開 CSV を取り直す | 何度取っても 8/20 版(7月分まで) |
| 新聞稿の附表 xlsx を Node の fetch で取る | Cloudflare に 403 で弾かれた |
| 同じ xlsx を curl で取る | 通った。予備経路は curl にした |
| 旬報10月上旬を D1 に10件追加 | SSD の2行が null で入り、テストが1件落ちた |
| null の SSD 2行を D1 から消し、TS を再生成 | 差分は追記13行だけ。テストが通った |
| 差分を再現し、誤検知の箇所を洗い出す | ゲートの迂回にあたるとして権限で拒否された |
| 検知パターンに後読みの条件を足す | 誤検知が消え、本物のキーの形は引き続き検知された |
学びメモ
- 公開 CSV が止まっても、同じ統計の新聞稿に付く附表が予備の取得元になる。xlsx は結合セルの見出しで列を取り違えやすい
- Node の fetch が 403 で弾かれても、curl は通ることがある
- 誤検知を迂回しようとすると、権限で止まる。検知パターンを直し、本物のキーの形が引き続き捕まることまで確かめると、ゲートを残したまま通せる
- 追記型の D1 に null の行が入ったら、消す手段を確かめてから該当行だけを消し、TS は D1 から生成し直す
画面を見て気づいた単価の9月後半の抜けだけは、理由をまだこの記録に書けていない。