スイスエフェメリス(Swiss Ephemeris)に関するブリーフィング
エグゼクティブサマリー
スイスエフェメリス(Swiss Ephemeris)は、AstroDienst社によって開発された高精度の天文暦計算ライブラリであり、占星術および天文学計算における事実上の標準(デファクトスタンダード)とされています。その計算基盤はNASAのジェット推進研究所(JPL)が提供するDE431などの高精度な天文暦データに基づいており、紀元前13201年から西暦17191年までという極めて広範な期間をカバーします。
本ライブラリの主な特徴は、惑星の位置、ハウス、アスペクト、日の出・日の入り時刻といった多岐にわたる計算を可能にする包括的な機能群、そしてPythonやPHP、Javaなど様々なプログラミング言語から利用できる簡易なAPIにあります。ライブラリのコアはC言語で記述されており、利用には別途、計算対象期間に応じた天文暦データファイル(数十MB規模)をダウンロードし、プログラムからアクセス可能な場所に配置する必要があります。
ライセンスはデュアルライセンス(AGPLまたはプロフェッショナル向け有償ライセンス)を採用しており、PythonラッパーであるpyswissephはAGPL-3.0で提供されています。開発者からは、データファイルのサイズやライセンスの複雑さが、特にモバイルアプリケーション開発における課題として指摘されることがあります。
——————————————————————————–
1. スイスエフェメリスの概要
1.1. 定義と起源
スイスエフェメリスは、スイスのAstroDienst社が開発した高精度な天文暦ライブラリです。その計算は、NASAのジェット推進研究所(JPL)が提供するDExxxシリーズ(DE431など)の天文暦データに大きく依存しており、占星術ソフトウェア開発の分野で広く利用されています。名称が示す通りスイスで開発され、元々はC言語で記述されたライブラリとして提供されていました。近年ではGitHub上でも公開されています。
1.2. 主な特徴
スイスエフェメリスは、その高い機能性から多くの開発者に支持されています。
| 特徴 | 詳細 |
| 高精度 | NASA/JPLのDE431天文暦データを基盤としており、天文学、占星術、天測航法など、高い精度が求められるアプリケーションに適しています。 |
| 広範な時間範囲 | 紀元前13201年から西暦17191年までの計算をサポートしており、歴史研究から未来の天体イベント予測まで幅広く対応可能です。 |
| 包括的な機能 | 惑星の位置(黄経、黄緯、距離、速度)計算に加え、ハウス、アスペクト、トランジット、ソーラーリターン、ルナーリターン、日の出・日の入り時刻、月食予測など、占星術に必要な多様な計算機能を網羅しています。 |
| 利用の容易さ | シンプルで直感的なAPIを提供しており、Pythonをはじめとする複数のプログラミング言語向けのバインディングが用意されているため、多くの開発者が容易に利用できます。 |
| オープンソース | コアライブラリはデュアルライセンスで提供されており、AGPL(Affero General Public License)の下で無償利用が可能です。これにより、開発への貢献も開かれています。 |
1.3. ライセンス
ライセンス体系は、利用形態によって注意が必要です。
- コアライブラリ: GNU Affero General Public License(AGPL)とSwiss Ephemeris Professional Licenseのデュアルライセンスです。
- Pythonラッパー (
pyswisseph): GNU AGPLバージョン3を採用しています。
ある日本の開発者は、ホロスコープ作成プログラムの開発において、ライセンスの問題が利用の障壁の一つになったと言及しています。
2. 技術的実装と利用方法
2.1. コアライブラリとデータファイル
スイスエフェメリスを利用するには、C言語で書かれたコアライブラリと、計算に必要な天文暦データファイルの2つが必要です。
- データファイル: これらのファイルはAstroDienstのウェブサイト(FTPサーバー)からダウンロードする必要があります。ファイルは計算対象の天体(惑星、月、小惑星)と時代によって分割されています。
sepl_:惑星の天文暦ファイルsemo_:月の天文暦ファイルseas_:小惑星の天文暦ファイル(カイロン等の計算に必要)- 例:
sepl_18.se1は西暦1800年から2399年までの惑星データを格納します。
- データファイルのパス指定: プログラム実行時に、これらのデータファイルが格納されているディレクトリのパスを
swe_set_ephe_path関数で指定する必要があります。 - 開発上の課題: ある開発者は、データファイルの合計サイズが約40MBに達することを指摘し、PC用ソフトウェアでは問題なくとも、Androidアプリのようなモバイル環境では容量が課題になる可能性があるとしています。
2.2. 各言語での実装
スイスエフェメリスは、様々な言語から利用されています。
- PHP: GitHubで公開されている例では、PHPの
exec関数を用いてコマンドラインツールswetestを呼び出し、その標準出力を解析して惑星の位置情報を取得しています。この方法では、惑星名、度数、日毎の速度がカンマ区切りの文字列として返されます。 - Python:
pyswissephという専用の拡張パッケージが広く使われています。これはpip install pyswissephで簡単にインストールでき、ライブラリの関数を直接Pythonから呼び出すことができます。 - Java / .NET: 日本の開発者ブログによると、C言語で書かれたコアライブラリを直接組み込んで利用する方法が取られることもあります。
2.3. 主要な関数とコード例
占星術ソフトウェア開発において、以下の関数が頻繁に使用されます。
| 関数名 | 説明 |
swe_set_ephe_path | 天文暦データファイルが格納されているディレクトリのパスを指定します。最初に呼び出す必要があります。 |
swe_calc_ut | ユリウス日(UT)を基に天体の位置を計算します。黄経、黄緯、距離、速度などを返します。 |
swe_calc | エフェメリス時(ET)を基に天体の位置を計算します。swe_calc_utとほぼ同様です。 |
swe_houses | 指定した時刻と場所におけるハウス(室)の位置を計算します。プラシーダス、コッホなど複数のハウスシステムに対応しています。 |
swe_julday / swe_utc_to_jd | グレゴリオ暦の日付と時刻を、計算の基準となるユリウス日に変換します。 |
swe_set_sid_mode | インド占星術などで用いられるサイデリアル方式計算のためのアヤナムシャ(歳差)を設定します(例:SIDM_LAHIRI)。 |
swe_close | プログラム終了時に呼び出し、ライブラリが使用したファイルポインタなどを解放します。 |
Pythonでの基本的な利用例:
import swisseph as swe
# 1. 天文暦ファイルのパスを設定
swe.set_ephe_path('ephe')
# 2. 日時をユリウス日に変換
jd = swe.julday(2024, 3, 21)
# 3. 太陽の位置を計算(速度情報も含む)
# xxは[黄経, 黄緯, 距離, 黄経速度, 黄緯速度, 距離速度]のリスト
xx, ret = swe.calc_ut(jd, swe.SUN, swe.FLG_SPEED)
print(f"太陽の黄経: {xx[0]}")
3. 占星術計算における応用
スイスエフェメリスは、その包括的な機能により、単純なホロスコープ作成から複雑な占星術ソフトウェアの基盤まで、幅広く活用されています。
3.1. 基本的な天体位置計算
プログラムの中核となるのは、特定の年月日、時刻、場所における天体の位置(黄道十二宮上の度数)を正確に割り出す機能です。春分点を牡羊座0度(0.0)、秋分点を天秤座0度(180.0)とする黄道座標系で位置が計算されます。太陽、月、惑星だけでなく、小惑星(例:13681 Monty Python)の位置も計算可能です。
3.2. 高度な計算機能
基本的な天体位置計算に加え、より専門的な占星術計算もサポートされています。
- ハウスシステム:
swe_houses関数により、プラシーダス(P)、コッホ(K)、キャンパヌス(C)、レギオモンタヌス(R)など、多様なハウス分割方式に対応した計算が可能です。 - インド占星術(ヴェーダ占星術):
swe_set_sid_mode関数を用いてラヒリなどのアヤナムシャを設定することで、サイデリアル方式の計算に対応します。ティティ(太陰日)やヴァーラ(曜日)の計算例も示されています。 - その他の計算: Pythonのサンプルコードでは、アセンダント(上昇点)、ラーシ(星座)、日の出・日の入り時刻、さらには月食の発生時刻を計算する例が紹介されており、非常に多機能であることがわかります。
3.3. 開発における考慮事項
スイスエフェメリスは「占星術計算ライブラリのデファクトスタンダード」と評される一方で、開発者が直面する可能性のあるいくつかの課題も明らかになっています。
- 環境構築の問題: Pythonラッパー
pyswissephの利用者からは、「正しくインストールしたにもかかわらず、import時にモジュールが見つからない」といった環境依存の問題や、特定の関数呼び出しでTypeErrorが発生するとの報告が寄せられています。 - ドキュメント: 元のドキュメントが英語であるため、日本の開発者にとってはそれが一つのハードルとなる可能性があります。
- 依存関係: ライブラリ本体とは別に、数十MBのデータファイルを別途ダウンロードし、パスを正しく設定する必要がある点を常に意識しなければなりません。テスト実行時にも、環境変数
SE_EPHE_PATHを設定する必要があります。

コメント