(一体記事・2026-10-12・表6・実物3)

結論

push のあとに、公開中のページを1ページずつ確かめるツール「本番確認」を公開します。本番確認は、公開したページが正しく出ているかの確認です。ぼくは2026年9月27日に、この作業をスクリプトにしました。10月10日までの記録に残る20回(のべ502ページ)で、止めたのは7ページです。そのうち本当の不具合は1ページで、スマホの幅で、押す部分の高さが足りませんでした。確かめたページの中に、本番に出ていなかったページはありませんでした。

やったこと結果つまずき
push のあとに、公開中のページを確かめた(2026年9月28日〜10月10日・20回)のべ502ページのうち、止めたのは7ページ7ページのうち6ページは、確かめる側が誤って止めた
止めた7ページを、本当の不具合か、誤って止めたかで分けた本当の不具合1ページ(スマホの幅の押す部分)・誤って止めた6ページ誤って止めた6ページは、どれも9月28日の1回に出た
内部版から公開版を切り出し、作ったばかりのリポジトリと、ぼくのサイトで試した(10月11日)止まる回4回は終了コード 1、通る回2回は終了コード 0内部版は、main とカードの値の読み方・ヘッダーとロゴの名前が、ぼくのサイトの書き方に合わせてあった。公開版で直した

本番確認で見ているもの

push が通っても、公開の仕組みの build(公開するページを組み立てる処理)が終わるまで、本番のページは変わりません。本番確認は、その build のあとに、公開中のページを1ページずつ開いて確かめます。

列見るもの
a 開けるかページが開けるか(応答が 200 か)。手元の出力を渡したときは、本文(main の中)が手元と同じになったかも。そろわなければ30秒おきに最大3分待ち、それでもそろわなければ「未」
b OGSNS のカードに使う3つの値(題名・説明・画像)があり、画像が開けるか
c 画像スマホの幅で読んだ画像のうち、いちばん大きい1枚が上限(300KB)以下か
d 出したくない語内部版だけ。ページの全文に、出したくない語が無いか
e 390pxスマホの幅(390px)で、横スクロール・16px 未満の文字・幅より広い要素・ヘッダーが見出しに重なる・押す部分が 44px 未満・明度差 4.5 未満の6項目が全部 0 か

1つでも × か「未」があれば、止まります。直すのは人です。

20回の記録

内部版は、確かめた結果を、○ でも × でも1行ずつ記録のファイルに残しています。10月10日までに20行ありました。

回の種類回数のべページ
サイトの全ページを見た回(46〜50ページ)10480
一部のページだけを見た回(1〜6ページ)1022
合計(2026年9月28日〜10月10日)20502

止めたのは、20回のうち2回です。

日時見たページ止めたページ本当の不具合か、誤って止めたか
2026-09-28 19:08466(出したくない語 5・本文の比べ方 1)6ページとも誤って止めた
2026-10-02 04:59481(スマホの幅の押す部分)本当の不具合

残りの18回は、全部のページが ○ でした。

20回に含めていないものが2つあります。9月27日の初回は、結果の書き方に穴が見つかり、その日の手元の変更ごと捨てたので、結果が残っていません(書き先を作り直したのは翌日の9月28日です)。記録を残さない試しの回は、回数も結果も残らない作りです。

本当の不具合だった1ページ(10月2日)

10月2日の4時57分に、解剖 02 ── 毎朝の自動実行が「合っているか」を確かめる仕組みの構造の末尾にある箇条3行を、行まるごとのリンクにして push しました。4時59分の本番確認で、このページだけが止まりました。

実物1: 10月2日4時59分の記録の、要約と詳細(原文)

× 1/48 ページ(2026-10-02 04:59)

/kousei/morning-receipt/ e: 押す部分が 44px 未満 1

文の中の語のリンクは、この項目では数えません。箇条の1行がまるごとリンクだと、押す部分は、その行の高さか幅になります。足りなかったリンクの数は1つでした(どのリンクかは、記録に残していません)。

5時01分に、リンクを文の中の語2か所に置き直し、行まるごとのリンク3本は元の字に戻して push しました。同じ5時01分に、このページだけを確かめ直して通りました。止まってから、およそ3分です。

誤って止めた6ページ(9月28日)

9月28日の19時08分は、サイトを組み立てる仕組みを変えた push のあとで、公開中の46ページ全部を見た回です。6ページで止まり、6ページとも、確かめる側が誤って止めたページでした。

5ページは、d(出したくない語)の確かめでした。読者向けの文にも普通に出てくる語と、ほかの語の一部に当たる短い英字の語を、出したくない語に入れていたためです。中身は出したくない語スキャンを公開します(2026年10月5日)に書きました。

残りの1ページは、a の本文の比べ方の誤りでした。そのページの本文には、問い合わせ用のメールアドレスが1つあります。ぼくのサイトは Cloudflare Pages で出していて、独自ドメインでは、Cloudflare のメール保護(Email Address Obfuscation。ページの中のメールアドレスを、ボットに読まれにくい形のリンクに書き換える機能)が、そのアドレスを書き換えていました。手元の出力と一字も同じにならないので、3分待っても「未」のままでした。ページそのものは、本番に出ていました。

