機雷がなんだ! 全速前進!

SEというかプログラマというか、日々のエンジニア生活の中で体験したことなどを中心に書き残しています。

日の出・日の入を計算するWebアプリをMercuryで作成して公開してみた

今回も小技ネタですが、一応サンプルWebアプリ公開までやったのでブログに書いておこうと思います。

背景

以前から国立天文台公開データを手動でExcelに取り込んで可視化するということをやっていました。(※下図のイメージ:日の出&日の入の時刻の可視化.xlsx

手動で作成して運用していたExcelファイル

年に1回のことなので、自動化するまでもないと思っていたのですが、それすら面倒くさくなってしまったので Jupyter NotebookGoogle Colab)で自動化することにしました。

課題

Jupyter NotebookGoogle Colab)を使えば可視化まで実現できそうではありますが、次のような懸念点がありました。

  • 国立天文台公開データと比較して精度が大きく劣化する可能性がある
  • 作成したノートブックを いつでもどこでもだれでも 簡単に実行できない

結論

今回は、以下のソリューションを使って作成したノートブックをWebアプリとして公開することで前述の懸念点を解決しました。

公開したWebアプリのURLは次のとおりです。

https://daytime.runmercury.com/app/sample

Webアプリの画面イメージ

やったこと

今回やったことは以下のとおりです。

1.日の出、日の入の計算手段の選定

以下の候補を試してみて国立天文台公開データとの日の出、日の入の時刻の差異が小さいものを採用することにしました。

  • 天文計算ライブラリ Skyfield精度【★★☆】
  • 天文計算ライブラリ PyEphem精度【★★★】  <= 今回はこちらを採用
  • 公開Web API Sunrise-Sunset精度【★☆☆】

厳密な比較をした訳ではありませんが、手元で実際に試してみて差異が小さい(※日の出入が概ね±1分以内)ものは PyEphem だったため、こちらのライブラリを採用することにしました。

 

2.Webアプリ化&公開の手段の選定

作成したノートブックをを いつでもどこでもだれでも 簡単に実行するためにはWebアプリ化して公開するのが一番手っ取り早い手段だと思ったので、Jupyter NotebookGoogle Colab)をWebアプリ化する次のライブラリを試してみました。

  • Webアプリ化ライブラリ: Mercury <= 今回はこちらを採用

これが意外と簡単に導入でき、サクッとWebアプリ化できました。

 

最後にWebアプリ公開する環境が必要となります。もちろんできれば無料で、、、

ということで、今回は次の環境を試してみました。

  • Webアプリ実行環境:Mercury Cloud <= 今回はこちらを採用

いろいろと制限や制約がある(Webアプリは1つまで。Webアプリ構成ファイルは2つまで。など)ものの無事に 無料で Webアプリを公開することができました。

 

今回作成したサンプルWebアプリのソースコードをGithubに置いておきます。

github.com

おわりに

今回使用した天文計算ライブラリ PyEphem ですが、人工衛星なども含めた任意の天体の軌道計算など、もっと高度なこともできるようです。任意の時刻における人工衛星の位置を計算して地図にプロットしている人もいて天体マニアでない自分でも少しワクワクしてしました。 Jupyter NotebookGoogle Colab)を使うと単に計算するだけに留まらず、簡単に可視化まで持っていけるので非常に良いですね。それでは

参考

今回は下記リンクの情報を参考にしました。