日の出・日の入りAPI

47都道府県について、2000年から2100年までの毎日の日の出・南中・日の入り・南中高度・昼の長さと、月の出・月の南中・月の入りを返すAPIです。今日の日の出を画面に出す、1年の昼の長さをグラフにする、夜明け前の撮影の予定を立てる、といったことが手軽にできます。

できること
日ごとの 日の出・太陽の南中・日の入り・南中高度・昼の長さ・月の出・月の南中・月の入り(時刻は日本時間の時:分)
地点
47都道府県に1地点ずつ(都道府県庁のある市。国立天文台「各地のこよみ」と同じ地点・経緯度・標高0m)。地点の一覧
期間
2000年1月1日〜2100年12月31日(1地点の1年分を1つのファイルで返します)
費用・登録
無料・登録不要・APIキー不要(提供条件は利用状況で変わることがあります)
計算のもと
NASA JPL の天体暦 DE440s。定義は国立天文台 暦計算室と同じ。国立天文台「各地のこよみ」と23年分・47地点の毎日を照合し、99.98%が一致(違いは四捨五入の境目で1分・0.1°ずれるものだけ)
気をつけること
標高0m・地平線まで見通せる場所での時刻です。山や建物の陰、高い所からの見え方の違いは含みません。

データの版は /sun/v1/meta.json で確認できます。

はじめかた(3ステップ)

  1. ブラウザで開いてみる: https://api.shirugear.com/sun/v1/13/2026.json を開くと、東京の2026年の365日分が返ります。13 は都道府県コード(東京都)、2026 は年です。
  2. その日の1件を取り出す: days の中から date が目当ての日付(例: "2026-11-04")のものを探します。使い方の例にそのまま使えるコードがあります。
  3. 利用規約を確かめる: 利用規約をご確認ください。登録や申し込みは要りません。

いろいろな言語から呼ぶ

サーバー側のプログラムやコマンドからも、URLを開くだけで使えます。1地点の1年分(約66KB、通信は圧縮されて約9KB)を1回で受け取れるので、手元に保存して使い回すと効率的です。

const res = await fetch("https://api.shirugear.com/sun/v1/13/2026.json");
const data = await res.json();
const day = data.days.find((d) => d.date === "2026-06-21");
console.log(day.sunrise, day.sunset); // 04:25 19:00
curl -s https://api.shirugear.com/sun/v1/13/2026.json \
  | jq '.days[] | select(.date == "2026-06-21") | {sunrise, sunset, day_length}'
<?php
$data = json_decode(file_get_contents('https://api.shirugear.com/sun/v1/13/2026.json'), true);
foreach ($data['days'] as $day) {
    if ($day['date'] === '2026-06-21') {
        echo $day['sunrise'], ' ', $day['sunset'], "\n"; // 04:25 19:00
    }
}
import json
import urllib.request

url = "https://api.shirugear.com/sun/v1/13/2026.json"
with urllib.request.urlopen(url, timeout=10) as res:
    data = json.load(res)
day = next(d for d in data["days"] if d["date"] == "2026-06-21")
print(day["sunrise"], day["sunset"])  # 04:25 19:00

その場で試す

地点と日付から調べる

試しに:

日の出
太陽の南中
日の入り
南中高度
昼の長さ
月の出
月の南中
月の入り
地点

応答の JSON(その日の1件)を見る

月ごとの一覧

地点は上の「地点と日付から調べる」で選んだものです。時刻は日本時間。「—」はその日に無いもの(null)です。

日日の出南中日の入り南中高度昼の長さ月の出月の南中月の入り

URLの一覧

どれも、URLを開く(GET)だけで JSON(UTF-8)が返ります。先頭は https://api.shirugear.com です。自分のサイトのJavaScriptから直接呼べます(CORS対応)。

URL返すもの
/sun/v1/{都道府県コード2桁}/{西暦4桁}.jsonその都道府県の地点の、その年の毎日の日の出・日の入り・月の出・月の入りなど。2000〜2100年。例: /sun/v1/13/2026.json(東京・2026年)
/sun/v1/meta.jsonデータの版・作った日時・期間・計算のもと・定義・47地点の一覧(名前・緯度・経度)

応答の例と各項目

応答の例

GET https://api.shirugear.com/sun/v1/13/2026.json

