もう半年以上前になってしまいますが、昨年の9月7日の深夜から8日未明にかけて皆既月食を撮影しました。今回は皆既中の月面の色の変化を記録したくて動画で撮影しました。
なんで今さら?と思われるかもしれませんが、理由があります。ZWO AM3 に載せた FSQ-85EDP で撮影したのですが、追尾していたつもりの月が写野から逃げていきそうになり手動で鏡筒の向きを調整したからです。
AM3 は SkyAtlas から月追尾モードに設定できるのですが、実はこれは赤経軸の回転速度を調整するだけで赤緯方向の追尾まではしてくれなかったのです*1。そのためタイムラプス動画としては見るに耐えないものになってしまい、フレームの位置合わせを行う必要が出てきました。
普通はこういう位置合わせはフレームの輝度重心で合わせるのが一般的ですが(AutoStakkert! の COG モードがそれです)月食の場合は食分によって輝度重心がズレていってしまいます。皆既中でも月面のグラデーションがかなり変化しますので単純な輝度重心を基準にしても位置合わせできません。画像から円弧を識別して、というのも部分日食で明るい部分に露出を合わせたフレームではなかなか難しそうです。
そこで、フレーム内に写り込んでいる恒星の位置を記録して、そこから月の位置を計算して月の中心で位置合わせするツールを作ろうとしていたのですが、工数が結構かかりそうで、まとまった時間がなかなかとれなくて実装に手がつかないまま半年が過ぎました…
そうこうしているうちに世間では AI と協働してソフトウェア開発を行うバイブコーディング(Vibe Coding)が大流行。アマチュア天文家界隈でも「天体写真はじめるよ」のにゃあさん、星沼会のそーなのかーさんらが実践しています。
プロのプログラマとしては色々思うことはあるのですが、まずは実践してみなくてはというのもあり、定番の Claude Code で実装してみました。諸々の事情により仕事では AI コーディングは使えないため Claude Code を使うのは今回が初めてです。Claude Code は有償プランを契約しないと使えないため、疎遠になっているサブスクをいくつか解約して 19$(約3000円)/月 の費用を捻出しました…
そうしてできたのがこちら。
土曜日の夜から初めて日曜の夜には実用になるレベルまで実装できました。コード自体は過去に作ったSER動画の読み込みモジュール以外は書いていません。Claude Code への指示出しだけで実装しています。当初は勉強も必要だし時間がかかると思って後回しにしようとしていたGUIでフレーム内の恒星をクリックして位置を記録するツールも実装できました。

MoonTracker の keyframe-editor で動画フレーム内の恒星をマークしているところ。右側のウィンドウは恒星の名前を調べるために開いた Stellarium (プラネタリウムソフト)。
自分でここまで実装すると3人日以上はかかると思っていたので、1人日程度でここまでできたのは驚異的です。コーディングに限れば10倍くらい速いと思います。自分が色々調べながら2時間くらいかけて書く量のコードを10分くらいで生成して、単純なバグはほとんどありませんでした。
というわけでとりあえず作成してみた300倍速のタイムラプス動画がこちら。

皆既月食 (2025/9/8 02:20-04:03)
こうして見ると皆既中の月面のグラデーションの変化がよくわかります。
冒頭で露出が揺らいでいますが、これは動画の撮影中にリアルタイムに露出を調整していて、最初の方ではその調整をミスっていたからです…
皆既の開始直前から終了直後までの長回しで撮影した動画から動画から30秒毎に1フレーム切り出してタイムラプスにしています。ブレていたり恒星が確認できないフレームだった場合はなるべく近い時刻のフレームが自動で選択されています。ちなみに長回し動画とは別に食分が小さい間に30秒毎に撮った動画もあるのですが、それはまたいずれ。
本当はダーク減算もして、各フレームを stack & wavlet 処理して… 等々、夢はひろがりますが、とりあえずはここまで。でもやっぱりシャープな月面が見たいので要所だけ手動で処理したのがこちらです。

満月 (2025/9/8 0:26:51)
高橋 FSQ-85EDP (D85mm f450mm F5.3 屈折), フラットナー1.01× (合成F5.4), ZWO UV/IR Cut Filter 48mm / ZWO AM3 / ZWO ASI294MC Pro (Gain 165), SharpCap SharpCap 4.1.11817.0, 露出 0.5ms x 50/100コマをスタック処理 / AutoStakkert!3 3.1.4, RegiStax 6.1.0.8, Lightroom Classic で画像処理

皆既開始前の部分日食の満月 (2025/9/8 1:50:03)
露出 0.7ms x 50/100コマをスタック処理。その他の撮影データは上に同じ。

皆既月食中の満月 (2025/9/8 2:51:56)
Gain 290 / 露出 250ms x 20/30コマをスタック処理。その他の撮影データは上に同じ。

皆既終了後の部分日食の満月 (2025/9/8 4:30:06)
Gain 159 / 露出 2ms x 50/100コマをスタック処理。その他の撮影データは上に同じ。
皆既中の月は双眼鏡(ヒノデ 8x42 D1)でも観望しましたが、上の写真とはかなり色味が違って見えました。上の写真は全部月食前の満月の写真のカラーバランスに合わせているので正しい色のはずなのですが、眼視ではもっと青成分が強くて彩度の低い感じでした。それをRAW現像で再現したのがこちらの写真です。

皆既月食中の満月 (2025/9/8 2:51:56) (眼視のイメージに寄せてカラーバランスを調整)
でもこのカラーバランスを満月の写真に適用するとこんなに青くなっちゃうんですよね。

満月 (2025/9/8 0:26:51) (皆既時の写真を眼視のイメージに寄せて調整したカラーバランスを適用)
今回の皆既月食はかなり暗い月食だったようで、8倍42mm の双眼鏡で見てもだいぶ暗く見えました。そのため色を感じるけれど感度の低い錐体細胞があまり働かず、色を感じないけど感度の高い桿体細胞の働きが相対的に大きくなり、その影響で青みを強く感じたのでしょうか?桿体細胞の感度ピークが青と緑の境目のあたりの波長にあるので。でも桿体細胞の反応が色の感じ方にどう影響を与えるのか知らないのでよくわかりません…
というわけで、本当に今さらですが Claude Code のおかげでやっと昨年の皆既月食を記事にすることができました。色々複雑な思いはありますが、天文アプリの汎用的な機能では手が届かない天文計算や画像処理をオーダーメイドで、この速度と価格でできるようになるのは画期的なことだと思います。MoonTracker のリポジトリには Claude Code とのやりとりを記録したチャットログも含まれているので参考にしてみてください。
追記: Claude の使用量について
Claude Code は Claude の料金プラン Pro 以上で使えますが、無制限に使えるわけではなく、使用量に上限があります。5時間毎の上限と一週間毎の上限がありますが、前者に関しては家事や遊びの合間にやっていたこともあり、上限の半分にも達しませんでした。一週間毎の使用量については上限の20%でした。
Pro プランは業務でエージェントを複数並列に走らせたりしてガンガン使うには不足と言われますが、日曜プログラマ的な使い方なら全然余裕だと思います。