Siril Python Scriptのバイブコーディング環境構築

先月、cursorを使ってSiril python script開発環境の記事を作りましたが、勘違いを含んでいたことと、構築の手順をしっかり書いていなかったので改めて記事にします。

やりたいこと


・AIを使ってバイブコーディングでSiril python scriptを作成する
・AIに学習させるためのデータを収集し、コーディングの精度を上げる


では早速進めていきます。


Pandocのインストール


Sirilのドキュメントはrst形式(拡張子=.rst)で公開されています。
Pandocはこれをマークダウン形式(拡張子=.md)に変換するためのアプリです。


このページからダウンロードし、インストールしておきます。


学習用ファイルの準備


前回はGitからクローンを作りましたが、Gitアカウントが無くても問題はありません。
下記のサイトから直接ダウンロードします。



ページ内の「コード」をクリックし、ソースコードをダウンロードから好きな拡張子を選びます。
私はzipを選びました。

これを解凍しておきます。

この中にある「doc」というフォルダに入っているものが Siril - Docs そのものになります。
おおよそですが、1ファイルがwebの1ページに相当します(いくつか例外あり)。


これらのファイルをすべて読み込ませても良いのですが、AIのコンテキスト量が増えすぎ、トークンの無駄使いになってしまいます。

可能な限り少量のファイルにした方が良いです。
が、大量のファイルがあるので、何を選べばよいのかの判断が難しいです。


そこで、python scriptを作るにあたって必須級のファイルをいくつかピックアップしました。

・commands.rst
→Sirilを動かすのに必須。これが無いと何も出来ない。

・Python-API.rst
→python scriptに関する技術的な詳細が書かれている。しかし、何故かこのファイルには中身が無く、webページから取ってくる必要がある。

・Python-script.rst
→python scriptの基本的な内容が書かれている。

・Author.rst
→奨励モジュールや、GUI等の情報が書かれている。

・python-expamle.rst(と、その中身の5ファイル)
→プログラムの例を示すことで、成功率を上げる。


では、これらをマークダウンに変換していきます。

まずは下のコマンドをテキストで保存し、拡張子を.batに変更します。

このファイルを、docフォルダの中に入れてダブルクリックします。

for %%f in (*.rst) do (
    echo Converting %%f ...
    pandoc "%%f" -f rst -t markdown -o "%%~nf.md"
)

何を行っているかと言うと、pandocを使ってフォルダ内のrstファイル全てをマークダウン形式のファイルに変換しています。

出来上がったファイルの中からcommands.mdを探しておきます(後で移動します)。


次は、このフォルダ内にある「script」というフォルダに.batのファイルを移動してダブルクリックします。

ここでもマークダウンが出来上がりました。


必要なファイルは次の8つです。

authors.md
Python-scripts.md
Python-examples.md
python_direct_interface.md
python_gui_template.md
python_hello_astropy.md
python_hello_siril.md
python_plot.md



続いてpython-APIを作ります。
先程と同じように、下のコマンドをテキストで保存して拡張子を.batに変更してダブルクリックします。

@echo off
setlocal enabledelayedexpansion

set "URL=https://siril.readthedocs.io/en/stable/Python-API.html"
set "OUTPUT=siril_python_api.md"

echo [1/2] Fetching and converting Siril Python API from Web...

pandoc %URL% ^
    -f html ^
    -t gfm ^
    --strip-comments ^
    --wrap=none ^
    -o %OUTPUT%

if %ERRORLEVEL% EQU 0 (
    echo [2/2] Success! Created %OUTPUT%
) else (
    echo Error: Conversion failed. Please check your internet connection or Pandoc installation.
)

pause

これは下のURLからデータから、不要なhtmlのコメントなどを削除してマークダウン形式に変換しています。

実行したフォルダ内に下のファイルが出来上がっているはずです。

siril_python_api.md


必須のファイル10個が全て揃いました。
これを基本とします。


その上で、「何のスクリプトを作りたいか」によって追加の学習ファイルを用意します。

例えば、スタックまでの前処理に関するスクリプトを作りたい場合は、preprocessフォルダの中にある5ファイルをマークダウンに変換して追加するというイメージです。



追加学習ファイルの選び方

どうやって学習用ファイルを選ぶのかが難しいです。

そこで、ファイルの選び方の一例を示します。


Siril ←のリンクからpdfをダウンロードします。

googleのnotebookLMに読み込ませて、下の質問をします。

〇〇という機能のpython scriptをAIに作らせます。
どの項番のデータが必要でしょうか?

そうすると項番を教えてくれるので、それに相当するrstファイルを探して変換するという形です。

もちろんAIなのでウソを言う事もありますが、参考にはなります。


sirilpyとpysirilについて


ややこしい話なのですが、SirilとPythonの組合せには2つの仕組みが存在します。
pysirilとsirilpyです。