{
  "pref": "13",
  "pref_name": "東京都",
  "point": { "name": "東京", "lat": 35.6581, "lon": 139.7414, "elevation": 0 },
  "year": 2026,
  "days": [
    {
      "date": "2026-01-01",
      "sunrise": "06:51",
      "sun_transit": "11:44",
      "sunset": "16:38",
      "sun_altitude": 31.4,
      "day_length": "09:47",
      "moonrise": "14:04",
      "moon_transit": "21:47",
      "moonset": "04:21"
    },
    …
    {
      "date": "2026-01-03",
      "sunrise": "06:51",
      "sun_transit": "11:45",
      "sunset": "16:40",
      "sun_altitude": 31.5,
      "day_length": "09:49",
      "moonrise": "16:16",
      "moon_transit": null,
      "moonset": "06:42"
    },
    …
  ],
  "data_version": "2026-11-01"
}

2026年1月3日の東京は、月の南中が無い日です(1月2日の22時54分の次は、1月4日の0時00分)。そのため moon_transit が null になっています(日付またぎと null)。

年の項目

年の項目の一覧を開く(6項目)
項目型内容
pref文字列都道府県コード("01"〜"47")
pref_name文字列都道府県の名前(例: 「東京都」)
pointオブジェクト計算の地点。name(地点の名前。例: 「東京」)・lat(緯度・度)・lon(経度・度)・elevation(標高・m。いつも 0)。地点の一覧
year数値西暦の年
days配列1月1日から12月31日までの毎日(365件、うるう年は366件)。日付の順(下の表)
data_version文字列データの版(データの更新)

days の各項目(1日分)

1日分の項目の一覧を開く(9項目)
項目型内容
date文字列日付("2026-01-01")
sunrise文字列日の出の時刻("06:51")。太陽の上辺が地平線に接する時刻
sun_transit文字列太陽が南中する(真南に来る)時刻
sunset文字列日の入りの時刻。太陽の上辺が地平線に接する時刻
sun_altitude数値南中高度。南中のときの太陽の高さ(度・小数1桁。大気差を含む見かけの高度)
day_length文字列昼の長さ("09:47" は9時間47分)。sunset − sunrise
moonrise文字列/null月の出の時刻。月の中心が地平線に接する時刻。その日に無ければ null
moon_transit文字列/null月が南中する時刻。その日に無ければ null
moonset文字列/null月の入りの時刻。月の中心が地平線に接する時刻。その日に無ければ null

時刻はすべて日本時間の "HH:MM"(24時間制・2桁ずつ。"00:00"〜"23:59"。月の時刻だけは "24:00" もあります。日付またぎと null)です。days は1月1日から順に並んでいるので、その年の何日目かが分かれば番号でも引けます(1月1日が days[0])。

時刻の決め方(日付またぎ・null)

定義は、国立天文台 暦計算室の「各地のこよみ」と同じです。

