🌚

旧暦・六曜について(前編)

2024/12/02に公開

これは株式会社TimeTree Advent Calendar 2024の2日目の記事です。

TimeTreeではオプション機能として「旧暦」や「六曜」機能を実装しています。これらを実装したり不具合修正をするあたり、調べたことをまとめてみます。若干マニアックな内容になっていますが、どうぞお付き合いください。

旧暦とは

現在私たちが使っている太陽暦は太陽の動きを使った暦システムですが、旧暦は月の満ち欠けの周期を基にした「太陰暦」と呼ばれる暦システムです。

TimeTreeの旧暦対応

世界には旧暦を使用している国々も多くあり、最も旧暦の需要があるのは中国や韓国など東アジアの国々です。TimeTreeではそれらの国のユーザーの需要に応える形で旧暦の表示ON/OFF機能が実装されています。

旧暦の設定画面と表示例
旧暦の設定画面と表示例

中国の旧暦で一番馴染みがあるのは春節ではないでしょうか。春節は旧暦の正月で、近年では春節の時期に中国から日本への旅行者が増えることでインバウンド需要が伸びて──などのニュースも話題になっています。

春節を祝うのは中国だけではなく、韓国やベトナム、シンガポールなども同様です。太陽暦の1月1日に比べて盛大に祝賀され、数日間が公的な休日になります。また、誕生日を旧暦でお祝いする文化もあるようで、TimeTreeでは旧暦の繰り返し機能を実装しています。

旧暦日付での予定作成と、旧暦の繰り返し機能
旧暦日付での予定作成と、旧暦の繰り返し機能

日本においても、旧暦の影響のある文化が残っています。実は「大安」や「仏滅」などでお馴染みの「六曜」は旧暦を元に計算されています。六曜は現代の日本においても影響力があり、「結婚式は大安がよい」「葬式は友引を避ける」など、主に冠婚葬祭などの儀式と結びついて使用されています。多くの紙のカレンダーが六曜を表記しているように、TimeTreeでも六曜をカレンダーに表示する機能が実装されています。

六曜の設定画面と表示例
六曜の設定画面と表示例

旧暦の計算方法

ここまでTimeTreeの旧暦対応について説明してきましたが、そもそもの「旧暦の計算方法」についてみていきたいと思います。

月の満ち欠けの周期は約29.5日です。これを1ヶ月として1年を計算すると、29.5×12=約354日となり、太陽暦の1年と比べて11日短くなります。このずれを無視して暦を運用するとだいたい3年ごとに1ヶ月ずれてしまい、9年ごとに季節が丸々ずれてしまいます。季節のずれが大きくなると農業に不向きになるため、太陽の運行を参考にしつつ数年おきに「閏月(うるうづき)」を挿入して13ヶ月とするシステムが生まれました。これを「太陽太陰暦」といいます。

以降はこの記事でも特に注釈がない限り「旧暦」は「太陽太陰暦」を指します。

いつ閏月を挿入するか

紀元前400年頃に、19年間に7回の閏月を入れると太陽年とのずれがほぼ解消される「メトン周期」が発見されました。古代中国でも太陰暦が使われていましたが、メトン周期を取り入れ1年を24分割して閏月を挿入する仕組みが登場しました。これを「二十四節気」といいます。現在東アジアで使われている太陽太陰暦はこの二十四節気に則っています。

二十四節気ルール

いきなり二十四節気のルールを説明しても理解しづらいので、まずはこちらの図をご覧ください。

2024年の旧暦配置
2024年の旧暦配置

🌚は新月のことで「朔(さく)」とも呼び、旧暦各月の1日を表しています。朔と朔の間が旧暦の1ヶ月を表します。朔と朔の間は約29.5日なので1ヶ月は29日か30日になります。また、24分割した区切りの1つおきに旧暦の月名が割り振られているのが分かると思います。この旧暦の月名が割り振られる箇所を「中気」と呼びます。各中気から朔に向かって矢印が伸びていることに注目してください。「中気の直前の朔(新月)をその月名の月初とする」というのが二十四節気を用いた暦システムの基本的なルールです。

それでは次の図をご覧ください。

2025年の旧暦配置
2025年の旧暦配置

2025年1月29日から時計回りに見ていくと、中気と朔の矢印の間隔が徐々に離れていきます。旧6月までは既存のルールで月名を決定できますが、旧7月の中気が8月23日の朔とちょうど同じ日になっており、ルール上はこの朔が旧7月となります。すると旧6月と旧7月の間にどこにも含まれない朔が生まれます。ここに「」をつけて旧閏6月とする、というのが二十四節気を用いた閏月の追加方法です。

二十四節気ルールの例外

次はこちらの図をご覧ください。

1984年の旧暦配置
1984年の旧暦配置

これは1984年の配置図です。注目していただきたいのは12月22日の朔に旧11月と旧12月の中気が両方含まれている点です。なぜこのような事が起こるかというと、二十四節気は1年を時間軸上で均等に24等分したものではなく、天球上の太陽の通り道(黄道)を24等分したものとして定義されているからです。これを「定気法」といいます。この定義だと地球の公転軌道が楕円形なので速度が一定でないため、一部の期間で中気と中気の間隔が短くなります。そのため、稀ではありますが1つの朔に2つの中気が含まれてしまい、その結果「月名を決定できない」という事が起こるのです。

1844年より日本で使われている太陽太陰暦のひとつである「天保暦」ではこの問題に対する解決策が示されています。それは冬至を含む月は11月、春分を含む月は2月、夏至を含む月は5月、秋分を含む月は8月という追加ルールです。これにより、冬至を含んだ12月22日の朔が旧11月となり、次の1月21日の朔は旧12月の中気には含まれませんが、例外として旧12月が割り当てられています。残った11月23日の朔が旧閏10月となります。

まとめ

専門用語がたくさん出てきたので、一度用語をベースにおさらいしてみましょう。

用語 解説
太陰暦 月の満ち欠けを利用した暦システム。
太陽太陰暦 太陰暦をベースに太陽の運行を参考にして季節のずれを解消した暦システム。
閏月 太陽太陰暦で季節のずれを解消するために追加される月。
19年間に7回の閏月が入ると太陽の運行と同期される。
新月のこと。旧暦では毎月1日になる。朔と朔の間隔は29.5日。
二十四節気 1年間を24分割し、そこから閏月を挿入する朔を特定する。
区切りは黄道を24等分したもので、時間軸上は一定ではない。
中気 二十四節気の偶数番目の区切り。ここに月名が割り振られている。
中気の直前の朔がその月の月名となる。
天保暦 二十四節気を用いた旧暦のひとつ。
1844年(天保15年)から日本で運用が開始され、
1872年(明治5年)には公的に廃止されている。
ただし日本で旧暦や六曜を扱う場合には今もこのルールをベースに計算されている。

次回は天保暦の例外ルールでも対応できない問題や、旧暦のタイムゾーン問題について紹介します。
後編もぜひお読みください!
https://zenn.dev/timetree/articles/f79d47d84ae4f7

参考文献

https://ja.wikipedia.org/wiki/太陰太陽暦
https://ja.wikipedia.org/wiki/二十四節気
https://eco.mtk.nao.ac.jp/koyomi/topics/html/topics2014.html

TimeTree Tech Blog

Discussion