見出し画像

Pythonで日の出、日の入り時刻を算出する際にハマる場合があるので注意しよう


日の出、日の入りを算出するライブラリは一つではない

手短に言うと、以下の二つがAIにより選択肢として挙げられました。
・ephem
・astral
使い勝手を考えるとastralの方が判りやすい感じだったので、現状ではこちらを使っています。

当初はephemを利用しようとしました

当初は、Bingのcopilotで日の出、日の入りを算出するライブラリは無いかと尋ねた所から始まります。

私:pythonで現在の緯度経度から日の出日の入時刻を取得したいと思います。 緯度経度は与えられる予定ですが、無ければ日本標準時の地点での緯度経度で計算します。

Copilot:Pythonのephemというライブラリを使って、指定された緯度と経度から日の出と日の入りの時刻を計算することができます。以下にそのコードを示します。なお、緯度経度が与えられない場合は、東京(緯度: 35.6895, 経度: 139.6917)の値をデフォルトとして使用します。

Copilot

その後ずらずらと提案コードが出力されます。
当初はこのephemを提案されたので、これでやってみようと思いました。
ただ、サンプルでは特に問題なさそうに思えたのですが、実際にこの機能を組み込んでみると思うように動作しません。

原因は二つあります。
・対象日付の翌日の日の出、日の入り時刻が出力される
・基本的にUTCタイムゾーンで出力される

UTCというのは協定世界時と言うもので、詳しくはWikipediaを見て貰えば判るかと思いますが、日本の標準時(JST)はこのUTCから9時間進んだ時刻となります。

1番目の翌日の日の出、日の入り時刻を出力してしまう点はephemライブラリに渡す日付を1日早めれば問題なさそうです。
ただ、2番目のこの時差がちょっといやらしくて、標準時に9時間足し込んでJSTに直した場合は、大抵の場合翌日の日付になります。
結局は日の入りの日付はそこから一日戻して、という処理が必要になるのですが、多分後から見たら訳の判らないコードが出来そうな印象です。

検討の結果astralに変更

その後copilotと何度かやり取りしましたが、コードが思い通りに修正されない状態に陥ってしまったので、生成AIを替えました。
次はClaudeで尋ねてみた所、astralというライブラリを紹介されました。

こちらは割とシンプルな記述が可能で、タイムゾーンにもそのまま対応してくれます。
なので、こちらのコードを基本的に採用する事にしました。

複数の生成AIに尋ねてセカンドオピニオン的に使おう

今回のやり取りで分かった事は、生成AIも最初からベストな回答を出してくれる訳ではない、という事ですね。
今回はClaudeにセカンドオピニオン的な役割を担ってもらい、コードを出力しました。特にこういったプログラム言語のライブラリを使う場合、大抵は複数のライブラリがあって、結局どれを使えばいいのよ?
という問題が起こり得ます。

そのような場合、スター数が多いとか色々と判断基準はありますが、定番ではないライブラリを使う際、特に日本語の情報が無い場合は苦労します。
殆どの場合、ライブラリのドキュメントはほんの触りの部分しか書いていないので、実際に使えそうなものか判断しづらいです。
(従来はここで時間を取られていた)

生成AIを使ってサンプルコードを出して貰い、出来栄えを比較する事でライブラリ選択の一助になるのではないかと思いました。


と言う訳で、農業設備の自動化の情報をまとめるべくnoteのマガジンを作りました!

私が共同代表を務めているGREEN OFFSHOREでは農業向けのIoTサービスを展開しています。
そちらにも様々な情報を展開しているので、ぜひ上記リンクをクリックしてみて下さい。

この記事が気に入ったらサポートをしてみませんか?