背景
アニメの海外の反応をまとめるサイトを毎日更新しています。
「どの作品の何話が新しく放送されたか」を判定する部分は、決定論的なスクリプトに任せています。
私は放送スケジュールを覚えていられないので……機械に任せたい気持ちが強い。
その判定が、今夜あやしい答えを返してきました。
何が出たか
スクリプトの出力は下記のような形をしています。
coveredEpisodes は既にサイトへ載せてある話数、estimatedAired は放送済みと推定した話数、candidateNewEpisodes はその差分です。
{
"slug": "bleach-tybw-calamity",
"coveredEpisodes": [1, 2, 3, 4, 5, 6],
"latestCovered": 6,
"firstAired": "2026-07-25",
"estimatedAired": 9,
"candidateNewEpisodes": [7, 8, 9],
"note": "estimatedAired は毎週放送仮定の概算。実放送・休止は要外部確認。"
}
7話・8話・9話が未掲載に見えます。
3話ぶん一気に埋められる、と一瞬思いました。
実際には6話までしか放送されていなかった
一次情報(MyAnimeList のエピソード一覧。MyAnimeList はアニメの作品情報とエピソードごとの掲示板を持つ海外のデータベースサイトです)を開いて確かめたところ、ヘッダーの表記は Episodes (6/10) でした。
第6話「The End」の放送日が Aug 29, 2026。それ以降の回は存在しません。
estimatedAired: 9 の根拠は note にあるとおりで、初回放送日から毎週1話ずつ放送されたと仮定した概算です。
この作品は途中に休止が入っていたので、初回から数えた週数と実際の話数が3つずれていました。
もしここで確認を飛ばしていたら、放送されていない第7話・第8話・第9話のページが3つできていたことになります。
中身は空、あるいは無関係な投稿の寄せ集めです。
どう直したか
スクリプト側は直していません。note に「実放送・休止は要外部確認」と書いてあるとおりの挙動なので、実装は正しい。
変えたのは手順のほうです。
candidateNewEpisodes が出たら、書き込む前に一次情報のエピソード一覧を1回だけ開く。
この1回で分かるのは次の2つです。
- 放送済みの話数(
Episodes (X/Y)の X) - その回の実際の放送日
今回は別の作品(BLACK TORCH)で Episodes (12/12)、第12話「Once Again」が Sep 19, 2026 放送、と確認できたので、そちらの第12話を作って海外の反応を12件載せました。
推定が3つずれていた作品と、推定どおりだった作品が、同じ日の同じ出力に並んでいたことになります。
なぜ推定値を残しているか
そもそも推定をやめて、毎回一次情報だけを見ればいいのでは、という話はあります。
ただ、推定には候補を絞る役割があります。
29作品ぶんのエピソード一覧を毎晩全部開くのは、時間もリクエスト数も現実的ではありません。
推定で「動きがありそうな作品」を数件に絞り、その数件だけ一次情報を見る。この二段構えは維持したい。
問題なのは推定値の存在ではなく、推定値と実測値が同じ形で並んでいて見分けがつきにくいことのほうだと思っています。
estimatedAired というキー名と note で一応は区別されていますが、JSON を流し読みすると数字だけが目に入る。
いまのところ、キー名の頭に estimated を付ける以上の良い案はありません。
強いて言えば、下記のように推定値を数値そのものではなく状態つきの値にして、
// 推定値はそのままでは書き込みに使えない形にしておく
const aired = { value: 9, confirmed: false };
function addEpisodes(slug, aired) {
if (!aired.confirmed) {
throw new Error(`${slug}: 放送話数が未確認(一次情報で確かめてから書き込むこと)`);
}
// ここから実際の書き込み
}
confirmed: true でないと書き込み処理が受け付けない、という作りにはできそうです。
aired の出所は上の JSON の estimatedAired で、一次情報を見た人だけが confirmed を立てられる、という運用を想定しています。
今回はそこまで手を入れず、手順に1行足すだけにしました。ずれは毎日起きるわけではなく、休止のある作品だけの話なので……実装コストに見合うか判断がつかなかったためです。
出来上がったページは https://anime.autoarticles.net/ に置いてあります。
推定は候補を絞るためだけに使う。書き込む前に一次情報で1回だけ確かめる。守るのはこの2つです。
本記事はAI補助で執筆した、個人開発の紹介記事です。