項目決め方
日の出・日の入り太陽の上辺が地平線に接する時刻。大気による光の曲がり(大気差)を 35'08" とし、太陽の見かけの大きさ(視半径)は地球との距離で変えています
月の出・月の入り月の中心が地平線に接する時刻(大気差 35'08")。月は近いので、地球の中心から見た位置と地表から見た位置の違い(視差)を入れて計算しています。太陽も同じく地表から見た位置です
南中太陽・月が真南に来る(子午線を通る)時刻
南中高度南中のときの太陽の高さ(度)。大気差を含む、見かけの高度です
昼の長さその日の日の入り − 日の出(どちらも分に丸めた時刻の差)
地点都道府県に1地点(地点の一覧)。標高0m で、地平線まで山や建物にさえぎられない場所として計算しています
分への丸め秒までの時刻を四捨五入して分にしています(例: 6時50分33秒 → "06:51")

日付またぎと null

地点の一覧

国立天文台「各地のこよみ」と同じ地点・同じ経緯度です。都道府県庁のある市の代表の地点で、経緯度は1分(約1.5km)単位です(東京だけは、港区麻布台にある日本経緯度原点の値)。標高はどれも0mとして計算しています。/sun/v1/meta.json の points でも取れます。

47地点の一覧を開く
コード都道府県地点緯度経度
01北海道札幌43.0667141.3500
02青森県青森40.8167140.7333
03岩手県盛岡39.7000141.1500
04宮城県仙台38.2667140.8667
05秋田県秋田39.7167140.1167
06山形県山形38.2500140.3500
07福島県福島37.7500140.4667
08茨城県水戸36.3667140.4833
09栃木県宇都宮36.5667139.8833
10群馬県前橋36.3833139.0667
11埼玉県さいたま35.8500139.6500
12千葉県千葉35.6000140.1167
13東京都東京35.6581139.7414
14神奈川県横浜35.4500139.6500
15新潟県新潟37.9167139.0333
16富山県富山36.6833137.2167
17石川県金沢36.5667136.6500
18福井県福井36.0667136.2167
19山梨県甲府35.6667138.5667
20長野県長野36.6500138.1833
21岐阜県岐阜35.4167136.7667
22静岡県静岡34.9667138.3833
23愛知県名古屋35.1667136.9167
24三重県津34.7333136.5167
25滋賀県大津35.0000135.8667
26京都府京都35.0167135.7500
27大阪府大阪34.6833135.4833
28兵庫県神戸34.6833135.1833
29奈良県奈良34.6833135.8333
30和歌山県和歌山34.2333135.1667
31鳥取県鳥取35.5000134.2333
32島根県松江35.4667133.0500
33岡山県岡山34.6667133.9333
34広島県広島34.3833132.4500
35山口県山口34.1833131.4667
36徳島県徳島34.0667134.5500
37香川県高松34.3500134.0500
38愛媛県松山33.8333132.7667
39高知県高知33.5500133.5333
40福岡県福岡33.5833130.4000
41佐賀県佐賀33.2500130.3000
42長崎県長崎32.7500129.8667
43熊本県熊本32.8000130.7167
44大分県大分33.2333131.6167
45宮崎県宮崎31.9000131.4167
46鹿児島県鹿児島31.6000130.5500
47沖縄県那覇26.2167127.6667

正確さ(国立天文台との照合)

天文の計算には、NASA ジェット推進研究所(JPL)が公開している天体暦 DE440s を、Python の skyfield で使っています。地点ごとに、日・月の出入りと南中の瞬間を秒より細かく求めてから、分に四捨五入しています。

この結果を、国立天文台 暦計算室が公表している「各地のこよみ」の2005年から2027年までの23年分・47地点・毎日と、1件ずつ照らし合わせました(月の出入りが無い日は、無いことが一致するかも比べています)。

照らし合わせたもの件数結果
日の出394,800件394,794件が一致(6件が1分違い)
太陽の南中394,800件394,682件が一致(118件が1分違い)
日の入り394,800件394,793件が一致(7件が1分違い)
南中高度394,800件394,761件が一致(39件が0.1°違い)
月の出394,800件394,649件が一致(151件が1分違い)
月の南中394,800件394,643件が一致(157件が1分違い)
月の入り394,800件394,648件が一致(152件が1分違い)
合計2,763,600件2,762,970件が一致(99.98%)

使い方の例

どの例も、ブラウザの JavaScript(フレームワーク不要)で動きます。年のファイルは一度取ったら覚えておき、同じ地点・同じ年では呼び直しません。

今日の日の出・日の入りを出す

const API = "https://api.shirugear.com/sun/v1/";
const files = new Map(); // 地点・年のファイルは一度だけ取り、使い回す

function loadYear(pref, year) {
  const key = pref + "/" + year;
  if (!files.has(key)) {
    const p = fetch(API + key + ".json").then((res) => {
      if (!res.ok) throw new Error("HTTP " + res.status);
      return res.json();
    });
    p.catch(() => files.delete(key)); // 失敗したら次は取り直す
    files.set(key, p);
  }
  return files.get(key);
}

// 日本時間の今日("YYYY-MM-DD")
const today = new Intl.DateTimeFormat("sv-SE", { timeZone: "Asia/Tokyo" }).format(new Date());

const data = await loadYear("13", Number(today.slice(0, 4)));
const day = data.days.find((d) => d.date === today);
console.log("日の出 " + day.sunrise + " / 日の入り " + day.sunset);

月の出が無い日を考えて表示する

月の出・月の南中・月の入りは null のことがあります。そのまま画面に出すと「null」と表示されるので、言葉に置きかえます。

function moonText(day) {
  const t = (v) => (v === null ? "なし" : v);
  return "月の出 " + t(day.moonrise) + " / 月の入り " + t(day.moonset);
}
// 2026年1月10日の東京 → "月の出 なし / 月の入り 10:43"

1年の昼の長さを分にする

day_length は "HH:MM" の文字列です。グラフにするときは分に直します。上の loadYear を使います。

const data = await loadYear("01", 2026); // 札幌
const minutes = data.days.map((d) => {
  const [h, m] = d.day_length.split(":").map(Number);
  return h * 60 + m;
});
console.log(Math.max(...minutes), Math.min(...minutes)); // 923 540(夏至のころと冬至のころ)

値は textContent で画面に入れてください(HTML として解釈させない)。取れなかったときに画面が止まらないよう、fetch の失敗も受け止めておくと安心です。

エラー

うまくいかないときは、HTTPの状態コードと、次の形の JSON を返します。code は固定の値なので、プログラムで見分けるときはこれを使ってください(message は説明文で、言い回しが変わることがあります)。

{"error":{"status":404,"code":"not_in_range","message":"この都道府県・年のデータはありません。都道府県コードは01(北海道)〜47(沖縄県)、年は2000年から2100年までで指定してください。"}}
状態codeいつ
400invalid_pathURLの形が違う(都道府県コードが1桁・年が2桁・.json が無いなど)。例: /sun/v1/1/2026.json
404not_in_range形は合っているが、都道府県コードが01〜47の外、または年が2000〜2100年の外。例: /sun/v1/48/2026.json・/sun/v1/13/1999.json
404not_foundURLが違う(/sun/v1/ の外)
405method_not_allowedGET / HEAD 以外で呼んだ

通信できない・サーバーが止まっているときは、JSON が返らないことがあります。fetch の失敗(例外)も受け止めて、日の出の表示なしでも画面が使えるようにしてください。

データの更新・キャッシュ・呼び出し回数

変更の方針と更新履歴

更新履歴

2026年11月4日
公開。

機械で読める仕様(型定義・OpenAPI)

用語の説明

用語の説明を開く(11語)
API
プログラムから呼び出して使う窓口のことです。このAPIは、URLを開くと結果がデータ(JSON)で返ります。
JSON
プログラムで扱いやすいデータの書き方です。JavaScript ではそのままオブジェクトとして使えます。
CORS対応
ほかのサイト(あなたのサイト)のページのJavaScriptから、このAPIを直接呼び出せるという意味です。サーバー側のプログラムは要りません。
南中
太陽や月が真南に来ること(子午線を通ること)です。太陽の南中は、その地点の「正午」に当たります。日本時間の12時とは、経度と季節によって数十分ずれます。
南中高度
南中のときの、地平線から測った太陽の高さ(角度)です。夏至のころにいちばん高く、冬至のころにいちばん低くなります。
上辺
太陽の円の上の端です。日の出・日の入りは、太陽の中心ではなく上の端が地平線に重なる時刻です。
大気差
空気で光が曲がり、天体が実際より高く見える量です。地平線の近くではおよそ0.6°(35'08")で、太陽の見かけの大きさより少し大きいため、日の出は「空気が無い場合」より2分ほど早くなります。
視差
見る場所によって天体の方向が違って見えることです。月は近いので、地球の中心から見るのと地表から見るのとで、およそ1°違います。
視半径
天体の見かけの大きさ(半径)を角度で表したものです。太陽はおよそ0.27°で、地球との距離で少し変わります。
都道府県コード
都道府県に01(北海道)から47(沖縄県)まで振った2桁の番号です(JIS X 0401)。
ΔT(デルタT)
地球の自転をもとにした時刻と、一様に進む時刻との差です。自転のゆらぎで変わるため、将来の分は予測になります。

よくある質問

本当に無料ですか?登録は必要ですか?

現在は無料で、登録やAPIキーも要りません。個人・法人、営利・非営利を問わず使えます。ただし利用状況に応じて提供条件を変えることがあり、そのときはできるかぎりこのページでお知らせします。

県庁所在地以外の場所の日の出は取れますか?

取れません。このAPIが返すのは47都道府県に1地点ずつ(国立天文台「各地のこよみ」と同じ地点)です。同じ都道府県の中でも、東西に離れると日の出は数分変わります。

天気予報や新聞の日の出時刻と1分違うのはなぜですか?

計算する地点(経緯度)と、秒を分にする丸め方が違うためです。このAPIは国立天文台と同じ地点・同じ定義で計算し、秒を四捨五入して分にしています。

月の出が null の日があるのはなぜですか?

月の出は毎日およそ50分ずつ遅くなるので、ほぼ1か月に1回、その日のうちに月の出が無い日があります。その日は null を返します。月の南中・月の入りも同じです(日付またぎと null)。

山の上や高いビルからの日の出は早くなりますか?

早くなります。このAPIは標高0m・地平線まで見通せる場所での時刻です。高い所からは地平線が下に見えるので、日の出は早く、日の入りは遅くなります。山や建物で地平線が隠れる場所では、実際に見える時刻は遅くなります。

時刻はどこの時間ですか?

すべて日本時間(+09:00)の時:分です。時刻はどれもその日(0時から24時まで)の中の時刻で、前の日や次の日の時刻は入りません。

アクセス数に上限はありますか?

決まった上限はありませんが、目安として1つの利用元から1秒あたり10回程度までにしてください。1年分を1回で返すので、年のファイルを使い回せば呼び出しは1回で済みます。

ご利用にあたって

ご利用の前に利用規約をご確認ください。データの正確さや、止まらないことは保証していません。登山・航海・撮影など、時刻が安全にかかわる使い方では、山や建物の陰・標高・天気で実際の見え方が変わることに気をつけ、余裕を持った計画にしてください。公式の値を確かめたいときは、国立天文台 暦計算室の「各地のこよみ」をご覧ください。ご質問・不具合のご連絡は、シルギアのお問い合わせ窓口から、件名に「API」と入れてお送りください。