Appearance
デプロイ後チェックリスト
ステージングまたは本番へデプロイしたあと、デプロイ後テスター(または同等の役割)が実施する確認項目です。正本は本ドキュメントです(一時的なチェックリスト Issue #3936 から移設)。ステージング反映後は、テスターが A〜E を実施する前に、開発担当が差分まとめを用意する。
方針
- ステージングでの記事公開は実施してよい
- 本番での公開・破壊的な本番操作は、まっくの明示指示がある場合のみ行う
デプロイ差分まとめ(開発担当)
ステージングへデプロイしたあと、開発担当が差分を読み取り、テスターが確認しやすいメモを作る。クラウドエージェントは使わない(GitHub上の比較・読み取りのみ)。
流れ
- ステージングにデプロイされたら、前回の本番デプロイタグ(日付形式
YYYYMMDD)とdevelopの差分を GitHub で比較する- 前回タグは GitHub の Tags 一覧の先頭、または
git fetch --tags && git tag -l '20*' --sort=-creatordate | head -1で確認する - 比較 URL:
https://github.com/makinokeiichi/slot-kouryaku/compare/<前回タグ>...develop - 入った PR と変わったファイルを確認する(書き込み・ブランチ作成はしない)
- 前回タグは GitHub の Tags 一覧の先頭、または
- 入った PR と変更ファイルから、「影響しそうなページ・管理画面」と「確認してほしい点」を短くまとめ、デプロイ後テスターに送る。運営統括にも写しを送る
- テスターがステージングを確認 → OK ならまっくがタグ(
YYYYMMDD)を切って本番デプロイ → 本番確認でも同じまとめを使う
まとめの書き方(目安)
- 比較範囲(前回タグ →
develop) - 含めた主な PR(番号と一言)
- 影響しそうな公開ページ / 管理画面
- テスターに見てほしい点(チェックリスト A〜D のうち該当するものを指す)
- 既知の非障害に触れる変更があれば一言
正本の確認項目は本ドキュメントの A〜E。差分まとめは「どこを重点的に見るか」のガイドであり、A〜E の代替ではない。
環境メモ
| 項目 | 内容 |
|---|---|
| ステージング URL | https://www.staging.slotkouryaku.com/ |
| 管理画面ログイン | /login_65228(/wp-login.php および /wp-admin/ 直アクセスは 403 が想定どおり) |
| テスター用ユーザー(ステージングのみ) | 例: makku-staging-admin |
ステージングの日別記事・リンクが本番と違って確認できないときは、開発担当が 本番データの部分同期 で直近のデータを取り込む。
A. 公開ページ(ログアウト状態)
- [ ] トップが開く(200)
- [ ] 直近の日別記事を 2〜3 本開き、考察欄が表示されること。リロードしても問題ないこと
- [ ]
/gekkan-makk/が開く - [ ]
/member-login/が開く(ログイン操作自体は任意) - [ ] (任意)
/period-kishu-ranking/が開く - [ ] 通常閲覧で
async-warm-*が大量に 429 にならないこと(連打リロードでは 429 になり得る。少し待って 200 に戻るのは既知)
B. API(アプリケーションパスワード)
- [ ] 認証ありでカスタム API が読めること。未認証は拒否されること
- [ ] 例: ops-status / data-import / daily-article / x-announce / birthday / recommend / new-machine の読み取り
- [ ] コアの
/wp-json/wp/v2/*は HTML 403 のままであること(意図した挙動)
C. 管理画面(ログイン状態)
次の画面が開くこと:
- [ ] min-repo HTML インポート
- [ ] ana-slo 取得
- [ ] 日別記事一覧 / 自動作成設定
- [ ] 有料記事 AI 設定
- [ ] 新台取得 + 機種リンク
- [ ] 日別データ削除
- [ ] デバッグログ
実行ボタンについて: 指示がある場合のみ、ステージングでインポート/更新の実行ボタンを押してよい。本番公開・本番操作は指示なしでは行わない。
D. インポート → 日別記事フロー
ステージングで 2026-10-05 に確認済み。デプロイ後も必要に応じて再確認する。
- [ ] min-repo インポートで island + espasu が成功すること。未リンク機種はインポート前に確認が求められること
- [ ] インポート後、日別記事にデータが出ること。「読み込み中」が張り付かないこと
- [ ]
POST /wp-json/daily-article/v1/articles/{id}/fieldsで考察が更新され、GET / フロントに反映されること(#3895 / #3916) - [ ] ヒートマップの layout-missing ログは既知。Fatal が増えていないことを見る
日別記事のメール欄(#4051)
日別記事キャッシュの無効化条件(世代・TTL・通知の経路)を変えたデプロイの後に行う。
- [ ] デプロイ直後、管理画面の「キャッシュ管理 → 日付を指定してクリア」で当日と翌日をクリアする(デプロイ前に作られた空表示を残さないため)
- [ ] P-WORLD メールの取り込みスロット(21:00 / 22:00 / 22:30)の後、
GET /wp-json/ops-status/v1/pworld-mails?date=<翌日>を運用確認bot のアプリケーションパスワードで呼ぶ。items[].displayedが true のホールについて、mail_image_cache[].stateがemptyのまま 5 分以上残らないこと。取り込み後にcache_generationの日の値が増えていること - [ ] 公開 API とページでも確認する。
async-mail-imageは nonce なしだと 403 なので、ページ内のdailyArticleAsync.nonceをX-WP-Nonceに付け、Cookie も引き継ぐ
bash
D=2026-10-08 # 翌日(Y-m-d)
URL="https://www.slotkouryaku.com/daily-article/2026-10-8/" # 翌日の日別記事の URL
curl -s -c /tmp/cj.txt -A "Mozilla/5.0" "$URL" -o /tmp/p.html
N=$(grep -oE 'dailyArticleAsync=\{"restUrl":"[^"]+","nonce":"[0-9a-f]+"' /tmp/p.html | grep -oE '[0-9a-f]{10}"$' | tr -d '"')
curl -s -b /tmp/cj.txt -A "Mozilla/5.0" -H "X-WP-Nonce: $N" \
"https://www.slotkouryaku.com/wp-json/daily-article/v1/async-mail-image?hall=island&date=$D"
grep -c 'mail-image--empty' /tmp/p.html- [ ] メールのあるホールで API が画像付きの HTML を返し、ページ HTML の
mail-image--emptyの数がメールのないホールの数以下であること - [ ] 直らないときは、日付を指定してクリアで暫定対応し、
pworld-mailsの結果(cache_generationとstate)を #4051 に貼る
E. 既知の非障害・観察事項
次は失敗扱いしない。様子を見て、悪化や Fatal 増加があれば報告する。
- [ ] 連打リロードで
async-warm-*が 429 になり得る(既知) - [ ] 一部日で warm は 200 でも「読み込み中」が残る場合がある(例: ステージング 10/2)。関連の自動テスト要望は #3931
- [ ] インポート画面のラベルなしボタン(軽微)
関連 Issue
- #3931(「読み込み中」残留などに関する自動テスト要望)
- #3935
- #3921
- #3928
- #3929
- #3930
- #3936(本チェックリストの一時置き場。本ドキュメントへ移設済み)
- #4051(日別記事のメール欄が取り込み後も空表示のまま残る)