このページでは、Inkscapeのエクステンションを自分で作るにはどうすればいいのかをまとめていきたいと思います。
(2025.04.15更新)
エクステンションを自作するとは?
エクステンションを自作すると、Inkscapeを使って手動で行っていた様々な手順を自動化(プログラミング)して、メニューから簡単に実行させることができるようになります。
エクステンションを自作するには、自動化したい操作手順に対応したプログラムコードを書きます。どんなコードを書くのかにはいくつかのルールのようなものがあって、「Inkscapeのエクステンション用のプログラムに求められる形式」に沿ったものにします。
できあがったプログラムファイルは「エクステンション用のプログラムファイルの置き場所」として決まっているフォルダに保存します。ただし、プログラムファイルを置くだけではInkscapeのメニューから実行できるようになりません。追加したエクステンション用プログラムファイルの存在をInkscapeに認識させるための「Extension Definition ファイル」というXML形式のファイルも併せて作成してプログラムファイルとペアで保存します。すると、Inkscapeを起動したときにそのフォルダの中にある「Extension Definition ファイル」を自動的に読み込んで、エクステンションのメニューに追加してくれます。
なお、ネット上のInkscapeに関する解説コンテンツには、エクステンションを自作する方法についてのノウハウも充実しているようなので、ちょっと調べるだけでいろんなエクステンションを自作していくことができそうです。例えばInkscapeのポータルサイトにも「How to Write Extensions」というページがあります。
いろいろ試してみた
ここからは、いろいろサンプルを作って試しながら、エクステンションを自作するためのノウハウを蓄積していこうと思います。
ところで、エクステンションを自作するには、どのプログラミング言語を使ってエクステンションをプログラミングするかをまず決めないといけません。エクステンションは「C#」や「Perl」といったプログラミング言語で作ることもできるそうですが、「Python」で作るのが主流のようなので「Python」の勉強も兼ねてこれで作ってみることにしました。
- シンプル:とにかく動かしてみるシンプルな例
- ログ出力:ログメッセージを画面に出力する
- ダイアログ:パラメータ設定用のダイアログを表示させる
- フィルの設定:ダイアログに入力した色に変更する
- オブジェクトを描く:矩形やパスを生成してキャンバスに追加する
- 長さ設定:ストローク幅をいろんな単位で設定する
- 全探索:レイヤ上の全部のオブジェクトを順に取り出す
- 属性の設定:オブジェクトに任意の属性を設定する
- 文字列置換:文字列の一部を別の文字列に置き換える
エクステンションを自作してみて思ったこと
「Python」を使ってエクステンションを作る方法がいろんな解説コンテンツに書かれていますが、Pythonプログラムに登場するいろんな変数の「型」がすぐ分からない(Pythonが変数の型を宣言しない言語だから?)ので、サンプルプログラムを見てもどんな処理が書かれているのかを理解するのが大変です。
例えばエクステンションの中に記述することになっている「effect( )」というメソッドのパラメータ(引数)に「self」という名前のものがありますが、これがオブジェクトそれ自身を指すことを知らなかったり、「self」という変数名もこれに決まっているわけではないことを知らなかったりすると、「self」という引数の型が分からないので、「self」を使ったその後の処理も何をやっているのやら読み取れないことになります。
Pythonについて初心者だからなのかもしれませんが、同じような感想もよく見かけます。
対策として「この変数の型は××です」とコメントを記載するようにすればよいという意見もありますが、現実にはそういう分かりやすい注釈は手間がかかるためかあまり書かれていないみたいです。Pythonのプログラミングに精通している人の間では暗黙のルールになっていて、コメントが省略されることも多いと感じます。
Inkscapeのエクステンションの作り方が良く分からない理由の多くが、実は解説コンテンツに登場するPythonを使ったエクステンションのコードを理解しにくいからであるように思います。