この2つに関しては、内容にあまり自信がありません。
間違いが含まれているかもしれません。


大雑把ですが、2つの違いです。

pysiril:Sirilの画像処理プログラムをpythonに呼び出し、Python内で処理させる。
sirilpy:Sirilをオートで動かすリモコンをpythonで作る。

2つの仕組み同一スクリプト内で共存できるので、余計にややこしい。




Sirilの機能だけでやりたい事が完結出来ればsirilpyで大丈夫です。
これまでに準備したデータは、ほとんどsirilpy用です。
(commandsだけはどちらも使う)


Sirilに無い機能をpythonで実現する場合はpysirilが必要になります。
例えばnumpyを使って画像処理する等です。


pysirilの資料が何処にあるのかイマイチよく分かっておらず、見つけられたのは下2つです。



pysirilのチュートリアルはPython-APIと同じ方法でマークダウン形式にしました。
python-APIの変換に使ったコマンドのURLとoutputを置き換えれば出来上がります。
@echo off
setlocal enabledelayedexpansion

set "URL=https://siril.org/tutorials/pysiril/"
set "OUTPUT=pysiril.md"

echo [1/2] Fetching and converting Siril Python API from Web...

pandoc %URL% ^
    -f html ^
    -t gfm ^
    --strip-comments ^
    --wrap=none ^
    -o %OUTPUT%

if %ERRORLEVEL% EQU 0 (
    echo [2/2] Success! Created %OUTPUT%
) else (
    echo Error: Conversion failed. Please check your internet connection or Pandoc installation.
)

pause
まだ試していませんが、出来上がったpysiril.mdも11個目の必須ファイルとして良いかもしれません。

GitLabのexample内のファイルについては、テキストで取り出してマークダウン形式にしてみました。


まだpysirilの学習データを利用してスクリプトを作ったことは無いので、どこまでのモノになるのかは不明です。
そのうち試してから、この記事を更新しようと思います。
その時にはexampleの変換も詳しく書く予定です。



なお、AIに指示するときには、sirilpyとpysirilが混同するような指示の仕方は禁物です。

例えば「convertでダーク減算とフラット除算した時にnumpyで〇〇の処理を加えて。」というプロンプトは悪い例です。

convertはsirilpyで、numpyはpysirilなので同時に処理は出来ません。


こういうパターンは「convertでダーク減算とフラット除算したファイルを保存し、保存したファイルにnumpyで〇〇の処理を加えて。」にすると動くようになります。

ファイルの保存という操作で処理を区切り、sirilpyとpysirilを使い分ける必要があります。




ちなみに、クールファイル補正とコスミカットはpysirilを利用している事が今更ですが判明しました。


こんな重要な事を知らない上に学習データ無しでも作れてしまうAIの凄さと、知っていればもっと簡単に作れたのになという反省とで複雑な気持ちです(笑)


コーディング開始


ややこしい話から本題に戻ります。
必要な学習用ファイルが揃ったので、cursorに移動します。

まずはcursorのプロジェクトフォルダに、先ほど作成したマークダウンファイルを保存するためのフォルダを作ります。
私はSiril_docというフォルダを作っています。

そのフォルダに学習用ファイル(先ほど作った10個+追加ファイル)を入れます。

そしてAIエージェントに指示を送るのですが、指示の一番最初に次の文を入れておきます。

以下の処理では siril_docs/ 以下の Markdown のみを仕様として使用してください。
存在しない Siril コマンドや API は使用禁止です。

これでAIがサクッとスクリプトを作ってくれます。



実行してみた


実際には1か月ほど前にGithubにアップロード済みですが、unsharp mask script のアップデートを行いました。

更新内容はレスポンスの改善と不具合の軽減です。
スライダーを動かしたりして処理を実行した直後に、画面の拡大縮小をするとSirilが落ちてしまう不具合があったので、起こりにくくするようにしました。



実は最初からアップデートしようと思って作ったわけではありません。
cursorの実力を見てみようと、ゼロから作らせてみました。

すると1回の指示だけで、v2を超える出来上がりのモノが出来てしまい本当に驚きました。


これの動作確認中に不具合を見つけたので、対処を行ったという状態です。


Sirilが落ちてしまう不具合としては、script側の処理とSiril側の処理(拡大縮小)が競合してしまい、Sirilがクラッシュしてしまいます。

軽減策としてscriptの処理を実行する際、若干の待機時間を設けて処理がバッティングしないようにしてみました。

根本解決はこれから考えたいと思います。



軽い気持ちで始めたバイブコーディングですが、なかなか奥が深い…


コメント

にほんブログ村

PVアクセスランキング にほんブログ村 にほんブログ村 写真ブログ 天体写真へにほんブログ村 科学ブログ 天文学・天体観測・宇宙科学へ