GIMP3 用の Python プラグインスクリプトプログラミングにおいてデバッグする方法をまとめてみます。いくつか重要なポイントがありますので、それごとにまとめてみます。
1. メニューにちゃんと登録させる
まず Python プラグインが、メニューにちゃんと登録され、表示されないと、エラーがあることはわかってもどこにエラーがあるのかわかりません。この状態だと手も足も出ない状態です。作成したプラグインがメニューに現れない理由としては次の6つの理由が考えられます。
1) プラグインをおいている場所が間違っている
基本的に、ユーザのホームディレクトリの配下にある GIMP 設定ディレクトリにプラグインを入れます。位置は下記の通り。
~/.config/GIMP/3.0/plug-ins/
c:\users\%USERNAME%\AppData\Roaming\GIMP\plug-ins\
~/Library/Application Support/GIMP/3.0/plug-ins/
なお、2.10 と 3.0 の違いとして、3.0 ではこのディレクトリの下に、プラグインのファイル名と同名のディレクトリを作成し、その下にファイル本体を入れないと認識されません。例えば、ファイル名が test.py だったら test というディレクトリを作りその下に入れます。
2) ファイルのプロパティが実行可能になっていない
これは、Linux と Mac OS のみ該当しますが、ファイル属性で実行可能になっていないとメニューに出てきません。ファイルプロパティを見て、実行可能にチェックを入れるか、chmod +x コマンドで変更してください。
3) 登録情報が間違っている
2.10 の Register 関数に相当する登録情報が間違っていると、当然メニューに現れません。これについては先日の記事で登録情報を入れたテンプレートファイルを公開しておりますので、それを活用して、プログラムファイルを正しく登録してください。
プログラミングを始める際は、最初にこのテンプレートを適宜編集して、まずこのテンプレートがメニューにちゃんと登録されることを確認してから、以降のコーディング作業を行うことを強く勧めます。
4) Python コードに文法エラーがある
登録情報が正しくてもコードに文法エラーがあるとメニューから消えます。これについては、Visual Studio Code など統合開発環境 (IDE) を活用し、Python の文法チェックを有効にして開発することを強くお勧めします。
なお、Linux 環境で VS Code を使って開発すると、2.10 とは異なり、ちゃんと GIMP 独自のライブラリを認識してくれ、力強いです。Windows の場合は、たぶん Python のインタープリタを GIMP3 のインストールディレクトリ配下の Python インタープリタを指定すると同様になると思います(未確認)。ただ GIMP のライブラリが認識されなくても基本的な文法チェックはやれるので、問題はあまりないと思います。
VS code でデフォルトで使う Python のパスを指定するには
[設定] (歯車のアイコン) → 設定の検索ボックスから "Python: Default"と入れる → Python: Default Interpreter Path でパスを指定。
5) 既存のプラグインと PDB 検索名がバッティングしている
def do_query_procedures(self): で指定する PDB 検索名を、既存の名前とバッティングしないように指定します。
6) 文字コードが間違っている
文字コードは UTF-8、改行コードは LF である必要があります。特に日本語を含む場合は、シフトJIS になっていないかどうか十分にご確認ください。
2. GIMP3 をコンソール (コマンドプロンプト) から verbose モードで起動する
プログラムの論理エラー情報を出力するには、基本的に、OS のコンソールから verbose モードで GIMP を起動し、verbose モードの ログ・コンソール画面からエラーメッセージを見ます。一部の論理エラーについては、GIMP 内のエラーコンソールから見ることができる場合もあります。
コンソールからの起動コマンドは (デフォルト設定でインストールされている場合)、
"C:\Program Files\GIMP 3\bin\gimp.exe" --verbose
Linux (Flatpak インストールの場合)
flatpak run --system org.gimp.GIMP --verbose
です。
3. Gimp.message を活用する
プログラムをデバッグするときに、途中の変数にどんな値が入っているのか、とか、プログラムのどこまで正常に進行したのか、などを確認したい場合があると思います。
この場合は Gimp.message API を活用します。
Gimp.message("文字列")
なお、引数の文字列は UTF-8 でなければなりません。これをプログラムの随所に仕込んでおくと GIMP 内部のエラーコンソールに出力されます (OS のコンソールではありません)。従って、必ずエラーコンソールが見えるように設定しておいてください (デフォルトではオフです)。メニューの [ウィンドウ] > [ドッキング可能なダイアログ] の下に見当たるはずです。