四柱推命の命式を計算するRubyライブラリです。生年月日時から四柱(年柱・月柱・日柱・時柱)を求め、通変星・十二運を導き出します。
- 暦データ不要 — 月柱の境界となる節入り時刻を、太陽黄経の天文計算(VSOP87切り詰め級数 + ΔT補正 + 二分法探索)でその場で算出します。万年暦のデータファイルを同梱していません
- 精度 — 2024年の12節すべてで国立天文台の暦要項と30秒以内で一致することをテストで確認しています
- 2層構造 — 暦の計算(
Meiri::Mannenreki)と四柱推命の解釈(Meiri::ShityuSuimei)を分離した設計です
Gemfileに追加:
gem 'meiri'または直接インストール:
$ gem install meiri
require 'meiri'
# 1981年8月7日 22:00生まれ 男性
chart = Meiri::ShityuSuimei::Chart.new(year: 1981, month: 8, day: 7, hour: 22, min: 0, gender: :male)
# 四柱: [天干index, 地支index] のペア(甲=0〜癸=9、子=0〜亥=11)
chart.year_pillar # => [7, 9] 辛酉
chart.month_pillar # => [1, 7] 乙未
chart.day_pillar # => [3, 5] 丁巳
chart.hour_pillar # => [7, 11] 辛亥
# 通変星: 日干から見た各柱の天干との関係(10種)
chart.year_tsuhensei # => :偏財
chart.month_tsuhensei # => :偏印
chart.hour_tsuhensei # => :偏財
# 十二運: 日干から見た各柱の地支の運勢ステージ(12種)
chart.year_juniun # => :長生
chart.month_juniun # => :冠帯
chart.day_juniun # => :帝旺
chart.hour_juniun # => :胎indexから干支の名前に変換するには定数を使います:
stem, branch = chart.year_pillar
Meiri::Mannenreki::Constants::TENKAN[stem] # => :辛
Meiri::Mannenreki::Constants::TISHI[branch] # => :酉時刻がわからない場合は hour / min を省略できます(正午として扱います)。
四柱推命では月の切り替わりが暦の月ではなく「節入り」(太陽黄経が15°刻みの特定の角度に達する瞬間)で決まります。meiriはこの節入り時刻を、
- Meeus『Astronomical Algorithms』のVSOP87切り詰め級数で太陽の視黄経を計算し
- ΔT(地球時と世界時の差)をNASAの多項式近似で補正し
- 目標の黄経に達する時刻を二分法で探索する
という手順でその場で求めています。対応範囲は1900〜2050年です。
- 年柱: 立春を境界として
(西暦 - 4) % 60 - 月柱: 節入りで月支を決定し、五虎遁で月干を導出
- 日柱: ユリウス日から
(JD + 49) % 60 - 時柱: 時支と五子遁による時干
- 蔵干
- 干合・支合・支冲
- 大運・歳運
- 流派差のアダプタ対応
$ bundle install
$ bundle exec rspec # テスト
$ bundle exec rubocop # コードチェック
Bug reports and pull requests are welcome on GitHub at https://github.com/ikotome/meiri.