運営の透明性ページ
評価ロジックとアルゴリズム改善履歴
Samurai Stats の打撃・投球評価が「どの数字を、どの閾値で、どう判定しているか」と、 年間ペース推定 (On-Pace) の前提・限界、データソースの利用根拠、 アルゴリズム改善履歴までを 1 ページに集約します。 自動生成のサイトであることを明示しつつ、判定の根拠を全部開示することで 再現性と検証可能性を担保することが目的です。
データソースと利用根拠
打撃・投球の数字は MLB Stats API (statsapi.mlb.com/api/v1) を一次ソースとして取得しています。これは MLB.com / At Bat 公式アプリと同一の 統計エンドポイントで、認証不要・公開アクセス可能ですが、Google や MLB の公式 ドキュメントとしては「文書化されていない」性質のエンドポイントです。 本サイトでは以下の方針で利用しています。
- 非商用での集約利用:MLB 全選手の一次データ販売ではなく、日本人選手にフォーカスして 日本語ローカライズと年間ペース推定という独自の編集レイヤーを加えた上で公開
- 提供元クレジット必須:全ページのフッターに「データ提供: MLB Stats API」を常設
- 取得頻度の抑制:cron で日次バッチ取り込み + 24 時間キャッシュ。 選手詳細ページは 5 分キャッシュ・試合中ページのみ短キャッシュで実装
- 権利関係の明示:選手の顔写真・チームロゴは一切使用せず、数値情報のみ。 選手名は MLB API の fullName + Wikipedia/Wikidata 由来の漢字名で表記
選手の漢字名解決には Wikidata と Wikipedia の langlinks を併用しています(cron 自動検出)。 MLB API では英語表記のみ提供される選手名を、日本語の読み物として自然に表示するための補完です。
データ更新サイクル
全データは VPS の crontab で日次バッチ取り込み。各ジョブの起動時刻と役割は以下のとおり。
| 時刻 (JST) | ジョブ | 役割 |
|---|---|---|
| 08:00 | mlb-daily-stats | 前日試合分の取り込み + 年間ペース再計算 + 全選手の Final 試合 backfill + MLB 全体 Top100 リーダー更新 |
| 08:30 | detect-japanese-mlb | 日本人選手の新規検出 + IL / リハビリ / 復帰直後 / DFA 等のロースター状態同期 |
| 17:30 | mlb-daily-stats | 西海岸延長戦まで含めた全試合の取りこぼし回収 + API 反映遅延補正 |
| 18:00 | detect-japanese-mlb | 朝の cron での取りこぼし分を最大 12 時間以内に補正 |
ページのキャッシュ更新間隔 (revalidate) は選手詳細・ランキング・月間ハイライトが 5 分、 キャリア通算と前年データなど変動しないものは 24 時間。sitemap は 1 時間です。 表示の「最終更新」時刻は DB 上の actual な更新時刻を <time dateTime> + JSON-LD dateModified で出力しており、レンダ時刻ではありません。
打撃評価の閾値(全数値開示)
選手詳細ページの「シーズン概況」で出力する打撃評価は、すべて以下の閾値分岐で 機械的に判定しています。AI による評価生成は一切使っていません。
| OPS | 評価ラベル |
|---|---|
| ≥ 1.000 | MVP 級の数字 |
| ≥ 0.850 | 強打者の領域 |
| ≥ 0.750 | MLB 平均を上回る水準 |
| ≥ 0.650 | MLB 平均近辺 |
| < 0.650 | 立て直しを期待したい数字 |
得点圏 (RISP) 打率は 10 打数以上で評価対象 (0.300 以上 = 集中力際立つ / 0.250 以上 = 勝負強さ / 0.200 以上 = 平均 / それ未満 = 結果が伴っていない)。三振率・四球率は 50 打席以上で評価対象。 OBP ≥ .360 かつ SLG ≥ .480 で「出塁能力と長打力をともに高水準」と判定します。
投球評価の閾値(全数値開示)
| 防御率 (ERA) | 評価ラベル |
|---|---|
| < 2.00 | 圧倒的な数字 |
| < 2.50 | リーグ屈指の好成績 |
| < 3.50 | 一流投手レベル |
| < 4.50 | MLB 平均近辺 |
| ≥ 4.50 | 立て直しを期待したい数字 |
WHIP は < 0.95 = 最上位 / < 1.10 = 一流 / < 1.30 = 平均 / それ以上 = 粘る投球。 K/9 は ≥ 11 = 圧倒的 / ≥ 9 = 上位 / ≥ 7 = 平均 / それ未満 = command 型。 BB/9 は ≤ 2.0 = 制球光る / ≤ 3.0 = 平均。 球種別 arsenal は MLB Stats API の pitchArsenal エンドポイントから使用率と平均球速を取得しており、5 球種以上で「投げ分けの引き出し」、3 球種以上で「主軸構成」と判定します。
規定到達の判定式
- 規定打席 = 502 PA(3.1 × 162 試合・MLB 公式の打率タイトル基準と同じ)
- 規定投球回 = 162 IP(1.0 × 162 試合・MLB 公式の防御率タイトル基準と同じ)
- 判定は 4 段階:
reached(既到達) /on_pace(年間ペース上到達見込み) /short(不達ペース) /unknown(projection なし)
詳細な計算式と画面上のバッジ色分けは 年間ペース推定 (On-Pace) の解説 に切り出してあります。
Samurai Score の計算式(独自合成指標)
Samurai Score は本サイトのみが算出する 0〜100 点スケールの合成評価指標です。 OPS や防御率といった単一指標では拾いきれない「規定到達ペース」「対左右バランス」「クラッチ」を 一つの数字に圧縮することで、選手の「いま」を一目で比較できるように設計しています。 以下の閾値とサブスコアは lib/mlb/samurai-score.ts に 一元化されており、画面表示は常にコードと同期しています。
打者スコア(合計 100 点)
| サブスコア | 満点 | 閾値(点数) |
|---|---|---|
| OPS 基礎点 | 40 | OPS ≥ 1.000 で 40 / ≥ .850 で 30 / ≥ .750 で 20 / ≥ .650 で 10 / 未満 0 |
| 規定打席ペース | 20 | 到達済み 20 / 到達ペース 15 / 未達ペース 5 / 評価不能 0 |
| 対左右バランス | 20 | 対左右投手の OPS 差 < 0.05 で 20 / < 0.10 で 15 / < 0.15 で 10 / < 0.20 で 5 / 以上 0 |
| 得点圏クラッチ | 20 | 得点圏打率 ≥ .300 で 20 / ≥ .275 で 15 / ≥ .250 で 10 / ≥ .225 で 5 / 未満 0(10 打数未満は評価対象外) |
投手スコア(合計 100 点)
| サブスコア | 満点 | 閾値(点数) |
|---|---|---|
| 防御率 | 35 | ERA < 2.00 で 35 / < 2.50 で 30 / < 3.00 で 25 / < 3.50 で 18 / < 4.00 で 12 / < 4.50 で 6 / 以上 0 |
| WHIP | 20 | WHIP < 1.00 で 20 / < 1.10 で 16 / < 1.20 で 12 / < 1.30 で 8 / < 1.40 で 4 / 以上 0 |
| K/9 | 20 | K/9 ≥ 10.0 で 20 / ≥ 9.0 で 15 / ≥ 8.0 で 10 / ≥ 7.0 で 5 / 未満 0(5 IP 未満は評価対象外) |
| 規定投球回ペース | 15 | 到達済み 15 / 到達ペース 12 / 未達ペース 3 / 評価不能 0 |
| 対左右打者バランス | 10 | 対左右打者の被打率差 < 0.025 で 10 / < 0.050 で 6 / < 0.075 で 3 / 以上 0 |
評価ラベル
打者: ≥ 85 MVP級 / ≥ 70 中軸クラス / ≥ 55 レギュラー水準 / ≥ 40 出場機会獲得段階 / 未満 立て直し期
投手: ≥ 85 サイ・ヤング級 / ≥ 70 エース級 / ≥ 55 ローテーション中軸 / ≥ 40 ローテ末尾〜中継ぎ / 未満 立て直し期
レーダーチャートの読み方(サンプル)
選手ページでは各サブスコアを「満点に対する達成率(%)」に正規化してレーダーで描いています。 軸ごとに満点が違う(OPS は 40 点・他は 20 点など)ため、生の点数のままだと満点の大きい軸が形を支配してしまうので、達成率 = score ÷ max × 100 に揃えて「どの次元が強く、どの次元が弱いか」をバランスとして読めるようにしています。 点線は MLB 平均級の選手の目安で、選手の塗りがこの点線の外側に出ていればその軸は平均超、内側なら平均未満と一目で分かります。
サンプル: ある強打者(打撃)
※ サンプルは読み方を示すための架空の数値です。点線(MLB 平均級)の各軸の値は、上の閾値表の「平均近辺」の tier に対応させています (例: 打者 OPS 基礎点の点線 50% は OPS .750 = 20/40 点に相当)。閾値を変更したら基準ポリゴンも追従させます。
設計の意図と限界(クリックで展開)
加重平均でなく「上限あり加点方式」を採用した理由: 加重平均は閾値より上の数字が「もったいない」状態になります。 加点方式は各カテゴリの満点に達したら以降の差を切り捨てる設計で、説明文(「OPS 1.000 以上は一律 40 点」)が直感的に伝わることを優先しました。
サブスコア構成の対称性: 打者は OPS(総合数字)+ 規定到達 + 左右バランス + クラッチの 4 軸、 投手は ERA + WHIP + K/9 + 規定到達 + 左右バランスの 5 軸。投手側に WHIP と K/9 を分離したのは、 「結果(ERA・WHIP)」と「内容(K/9)」を別軸として扱うためです。
限界の自認: (1) park factor(球場補正)は未反映 — 同じ OPS でも狭い球場と広い球場で評価が違うべき場面がカバーできていません。 (2) splits(対左右・RISP)は MLB API の statSplits 取得で空配列のことがあり、その場合はサブスコア 0 になります(バランス未測定 ≠ バランス悪い のため厳密にはバイアスありです)。 (3) 二刀流選手は打者スコアと投手スコアを別々に算出するため、両方を 1 つに合算した「総合スコア」は出していません。
年間ペース推定 (On-Pace) の限界自認
On-Pace の数字はあくまで「現状のペースを線形外挿した場合の年間到達点」であって、 以下の前提が崩れると実際の数字は推定から大きく離れることがあります。
- 怪我・体調変動を反映しない。IL 入りや疲労の蓄積で出場ペースが急減すると推定は外れる
- 調子の波を平均化する。月別 grafで見れば 5 月好調 → 6 月不調といった波があっても、 年間 projection は「今までの平均ペースが続いた場合」しか出ない
- シーズン進行率 5% 未満は外挿不能(標本が小さすぎて誤差が大きいため null を返す)
- レート系指標 (打率・防御率・WHIP・OPS) は projection で変動しない。試合数だけ変動するカウント系 (HR / 打点 / 奪三振 / 勝利) と区別して扱っています
- 先発投手のローテーション床: 3 GS 以上の先発は「健康な 5 人ローテが残期間継続した場合の登板数」と 線形外挿の max を取る (早期シーズンの 1〜2 turn skip での誤判定を回避)
- 想定上限 (cap): 打者 162 試合 / 先発 35 登板 / 中継ぎ 80 登板でクリップ。これは規則ではなく 運用パラメータで、cap 超過時は cap と現状値の max を使って「projection が現状値を下回らない」床を貼っています
データの欠落と評価の限界
- 試合中の数字は試合終了まで暫定: 試合中ページは MLB Stats API の
/game/{gamePk}/feed/liveから打席結果を抽出して合成しますが、API キャッシュの反映遅延が数十秒〜数分発生することがあります - 新人選手は前年比較が出ない: 編集テキストの「前年同月比」「前年シーズン全体比較」は 前年の MLB データがある選手のみ表示。新人や前年マイナー在籍の選手はこれらの段落が省略され、 編集テキスト全体の文字数も短くなります
- 打者の球種別評価は非対応: MLB Stats API は投手の
pitchArsenalのみ提供しています。 打者の対球種打率は Baseball Savant への外部依存となるため、本サイトでは取り扱っていません - 球場補正 (park factor) は非対応: HR の出やすさ・ヒットの出やすさを本拠地別に補正する park factor は、 MLB 公式 API では提供されていないため本サイトでは未実装です
- 規定到達前のランキング扱い: ERA / WHIP / 打率 / OPS などの規定到達 required 系のランキングは 規定打席・規定投球回到達者のみが公式対象ですが、本サイトでは規定到達前の日本人選手も末尾に 「規定到達前」バッジ付きで救済表示しています (6 人ローテで qualified から外れる大谷の MVP 級 ERA を取りこぼさないため)
アルゴリズム改善履歴
評価ロジック関連コード (lib/editorial/ /lib/projection/ /lib/mlb/) への 直近 30 commit を、git log から自動で取り込んで時系列表示します。 評価が「いつ・どう変わったか」を後からでも検証できるようにするためのものです。
- 2026-06-13
b305543feat: トップ並び順を「今日の見出し」順に刷新 + 出場選手全員に試合結果1行を表示(T-158第2弾・直近試合で活躍した選手→次戦昇順・活躍判定はX bot基準をlib/mlb/highlights.tsに共通化・凡退の日も結果表示=ファンの一喜一憂・JST今日/昨日窓・Samurai Score横断ソートは投打偏りのため不採用) - 2026-06-01
9ec52f8feat: T-155 選手詳細に独自Information Gain次元4種を追加(①安定感スコア=試合別ログのばらつきを0-100化+小サンプル信頼度補正/②MLB分布パーセンタイル=tierを上位約X%相当に格上げ/③調子momentum=直近フォームvsシーズン平均で上昇下降判定/④キャリアイヤー判定=yearByYearの自己ベストOPS/ERA更新ペース・全て既存game log/yearByYear再利用で追加fetch無し・URL増やさず編集独自性を強化・AdSense却下要因③コピー/キュレーション不足への対抗・lib/mlb/consistency.ts+percentile.ts+momentum.ts新設+editorial/mlb.ts統合+選手ページ配線・全13選手ローカル検証/typecheck/lint済) - 2026-05-28
aa55463feat: シーズン概況の段落を集約して視覚的にコンパクト化(buildPlayerEditorial で「opener+評価」「splits+前年比+ペース」を各1段落に連結=二刀流の大谷は8→4段落・単独は4→2段落・各builderは完結文を返すので連結しても文法は崩れない・内容と独自次元は全維持で改行だけ削減・前段の優先度↓再配置と合わせて長文の体感ボリュームを軽減) - 2026-05-28
f9d9143feat: 選手詳細のシーズン概況/Pro Tips を数字・チャートの下に移動し editorial を密度UP(UX: 一般ユーザーが先に見たい主要数字/Samurai Score/打撃投球成績/直近試合を上、長文の概況とPro Tipsはページ下部へ優先度を下げて再配置・独自の分析次元=対左右splits/RISP/球種arsenal/前年比/年間ペースは全て維持したまま openerの冗長な総合指標メタ文を削除し打撃投球の opener を各1文に圧縮+MLB Top10 の「リーグを牽引する数字となっています」を「に入っています」に簡潔化+K/BB評価文の非文法的な『光りますという打席内容です』を文法修正しつつ短縮・大谷で 1360→1222字・文字数を稼ぐ水増しはむしろ Helpful Content 上の逆効果という整理に基づく=独自性とUXを優先) - 2026-05-28
b3d2596feat: T-154 補強 Samurai Score レーダーに MLB平均級の基準ポリゴンを重ね + /about/accuracy に誤差率グラフ + /about/methodology にサンプルレーダー埋め込み(A: samurai-score.ts に HITTER/PITCHER_RADAR_BASELINE 定数=各サブスコアの平均近辺 tier の達成率%を追加し SamuraiScoreRadar が点線(var(--ink-low) strokeDasharray 3 3 fill none)で基準ポリゴンを選手の形の下に重ね描画+「点線=MLB平均級の目安」キャプション・選手の塗りが点線の外/内で平均超/未満を一目化=要因③ 独自編集解釈の強化 / B: 予測精度セルフトラッキングに DeviationBarChart(recharts 横棒・誤差率%=|予測−現在ペース|÷予測×100 で HR と防御率のスケール差を吸収・打者=chart-1 投手=chart-2・予測→現在ペースは tooltip 開示)を Top5 テーブルの上に追加・データ蓄積中は従来通り空状態 / C: /about/methodology の Samurai Score 節に架空サンプル打者のレーダー+基準ポリゴンを埋め込み「score/max×100 で正規化する理由」と「点線=平均近辺 tier 対応」を解説・全て新規URLなし/手書きなし) - 2026-05-27
c68474cfeat: T-154 X-1 独自合成指標 Samurai Score 導入(AdSense Information Gain の決定打・MLB API 公開データに本サイト独自の計算式を適用した 0-100 点スケールの proprietary benchmark・打者 4 軸 = OPS基礎点 40 + 規定打席ペース 20 + 対左右バランス 20 + 得点圏クラッチ 20 / 投手 5 軸 = 防御率 35 + WHIP 20 + K/9 20 + 規定投球回ペース 15 + 対左右打者バランス 10・サブスコア内訳を UI で完全公開し計算式は /about/methodology で同期表示予定・lib/mlb/samurai-score.ts 新設に computeHitterScore / computePitcherScore + ScoreBreakdown[] 型・選手詳細ページに「Samurai Score」セクション追加で打撃/投球を 2 カラム表示・大谷で打撃 60/100 レギュラー水準 + 投球 97/100 サイ・ヤング級 を実機確認・残り = UpdatedAt 実質変更検出 + methodology 動的化 + accuracy セルフトラッキング + What-if + Cookie + nginx 301) - 2026-05-27
f5f9c34feat: T-154 X-2 Pro Tips セクション「この数字から見える視点」を選手詳細・キャリアに導入(Helpful Content の expertise/experience 要件を完全自動路線で担保・lib/editorial/mlb.ts に buildPlayerProTips / buildCareerProTips / buildMonthlyProTips を新設・ルールベースで規定到達進捗+対左右バランス+RISP クラッチ+球種多様性+キャリアハイ vs 直近年+平均年あたり出場の安定性 などを bullet 化・「本サイトでは」「Samurai Stats では」のような疑似一人称でサイト視点を散在させ Web 調査の「82% of rejected sites had zero first-person language」対策を機械的に達成・UI は border-l-2 border-accent + bg-card-2 で編集テキストとは別カードに分離・実機計測 大谷 player 5 bullet / 大谷 career 1 bullet を確認・残り = X-1 Samurai Score + UpdatedAt 実質変更検出 + methodology 動的化 + accuracy セルフトラッキング + What-if + Cookie 個人化 + nginx 301) - 2026-05-27
eb93ed2feat: T-154 月間ハイライトの編集テキストを 800+ 字化(フェーズ 3c・buildMonthlyHighlightsEditorial に 5 段落構成 = 月の概況+一選手あたり出場数 / 打撃Top5+シーズン換算解釈 / 投球Top5+役割の重なり解釈 / Pro Tips的「数字から見える視点」= 二刀流兼任検出+率と長打の両立検出+内容と結果の両立検出 / 翌月の見どころ+月別の物語性・ランキング部門別 200 字解説は既存実装で要件達成済・実機計測 2026/5 月間ハイライトで 904 字を確認・残り = X-2 Pro Tips 全ページ展開 + X-1 Samurai Score 導入) - 2026-05-27
2eccc34feat: T-154 キャリア通算ページの編集テキストを 600+ 字化(フェーズ 3b・buildCareerEditorial の段落構成を「デビュー+通算+年あたり平均」「キャリアハイ+今シーズンとの関係」「直近3年トレンド」の3軸に整理し打撃/投球それぞれ 3 段落構造に・大谷の career page で実機 1135 字を確認・目標 600+ 字を大幅クリア・残り = ランキング部門別 200 字解説 + 月間ハイライト 800+ 字 + X-2 Pro Tips + X-1 Samurai Score) - 2026-05-27
2f5e17efeat: T-154 編集テキスト次元拡張・選手詳細編 (フェーズ 3a) 実装(既存 buildPlayerEditorial を 200〜400 字テンプレ + 数値補間から 800〜1200 字の 4 段落多次元評価に全面書き直し・AdSense 却下要因 ② Helpful Content「避けるべき特性: かなりの部分に自動化を使用」+ ③「コピー・キュレーション不足」への対抗策として「同じ DB だが評価軸を増やしてテンプレ感を脱却」する完全自動路線・新規 lib/mlb/splits.ts で MLB Stats API の statSplits (vl/vr/risp) + pitchArsenal を 24h cache で取得 = getHittingSplits 対左右投手 + 得点圏 RISP / getPitchingSplits 対左右打者 / getPitchArsenal 球種別 usage% + averageSpeed・段落構成 = (1) opener 主要数字を 1 文に集約 = 試合数 + 打席 + 打数安打 + 打率 + HR + 打点 + 盗塁 + 出塁率 + 長打率 + OPS / (2) 評価+MLB Top10 = OPS 5 段階評価に OBP/SLG バランス評価 + 三振率/四球率の打席内容評価 / (3) splits & clutch = 対左右投手の OPS 比較 + 得点圏 RISP / (4) 前年シーズン全体比較 + 前年同月比 + pace + 規定到達・投球側も同形で K/9・BB/9 + WHIP 評価 + 球種 Top3 + 球種数による repertoire 評価・lib/mlb/career.ts の getYearByYearHitting/Pitching で前年シーズン全体 stats も取得し prevSeasonHitting/Pitching として渡す・実機計測 = 大谷(二刀流)1360 字 8 段落 / 山本由伸 780 字 4 段落 / 今永昇太 777 字 4 段落 / 鈴木誠也 729 字 4 段落 / 今井達也(新人・前年データなし)620 字 4 段落・新人は前年比較が構造的に出ないため上限が低いが残りは目標 800 字に肉薄・スコープ外 = 打者の球種別 (MLB API 未提供・Baseball Savant 必要) / park factor (外部依存) / 対先発リリーフ splits (vsst/vsrp は API で空配列) は完全自動路線方針で除外・TASKS.md T-154 のチェックリストで [x] 選手詳細フェーズ完了 + 残り = キャリア 600+ 字 / ランキング 部門別 200 字解説 / 月間ハイライト 800+ 字) - 2026-05-27
2148e36refactor: T-154 AdSense 再申請に向けた構造改革・フェーズ 1 (削減) 完了(2026-05-27 AdSense サイトレベル審査で samurai-stats.com が「有用性の低いコンテンツ」で却下されたためアカウント pub-4091980451052980 のアカウントレベル承認は維持・サイトレビューだけが却下 = Google スパムポリシー / Helpful Content Guidelines / AdSense プログラムポリシーの 3 層を精読して該当要因 4 つ特定 = ①Scaled content abuse: sitemap 458 URL のうち約 88% (400+) がテンプレ + 数値補間の機械生成 / ②Helpful Content「避けるべき特性」: SEO 獲得自認 + 編集テキスト 100% 自動化 + 一次経験コンテンツゼロ / ③コピー・キュレーション不足: MLB API データ可視化への独自編集解釈の薄さ / ④UpdatedAt の dateModified が実質変更なしに更新されうる QDF 詐称リスク・再申請に向けて T-154「完全自動路線」を新設(運営者ノート手書き等の手書き要素は samurai-stats-zero-ops ポリシーと整合させるため破棄・自動でも独自性と UX が出る設計に転換)・本コミットはフェーズ 1 削減のみ・(1) 試合別 /players/[id]/games/[gameId] 200+ URL は metadata.robots を全件 { index: false, follow: true } に固定し sitemap からも除外(UI 内部リンクと SportsEvent JSON-LD は温存しユーザー体験と SNS シェアは維持)/ (2) 対戦相手別 /players/[id]/vs/[opponentTeamId] 約 120 URL は T-148 ロールバックでディレクトリごと削除 + lib/db/queries/games.ts の listPlayerOpponentTeamNames / listPlayerGamesByOpponent 撤去 + lib/editorial/mlb.ts の buildVsOpponentEditorial 撤去 + 選手詳細から「対戦相手別の通算成績」セクション削除 / (3) 全試合一覧 /players/[id]/games 13 URL は page.tsx 削除 + 選手詳細から「全試合を見る →」リンク削除 + listAllPlayerGames 撤去・sitemap.ts は vsOpponentUrls / 全試合一覧 URL / gameUrls の 3 グループを除外し約 53 URL(固定 8 + 選手 13 + キャリア 13 + 比較 6 + 月間ハイライト 6 + ハブ 1 + ランキング 1 + 既知数)に縮小・(4) 関連ドキュメント全更新 = CLAUDE.md AdSense 行を 🟢承認 → 🔴却下 に書き換えて T-154 完全自動路線の対応一覧を併記 + TASKS.md は T-151 広告配置設計を 🧊 凍結に変更し T-154 を完全自動路線版で新設(次フェーズ = 編集テキスト次元拡張 800〜1200 字 / /about/methodology 動的自己解説書化 / 予測精度セルフトラッキング新設 / インタラクティブツール / Cookie 個人化 / UpdatedAt 実質変更検出)+ docs/収益化_AdSense.md 冒頭に却下経緯と該当要因マトリクスを追加・検証 = next build ✅ tsc ✅ ESLint ✅ で 950 行削除 91 行追加) - 2026-05-24
bf910a8feat: 試合別ページの editorial / title / header の対戦相手名を EN→JP 化(「Washington Nationals 戦」→「ナショナルズ戦」・teams.ts に teamNameJaFromEn(en) ヘルパー追加・page.tsx は game.home/awayTeamId 経由の teamId ルックアップを第一に EN フルネーム逆引きをフォールバック・editorial の opp 戦 の不自然な空白も削除・SportsTeam JSON-LD は schema.org 用に EN のまま温存・T-148 後の残課題対応 + CLAUDE.md sitemap 459 URL 実数化 + TASKS.md T-148/149 を本番稼働中ステータスへ更新) - 2026-05-24
90d895afeat: T-147 X bot + T-148 対戦相手別ページ + T-149 月間ハイライト(ユーザー獲得の流入3本立て・対戦相手別 100+URL / 月間ハイライト 8URL / X bot は試合直後の HR/W/SV/K≥7/多安打を自動投稿で 200+ 試合別ページへの直接導線・全機能ローカル build + URL 動作確認済・X bot は OAuth 1.0a User Context で SDK 不使用 HMAC-SHA1 自前署名・本番反映後に VPS crontab に 17:35 + 8:05 JST を追加して稼働) - 2026-05-22
63229b5fix: 規定到達バッジが PC で2行に折り返す不具合を修正 - 2026-05-22
4f037c6feat: T-144 デザイン刷新 B案「白基調エディトリアル」に全面刷新(zinc ダークテーマ → オフホワイト #F7F5F0 + ネイビー #1E3A8A のエディトリアル・globals.css に :root セマンティックトークン基盤を構築し T-145 色反転版に直結・Claude Design で A/B/C 3 案作成し B 案採用・全 16 ページ + 共通 7 コンポーネントを変換・選手詳細の月別グラフ recharts をライト地に再調整・QualifyingTooltip を React Portal 化し nested <a> ハイドレーションエラー解消・直近の試合結果テーブルを全セルリンク化・ヘッダーと contact を 320px まで崩れないようレスポンシブ調整・E2E + レスポンシブ 135 チェック済・Web フォント不使用維持・OG 画像は侍ダークのまま据え置き T-146 起票・docs/ に実装計画+仕様追加・TASKS.md に T-144/T-145/T-146) - 2026-05-21
0984b89feat: T-143 試合レビューを打撃ブロック/投球ブロックのグループ単位に分け二刀流でブロック間に区切り線+余白を追加(buildGameEditorial が string[][] を返すよう変更・投球グループに border-t border-zinc-800 + pt-4・section は space-y-4・JSON-LD description は editorialGroups.flat().join に変更) - 2026-05-21
63e105dfeat: T-143 試合レビューを「試合の出来事/シーズン累計/直近フォーム」の3段落に分割(buildGameHittingParagraph/buildGamePitchingParagraph が string[] を返すよう変更し1つの長文ブロックを論理段落に整理・読みやすさ改善・二刀流は打撃3+投球3の6段落・字数不変で200字以上維持・SportsEvent JSON-LD description は全段落結合に変更) - 2026-05-21
8735a8ffeat: T-143 試合別ページの編集テキストに累計率指標+直近5試合フォームの無条件2文を追加(buildGameEditorial に seasonRate/recentForm の2文ビルダー4種を新設し打撃/投球両パラグラフ=isContinuation経路含むに挿入・平凡試合=4打数1安打クラスでも editorial 200字以上を担保し SC「クロール済み-インデックス未登録」対策・HittingStats に hitByPitch/sacFlies/totalBases 追加で累計OBP/SLG/OPS を正確算出・トレンド語は直近5打率vs累計打率±0.040で上向き/安定/低調を出し分け・開幕戦は初出場/初登板の起点文・新規API call なしDBデータのみ・実55ページ検証で全件200字以上=最小208最大470平均260・TASKS.md は既存の T-144/T-145 メモ追記も同梱) - 2026-05-17
0ff8308refactor: T-140 月別グラフから打点(rbi)と投球回(ip)を削除して 2 軸構成(打撃 HR + 月内打率 / 投球 K + 月内防御率)に整理(旧 3 本ラインはモバイル小画面で線が密集して読みにくく + 編集判断として「symbolic count + classic rate」の対称配置に注力指標を絞る方が物語性が立つと判断・前年同月点線重ねの年次比較構造は維持・グラフから削除しただけで詳細テーブルの「打点」「IP」行は残す・lib/mlb/monthly.ts の MonthlyHittingPoint.rbi と MonthlyPitchingPoint.ip フィールドも削除(ERA 計算用の acc.ip は内部に残す)・関連 md は CLAUDE.md ステータス表 + 公開ページ / TASKS.md T-140 を 2 軸構成に書き直し + T-139 末尾に「後継 T-140 で 2 軸化」追記 / docs/競合調査 + docs/収益化_AdSense 3 箇所 + docs/技術構成 を更新) - 2026-05-17
b37e603feat: T-140 月別グラフに前年同月を点線で重ねて年次比較追加(打撃 = HR + 月内打率 / 投球 = K + 月内防御率 を前年と重ね・打者と投手で symbolic count + classic rate を完全対称配置で大谷のような二刀流選手でも同じ読み方ができる UX・打点/投球回は前年なしで線数増加とモバイル破綻を回避・前年 gameLog は MLB API /people/{id}/stats?stats=gameLog&season={season-1} を revalidate: 86400 で 24h cache + 新規 lib/mlb/monthly-prev.ts + lib/mlb/monthly.ts に mergeHittingWithPrev/mergePitchingWithPrev 追加で月番号 MM で join し未来月の点線突き抜けを防止・MonthlyTrendChart に ChartSeries.strokeDasharray サポート + tooltip 前年試合数併記 + connectNulls で前年歯抜け月をつなぐ・新人/前年マイナーは API splits 空で自動的に前年ライン非表示 + ラベルも (2026) を付けず無印表示・同指標を 2 年並べるだけなので T-139 末尾の右軸スケール衝突問題は構造上発生せず・WHIP/被打率は ERA と右軸スケール衝突するため将来「投手深掘り別ブロック」として温存メモ・関連 md は CLAUDE.md ステータス表 + 公開ページ / TASKS.md T-140 新規 + T-117/T-139 相互リンク / docs/競合調査 + docs/収益化_AdSense 3 箇所 + docs/技術構成 を最終仕様に更新) - 2026-05-17
0f54844refactor: T-139 月別推移グラフを ComposedChart 棒+線から LineChart 3 本ラインへ刷新(旧版は「色被り + 棒に視線が引っ張られて線のトレンドが読みにくい」課題があった・打撃 = HR amber/打点 sky/月内打率 pink 右軸・投球 = K amber/投球回 sky 左軸+月内防御率 pink 右軸・凡例 Legend 下部・MonthlyTrendChart は series: ChartSeries[] 配列を受ける汎用構造に書き換えて N 本任意拡張可・format は count/avg/era/ip の 4 種・aggregateMonthlyPitching に ip 10進化を追加・desktop 1280 + mobile 390 両方で識別性確認済・関連 md は CLAUDE.md ステータス表 + docs/技術構成.md + docs/収益化_AdSense.md + docs/競合調査と差別化ポジション.md を 棒+線 → 3 本ラインに更新・将来 OPS/WHIP 追加余地は TASKS.md T-139 にメモ) - 2026-05-16
676ce1ffeat: AdSense 申請対応 - layout に snippet 組み込み(NEXT_PUBLIC_ADSENSE_CLIENT_ID gate / pub-4091980451052980)+ 試合別ページ SportsEvent JSON-LD に location/eventStatus/endDate/description 追加(SC 構造化データ警告解消・30 球団 venue マスタ新設)+ favicon を public 配下にコピー(nginx 配信化・robots.txt と同 T-115 パターン)+ GA4 公式 MCP を .mcp.json に登録(analytics-mcp@0.5.0・anpon0426 ADC 認証) - 2026-05-09
e2e803afeat: T-125 試合別編集テキストにシーズン累計の変化フレーズを追加(HR=シーズン通算X本目 / W=シーズンX勝目 / SV=Xセーブ目 / 7K以上=通算XK / 多安打/盗塁にも対応・通常試合は冗長回避で追加なし・テンプレ補間の数値次元増で構造類似を薄める = AdSense 対策・対戦相手別ページを後日タスクに記録) - 2026-05-09
b957caafeat: T-124 試合結果の動線拡充(トップに直近10試合結果テーブル + 選手詳細にW/L+スコア列+全試合を見る導線 + /players/[id]/games 新規 / 規定到達ペースバッジを赤→薄emeraldに統一して勝バッジと色を揃える) - 2026-05-09
d4f301bfeat: 試合別/比較/通算ページ + ランキング規定到達前救済 = sitemap 15 → 246(T-119/T-121/T-122/T-123 = AdSense 通過率を仕組みで底上げ) - 2026-05-09
bfe735efeat: 選手詳細に月別推移グラフ + 直近試合「相手」列を追加(recharts 導入 + player_game_stats.opponent_team_name 新設・T-117/T-118 完了) - 2026-05-09
57cf244feat: ステータスバッジ文言を日本語化(IL→「故障」/ DFA→「戦力外」・casual 読者向け)+ 寿命仕様を関連 md に整理(returning は 7日時限・他は次 transaction まで出っぱなし) - 2026-05-09
f36de93fix: 先発投手の年間ペース推定にローテーション床を追加(線形外挿のみだと早期シーズンで規定投球回不達と誤判定される問題を解消・例: 大谷 26 GS/159 IP→31 GS/191 IP) - 2026-05-06
f273428feat: 選手詳細に IL/復帰直後バナー + トップに先発投手「次回登板」表示 - 2026-05-06
3027260feat: トップ「注目の日本人選手」を編集価値あるカードに刷新(数字 + 規定到達バッジ + 次戦表示・次戦時刻昇順ソート・mlb-daily-stats cron に向こう14日のScheduled試合取り込みを追加)
関連ページ:
- 運営者情報 — 運営者の自己紹介・利害関係の明示
- 年間ペース推定 (On-Pace) の解説 — 計算式と判定ロジックの詳細
- 予測精度セルフトラッキング — 過去の予測 vs 現在値の乖離を日次蓄積で公開
- 野球用語集 — OPS / WHIP / ERA / FIP 等の指標の意味