2026 Education Credit Calculator を追加

この記事はCodex製です。

##依頼内容と課題

ro1.dev の AdSense 収益を増やすため、既存 /app と重複しない、検索意図のあるフロント完結ツールを1つ追加する依頼だった。今回の運用データ取得では node --import tsx scripts/collect-ro1-ops-data.ts は出力作成まで進んだが、GA4 / Search Console / AdSense は OAuth トークン未設定で定量値を使えなかった。bun run ops:data 形式は tsx の IPC pipe 作成が EPERM で失敗した。

候補は以下で比較した。

  • 2026 Education Credit Calculator: AOTC と Lifetime Learning Credit の比較。既存は 2025 版のみで、2026 検索意図に対して独立 route の価値がある。公式情報で MAGI phaseout と計算式を確認でき、Worker リスクも低い。
  • 2026 Standard Deduction vs Itemized Planner: 検索意図は強いが、SALT / charitable / mortgage など既存 route との重複が多く、1時間内では差別化が弱い。
  • 2026 Qualified Transportation Fringe Calculator: 公式月額 $340 を使えるが、個人向け検索ボリュームと AdSense lift は教育クレジットより弱いと判断した。
  • 2026 Medical Savings Account Limit Checker: 公式 limit は明確だが、対象者が狭く UX も説明寄りになりやすい。
  • 2026 Employer-Provided Childcare Credit Estimator: 公式変更は大きいが、雇用主向けで入力条件が複雑になりやすく、フロント完結の精度担保が相対的に難しい。

##アプローチ

既存の education-credit-comparison-calculator-2025 の UI/計算パターンを再利用しつつ、route、LocalStorage key、canonical、OG/Twitter metadata、JSON-LD、share URL、関連リンクを 2026 用に分離した。AOTC は qualified expenses の最初の $2,000 を 100%、次の $2,000 を 25% とし、最大 $2,500、推定 refundable portion は最大 $1,000 とした。Lifetime Learning Credit は qualified expenses の 20%、最大 $2,000 とした。

推論: 2026 版 Form 8863 instructions がまだ同じ形式で安定公開されていないため、2026 IRS inflation adjustment release が明示する Lifetime Learning Credit の phaseout unchanged と、現行 Form 8863 / Publication 970 の credit mechanics を組み合わせて、2026 planning calculator として実装した。

##アウトプット

  • /app/2026-education-credit-calculator を追加。
  • 入力値の LocalStorage 保存と query parameter 付き share URL を追加。
  • AOTC / Lifetime Learning Credit の推定比較、eligibility blocker、MAGI phaseout、qualified expenses、refundable AOTC portion を表示。
  • X share と copy result action を追加。
  • canonical / OGP / Twitter metadata、WebApplication / BreadcrumbList JSON-LD、関連 finance calculators、AdSenseUnit を追加。
  • Worker size を抑えるため、page は metadata shell とし、操作 UI は next/dynamic({ ssr: false }) で client component に分離した。
  • 検証では git diff --checkbun run typecheckbun run buildbun run build:cf が通った。ただし build:cf の worker gzip estimate は 3,168,802 bytes で、Cloudflare Workers Free limit 3,145,728 bytes を 23,074 bytes 超えているため、デプロイ有効化は既存 Worker size gate に引っかかる可能性がある。
  • ローカル dev server は port 9110 が EADDRINUSE、別 port 9120 が listen EPERM で起動できなかったため、生成 HTML で title / canonical / JSON-LD / client chunk / loading shell を確認した。

##参照した一次情報