Cloudflare の説明では、この機能は登録したときに自動で有効になります。ドメインごとの設定です。同じページを、Cloudflare Pages が最初に付けるアドレス(pages.dev)で開くと、アドレスは書き換わっていませんでした(2026年10月11日に確かめた)。

実物2: 10月11日に、独自ドメインのページから取り出した、書き換え後のリンク(属性の値の長い文字列は「…」で略した)

<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="…">[email&#160;protected]</a>

直し方は、比べる前に、手元と本番の両方の本文から、@ を含む語と、メール保護のリンクを外すことにしました。19時26分に、止まった6ページだけを確かめ直して、6ページとも通りました。最初の止まりから18分です。

確かめたページの中で、本番に出ていなかったページはありませんでした。本番確認を作る前の9月24日には、Cloudflare Pages の build が途中で失敗したことが1回あります(やり直しで直りました)。

内部版から公開版へ

内部版は、ぼくのサイトの書き方に合わせて作っていました。公開版では、ほかのサイトでも使えるように、次を変えました。

もの内部版公開版
確かめるページ直前の push で変わった原稿から決める渡した URL の一覧か、sitemap.xml(サイトのページの一覧を書いたファイル)の全ページ
サイトの URLぼくのサイトに固定引数で渡す
main の読み方属性の無い main だけ属性つきの main も読む
カードの3つの値の読み方属性が決まった順に並ぶ書き方だけ属性の順によらず読む
ヘッダーの重なりぼくのサイトのヘッダーの名前に固定ヘッダーを指定したときだけ見る
ヘッダーのロゴ画像の大きさに数えない外す扱いをやめ、全部数える

ほかに、d(出したくない語)・画像の上限を build の設定から読む作り・朝の自動実行に結果を渡す仕組みを外しました。記録のファイルは、渡したときだけ書きます。

公開版で確かめたこと

10月11日に、公開版を7回走らせました。止まる回と通る回の両方です。

回何に結果
1作ったばかりのリポジトリ(push 先なし)で、手元で配った架空のサイト(2ページ)に、その出力を渡した2ページとも ○・終了コード 0
2同じリポジトリで、手元の出力を1字変えた(/posts/hello/ だけを渡した)3分待って「未」・終了コード 1
3カードの説明(og:description)を消した架空のページb が ×・終了コード 1
4画像の上限を 0KB で渡した画像のあるページの c が ×・終了コード 1
5Playwright(Python からブラウザを動かす部品。c と e で Chromium というブラウザを動かす)を入れていない環境1行の知らせ・終了コード 2
6配布先のリポジトリのフォルダから、このサイト(sitemap.xml の51ページ)に、手元の出力を渡した1ページ(note転載キットを公開します ── 初めて使った日、AIの「そろっています」の下に空白が2つあった)が「未」・終了コード 1
7同じことを、手元の出力を作り直してもう一度51ページとも ○・終了コード 0

6回目の「未」は、手元の出力が本番より古かったためです。手元の出力は、その日の17時18分に push した版から作っていました。走らせる2分前の18時17分に、別の作業で、ほかの記事(note転載キットを公開します ── 初めて使った日、AIの「そろっています」の下に空白が2つあった)に追記を1段足した版が push されていて、本番はその追記の入った版になっていました。出力の詳細に出た最初の違いの場所も、その追記の頭(本番「追記(2026年10月11日): …」)でした。手元の出力をその版から作り直した7回目は、51ページとも ○ でした。

実物3: 2回目の出力(抜粋。表の1行と、詳細の1行〈行の頭の「- 」は外した〉と、最後の1行)

| /posts/hello/ | 未 | 未 | 未 | 未 |

/posts/hello/ a: 3分待ってもそろわない。200 だが <main> が手元の出力と違う。最初の違いは 27字目のあたり: 本番「/h1> <p>まめ太が、棚を1つ作った日の記録です(架空)。</p> <h2 」/手元「/h1> <p>まめ太が、棚を2つ作った日の記録です(架空)。</p> <h2 」

[prod_check] 1ページのうち 1ページで止まった(未 1・× 0)(2026-10-11 18:18・Chromium 起動せず)

「未」のページはブラウザで開かないので、最後の行の Chromium の版は「起動せず」になります。

6回目と7回目の51ページには、9月28日に「未」で止めた、メールアドレスのあるページも入っています。今の比べ方では、2回とも ○ でした。

配布物と、できないこと

配布先は GitHub の haif-tools。中身は本体(prod_check.py)・スマホの幅の6項目の判定(check_390.js)・架空のサイト(2ページ)・README の4つです。使い方は①Playwright と Chromium を入れる ②push して、build が終わるころに、サイトの URL と手元の出力を渡して走らせる ③止まったら詳細を見て直し、止まったページだけをもう一度確かめる。

できないこと: 「未」は、build の失敗と遅れを見分けません。手元の出力と比べるのは main の中だけです。見た目と、SNS のカードの出方は見ません。スマホの幅は 390px だけです。出したくない語は見ません。外れた所は直さず、push を止める設定も入っていません。公開中のサイトで確かめたのは、Cloudflare Pages で出しているぼくのサイトだけで、環境は macOS だけです。詳しくはツールページに書きました。

この記事のツール

この記事について

同じところで詰まった、ここが分からなかった、があれば聞かせてください。次の記事の材料にします。ツールを使って詰まった場合は、リポジトリのIssueでも受け付けています。

Xで返信する →