0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

登録不要・CORS対応の「今日は何の日」API を作りました(366日・商用可)

0
Last updated at Posted at 2026-09-29

「今日は何の日」をアプリやボットに表示したくて API を探したことがある人向けの記事です。

個人の方が公開している API はいくつかありますが、移転や終了の告知をたびたび見かけます。静的なファイルを置いているだけで、止まる理由がほとんどないものを作りました。

  • エンドポイント:https://ultimatecrazy.jp/whatstoday/api/{MM-DD}.json
  • 登録不要・APIキー不要
  • 商用可・クレジット表記は任意
  • CORS 対応(ブラウザの JavaScript から直接呼べます)
  • 366日ぶん(2月29日を含む)

説明ページ:https://ultimatecrazy.jp/whatstoday/api/

使ってみる

curl

curl -s https://ultimatecrazy.jp/whatstoday/api/12-24.json

ブラウザ(fetch)

const d = new Date();
const mmdd = String(d.getMonth() + 1).padStart(2, '0') + '-'
           + String(d.getDate()).padStart(2, '0');

const res  = await fetch(`https://ultimatecrazy.jp/whatstoday/api/${mmdd}.json`);
const data = await res.json();
console.log(data.anniversaries[0].name);   // 記念日の名前

Access-Control-Allow-Origin: * を返しているので、サーバーを挟まずにそのまま呼べます。

返ってくるもの

12月24日の例です(story と sources は長いので1件ずつに省略しています)。

{
  "date": "12-24",
  "anniversaries": [
    {
      "name": "クリスマス・イブ",
      "why": "クリスマスの前夜。教会暦では日没から新しい日が始まるため、この夜からお祝いが始まります。",
      "chourei": "きょうはクリスマス・イブです。教会の暦では、日没から新しい一日が始まります。夕方から、もうクリスマスは始まっているわけです。一年の締めくくりも、最後の日を待たずに、きょうから少しずつ整えていきましょう。",
      "kaigo": "クリスマスにケーキを囲んだ思い出はありますか。どんなケーキでしたか?",
      "otayori": "きょうはクリスマス・イブです。ご家族で過ごす楽しい夜になりますように。冬休みも、早寝早起きと、お手伝いを続けられるとよいですね。二学期もありがとうございました。",
      "story": [
        {
          "heading": "夜から始まる一日",
          "text": "クリスマス・イブは「クリスマスの前夜」と思われがちですが、正確には少し違います。…"
        }
      ],
      "sources": [
        { "title": "クリスマス・イヴ - Wikipedia", "url": "https://ja.wikipedia.org/wiki/…" }
      ],
      "image": "https://ultimatecrazy.jp/whatstoday/images/12-24.png"
    }
  ],
  "page": "https://ultimatecrazy.jp/whatstoday/days/12-24.html",
  "updated": "2026-09-25"
}
キー 中身
name 記念日の名前
why 由来の短い説明
chourei 朝礼でそのまま読み上げられる文(80〜100字前後)
kaigo 介護レク・朝の会用の問いかけ(40字前後。ホワイトボードに書ける長さ)
otayori 学級通信・おたより用のひとこと(保護者向けのですます調)
story くわしい解説(小見出しと本文の3段落)
sources 解説を書くときに参考にした資料
image その日のイラスト(オリジナル)
page その日の解説ページ

ほかの API と違うのは、chourei / kaigo / otayori の3本です。記念日の名前だけでなく「そのまま使える文」が入っているので、朝礼当番の支援ツールや、介護施設の朝の会の掲示、学級通信の作成補助などにそのまま流し込めます。

設計で決めたこと

anniversaries は必ず配列

いまは1日1件ですが、あとから同じ日に記念日を増やしても、使う側のコードが壊れないように最初から配列にしています。

中身のない項目はキーごと出さない

null や空文字を返すと、使う側で毎回分岐が要ります。値がないときはキー自体を出しません。

today.json は用意していない

「今日のぶん」を返すファイルは、日付が変わるたびに差し替えが要ります。差し替えが遅れると、利用者全員に前日の内容が返ってしまいます。事故を避けるため、日付は使う側で作って指定してもらう形にしました。上の fetch の例のとおり、数行で済みます。

なお、日付はブラウザや実行環境のタイムゾーンで決まります。日本の日付で出したい場合は、toLocaleDateString('ja-JP', { timeZone: 'Asia/Tokyo' }) などで作ってください。

静的ファイルだけで動かしている

中身は366本の JSON と一覧用の index.json だけです。サーバー側のプログラムがないので、落ちる要素がほとんどありません。CORS と Content-Type はディレクトリの .htaccess で付けています。

AddType application/json .json

<IfModule mod_headers.c>
  Header set Access-Control-Allow-Origin "*"
  Header set Cache-Control "public, max-age=3600"
</IfModule>

使える日付の一覧

curl -s https://ultimatecrazy.jp/whatstoday/api/index.json

dates に使える日付(01-01 〜 12-31)、version に仕様の版、updated に最終更新日が入っています。

仕様を変えるとき

キーを消したり名前を変えたりするときは、説明ページに追記して、index.json の version を上げます。キーを足すだけの変更は、使う側のコードに影響しないのでそのまま行います。

おわりに

同じ内容は、人が読む形でも公開しています。

使っていただけたら、リンクしてもらえるととても嬉しいです。不具合や要望はお問い合わせからどうぞ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?