お世話になっているオープンソースソフトウェアの備忘録的ブログ

いつもお世話になっているオープンソースソフトウエアの備忘録です。ご利用に際しましては「このブログについて」をご覧くださいませ。

Python-Fuでコードを書く(準備編) ―「Inkscape」と「GIMP」で万年カレンダーを作る(その3)

『「エンジニアなんだからFAXも直せるでしょ」と言われる』「ちくしょう転職だ!」と言う転職サイトの広告があちこちで出てましたが、これも「ぱくたそ」様の画像だったんですね。 FAXについては私も出先で似たような経験は有りますが、できればこんな美人のお姉さまに問い詰められたかった・・・
www.pakutaso.com

さて、実はPythonをまともに使うのは今回が初めてだったりしますので、Pythonの達人の皆様におかれましては「なんじゃこりゃあ!!」かと思いますが、かの有名な大賢人の言葉にもありますように「綺麗なコードは良いコードだ。走るコードはもっと良いコードだ。」と言う事で・・・(すみません今私が思い付いた言葉です。本当に誰か言っていたらゴメンナサイ)

なお、最初に色々書いていますが、中身はいいから取り敢えず実行してみたい!と言う方は、3章以降をご覧くださいませ。

1.関数や変数になぜ「01」が付いているの?

言い訳です。
Pythonに限らずプログラミング関係の貴重な情報をネットに上げてくださる先達の皆様には、いつも大変お世話になっております。
ただ、上げてくださるコードについて、初心者(=自分)は「どれが組み込み関数(orクラス、クラスメソッド、プロパティ、などなど)で、どれが独自の関数(orクラス、クラスメソッド、プロパティ、などなど)か?」が分からない。と言う問題が生じます。(自分だけ・・・じゃないよね?よね?)

そんなわけで今回は、自作の関数や変数には全て「01」が付いています。(for文のカウンターとか、明らかなものは付いていないのも有ります)
「リーダブルコード」では「01とか付けると、読む人が02を探してしまうので止めろ」と言われていますが、そんなわけで01が付いているからと言って02が有るわけではありませんのでご安心ください。(たまーに02も有りますが)

2.メインの中で、なぜグローバル定数・変数をわざわざ引数にしているの?

はい。これも言い訳です。
メインは設定値のみにして、残りは全部外部ファイルにするつもりでした。
が、GIMPの独自プロシージャ?(pdb.gimp_file_load(img_tmp01, "")とか)を外部ファイルにすると「NameError: global name 'pdb' is not defined」と怒られてしまいました。パスは通っているし、おかしいなあ・・・と色々調べてみたのですが、私のアタマでは分からず諦めて放置したのでした・・・

で、最後にブログの見直しをしている時に、参考にさせていただいたサイトを見直している中で、こちらのサイト(GIMPで画像を一括でレベル補正(Python-Fu) #Python - Qiita)からリンクされているこちらのサイト(本の電子化を補助するためにGimpとpython-fuを使ってみた。 - Oillerの日記)で発見してしまいました。先頭で「from gimpfu import *」を追加すればよいという事を・・・

で、別ファイルに直そうか・・・とも思ったのですが、次期バージョンの万年カレンダーで実装しよう。と言う野望を胸に、みっともないですがそのままにしてあります。(わざわざもう一度修正するのがメンドイ。と言うのは図星です)

3.サンプルのコードって、どうやって実行すればいいの?

本来ならregister関数を使う所ですが、設定項目が多い+繰り返し使う+記念日リストを作ったりしているため「コンソール張り付け」と言う原始的な方法で実行します。(register関数を使うのがメンドイと言う(以下略))

例えば下のコードを実行したい場合です。

def hello01():
    print("Hello World!")

hello01()
pass

ブラウザ上でコードの最初から最後までドラッグして選択し、選択できたら右クリックでコピーします。(試しに上のコードでやってみてください)

GIMPで「フィルター>Python-Fu>コンソール」を実行します。

Pythonコンソール」画面上で右クリックし、「貼り付け」を実行します。

無事「Hello World!」が表示されました。
(どれが何なの?と言う話ですが、下から2行目の緑色のところです。はい)

なお、今回はブラウザ上でコピーしたものをそのままコンソール上で実行しましたが、実際は設定値を変更したうえで実行することになると思います。
その場合はブラウザ上でコピーしたものを一度エディタ上に張り付け、値を変更してから再度全部コピー、コンソールに張り付けるという手順になります。

では、次回以降コードがダラダラ出てきますので、「右クリックでコピーからの張り付け」を頑張ってください!

付録.エディタは何を使えばいい?

エディタは何でも良いのですが(何ならウインドウズのメモ帳でも)、自分は「Notepad++ 」を使っています。もちろんオープンソースです。

本家:Notepad++

英語に抵抗のある方はこちら(窓の杜
「Notepad++」オープンソースで開発されているプログラマー向けのテキストエディター - 窓の杜

なお、Pythonで「Notepad++ 」を使う場合、いくつか設定をしておいた方が使いやすくなります。

Pythonではインデントにタブとスペースを混ぜるとエラーになりますので、分かりやすいように「表示>制御文字の表示」で「半角スペースとタブを表示」にチェックを入れます。

また「設定>環境設定」で「言語メニュー」を選択し、右側の「タブ設定」でPythonを選択し、「スペースで置換」にチェックして、「タブ幅=4」にします。一応このインデントが公式の推奨みたいです。
参考:はじめに — pep8-ja 1.0 ドキュメント

謝辞.参考にさせていただいたサイト

最後になりましたが、今回の記事を書くのに参考にさせていただいたサイトの一部です。ありがとうございました。

スクリプト言語Python-Fu」関連

GIMPについては有名どころですので参考になるサイトは多いと思います。以下にいくつか上げさせていただきます。


GIMP (GNU 画像編集プログラム)
本家のドキュメントの日本語版。翻訳者の皆様に感謝です。
基本的な項目が網羅されています。この中の「Python-Fu」関連の記事が参考になると思います。


Windows版GIMP-2.10でPython-Fuを試す。 | 迷惑堂本舗
スクリプトの書き方を参考にさせていただきました。


GIMPで画像を一括でレベル補正(Python-Fu) #Python - Qiita
こちらのサイトの「関数の探し方」は必読です。
有用なサイトを紹介いただき助かりました。


GIMP / Python 自作プラグイン (ファイルをレイヤーとして読込) 解説 - 省型旧形国電の残影を求めて
Python-Fu」を使ってレイヤーを操作する方法を参考にさせていただきました。

Python関連

旬の言語だけあって検索するとサイトがゾロゾロ出てきます。が、最新のバージョン(Python3系)について書かれているサイトが多く、「Python-Fu」では使えない関数とかが出てくることが有りますのでご注意ください。


Python Documentation contents — Python 2.7.18 ドキュメント
本家のドキュメントです。「Python-Fu」のPythonのバージョンは「2.7.18」ですのでご注意ください。


とほほのPython入門 - とほほのWWW入門
有名な「とほほ」氏の入門サイトです。多少あっさり目の記述ですが(JavaScriptなんかと比べると・・・こらこら)分かりやすくまとまっています。ちょっと分からなくなった時に開くのに最適です。


note.nkmk.me控えめに言って神サイトです。むしろネ申サイトと言ってよろしいかと思います。
こちらの記事に何回助けていただいたことか・・・

その他、多くのサイトを参考にさせていただきました。ありがとうございました。