趣味プログラマによるOSS開発日誌

趣味で作っているOSSソフトウェアの紹介や関連技術の紹介、楽曲製作、Webデザイン勉強状況を紹介します。

BlenderプラグインをBlender本体に取り込んでもらうまでの流れ

作成したBlenderプラグインBlenderリポジトリへcommitする流れを毎回のように忘れてしまうので、まとめることにしました。
これからBlenderプラグインBlender本体に登録したい方は参考になるかと思います。

プラグインの機能が既に存在するか確認する

作って公開したいプラグインが、既にBlenderに存在する機能であるかを確認します。

Blenderで公開されているプラグインは、バージョン2.6であればBlender Addons Catalogから確認することが出来ます。
作成したプラグインの機能が存在しない場合はラッキー。
有用な機能であれば、Blender本体に登録される可能性が高くなります。

既に機能が存在する場合でも諦めるのはまだ早いです。
公開されているプラグインに性能面や機能面で問題点がないか確認してみましょう。
問題点の改善や新機能を追加することで、Blender本体に登録させてもらえる可能性もあります。
もちろん既存のプラグインに比べて何も進展がないようなプラグインでは、Blender本体への登録は厳しいです。

プラグインを作成する

プラグインが新規のものか既存のものかが分かったら、プラグインを作成していきます。
過去の記事Blenderプラグインの作成方法について簡単にまとめていますので、参考にしてみてください。

最終的にBlender本体として公開することを考えている場合、プラグインの作成には少し気をつけることがあります。
Blender本体として公開するということは、いわば"Blenderのソフトウェアの1つ"として公開されることと同じことになるため、プラグインのソース自体の品質的にも一定以上のものが求められます。
品質といっても良く分からないと思いますが、具体的には以下の2点に気をつけつつプラグインを作成していくとよいと思います。

  • コーディング規約
    Blender特有の情報をプラグインに記述する必要があります。(Script requirementsを参考にしてみてください。)
    加えてPythonのコーディング規約であるpep8に準拠している必要があります。pep8については、PEP 8 - Style Guide for Python Codeを参考にしてください。
    1行の最大文字数が79文字を超えてはならないpep8-80というのもありますが、ここまでは求められていないようです。
  • Pythonの効率的な記述
    Pythonは同じ機能を実現する時、誰が書いても似通ったコードになるという話も聞きますが、書き方ひとつで実行効率が大きく変わってきます。
    例えば、リストに格納された値を2倍にしたリストを作成するコードを見てください。

    >>> l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> double_l = []
    >>> for i in l:
    ...   double_l.append(i * 2)
    ...
    >>> double_l
    [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
    

    これをPythonの機能であるリスト内包表記で書くと、以下のようになります。

    >>> l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> double_l = [i * 2 for i in l]
    [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
    

    最終結果はどちらも同じですが、リスト内包表記を用いた場合のほうが実行速度は速いです。
    これは、最初の例では"append属性を取り出して関数を呼び出す"という処理に対して、リスト内包表記を用いた場合は"リストに要素を追加する"という処理になるからです。
    この辺の詳しい内容はここで紹介されているので気になる方は確認してみてください。

書き方次第で実行速度が変わる例を出しましたが、Blenderではより性能の良いプラグインが好まれます。
使う人にとっては少しでも速く実行されたほうが良いのは当然といえば当然ですね。
ですからBest Practiceを確認して、ぜひ効率の良いプラグインを作ることを心がけてみてください。

プラグインの機能レビューを受ける

苦労して(?)作成したプラグインが完成したら、いよいよ次はレビューです。
レビューといっても、いきなりプラグインのソースレビューを行うのではなく、作成したプラグインが実用的なものかを判断する機能レビューになります。
過去の経験から、登録までの流れの中でこのレビューが最も厳しいと感じます。
レビュワーによる機能の改善提案への対応も厳しい要因の一つですが、作成したプラグインに対して賛同を得る人を増やすのが何よりも難しいです。
ここは辛抱強く待つしかありません。Blenderの関連サイトに宣伝してもよいかもしれませんね。
例えば、Blender Artistsに投稿するのもありかもしれません。

レビューの申請は、developer.blender.org(通称D.B.O)から行います。
D.B.Oは会員制となっているため、ユーザ登録が必要ですので登録しましょう。
会員登録したら、右上のからManiphest Taskをクリックして新しいタスクを作成します。
新しいタスクを作成するためには以下の項目を入力していきます。

  • Title
    作成したプラグインの機能がはっきりと分かるようなタイトルをつけましょう。
  • Assigned To
    タスクを誰に割り当てるかを指定します。
    B.P.O内に知り合いがいる場合は、追加してみるのもよいでしょう。
    追加しなくても誰かしらレビューしてくれると思うので、何も追加しなくても良いです。
    ちなみに私自身もB.P.Oに登録しているので、タスクを割り当ててくれればレビューできるかもしれません。(ユーザ名:Nutti)
  • CC
    自分を追加しておけばよいでしょう。
  • Priority
    タスクの緊急度を設定します。基本はNormalで。
    早くレビューを済ませたい方は、Highにしておくと見てくれる可能性があがるかもしれません。
  • Projects
    プロジェクト名を指定します。
    プロジェクト名はプラグインの機能を連想させるものにすると良いです。
  • Type
    作成したプラグインを登録することを考えているため、今回のケースではPatchを選択します。
  • Description
    作成したプラグインの詳細を記載します。
    フォーマットは特に決まっていませんが、どうしたらよいか分からない人は、私のプラグインのタスクを参考にしてみてください。

タスクを作成したら、後は反応をひたすら待つのみです。
なお、レビュワーによる機能の改善提案への対応は積極的に行いましょう。
レビュワーの意見を聞くことで、この人はサポートもしっかりしてるし今後も期待できそうだと考え、作成したプラグインに対する支持者が増えてきます。
そして・・・レビュワーからBlender本体に対して登録したらどうですか、というコメントがもらえたら・・・おめでとうございます!Blenderへの登録はもうすぐそこです!

Wikiページの作成

機能レビューを通ったら、プラグインWikiページを作成しましょう。
プラグインWikiページはBlender Addons Catalogから参照することができます。
Wikiページに掲載する項目はほとんど決まっているので、他のプラグインWikiページを見ながら作成していくとよいでしょう。
参考になるか分かりませんが、私の作成したプラグインWikiページはここから参照できます。
なおWikiページのアカウントはB.P.Oとはアカウントが異なりますので、ユーザ登録していない場合は追加してください。

ソースコードレビュー

Wikiページを作成したら、プラグインソースコードをレビューしてもらいましょう。
機能のレビューと同様、ソースコードのレビューについてもdeveloper.blender.orgから申請を出します。
ソースコードレビューを受けるまでの流れを以下に示しますので、参考にしてみてください。
また、Wikiページにもコードレビューの仕方が載っているので、こちらも参考にしてみてください。

  1. 最新のBlenderリポジトリを取得
    プラグイン用のレポジトリを取得します。
    プラグインには以下の3種類がありますが、今回はContribとして登録します。

    最新のBlenderリポジトリを取得する方法を以下に示します。

    $ cd [作業用ディレクトリ]
    $ git clone git://git.blender.org/blender-addons-contrib.git
    

  2. 作成したプラグインを指定の場所に置く
    リポジトリ取得後、作成したプラグインリポジトリへ移動させます。

    $ cd blender-addons-contrib
    $ cp [作成したプラグイン] .
    

  3. 差分を取得
    リポジトリへ移動後ソースの差分を取得します。
    以下のコマンドを実行し、出力結果をコピーします。

    $ git diff
    

  4. レビューを依頼する
    https://developer.blender.org/の左側にあるDifferentialをクリックした後に表示される、Create Diffをクリックします。
    先ほどコピーした出力結果をRaw Diffにペーストし、一番下のCreate Diffのボタンをクリックします。

レポジトリへソースの取り込み

ソースコードレビューにて、指摘の反映が済んだらBlenderリポジトリに登録しましょう。
リポジトリへの登録の手順を説明します。

  1. リポジトリに対するcommit権の取得
    Blenderリポジトリへ登録(commit)するためは、リポジトリ管理者からcommitの権利を貰う必要があります。
    現在リポジトリの管理は@Ideasmanという方が行っているようです。
    IRCと呼ばれるチャットに入り、@Ideasmanにリポジトリのcommit権限を与えてもらうようにお願いしましょう。
    ・・・ちなみにチャットに入るときには、他の人の名前でログインしないよう気をつけましょう。
    私は最初使い方がわからず、話したい人の名前を入力するのかと思っていたので、Ideasmanという名前で入ってしまい色々と騒ぎになってしまいました。(私の無知さが面白かったから気にしないでなど、厳しいコメントはありませんでしたがさすがに焦りました。)
    英語でのチャットになりますが、Web調べながら言いたいことを伝えていけば良いのでなんとかなるでしょう。
    それでも・・・という方は、私に一報いただければ可能な限りサポートしたいと思います。
  2. リポジトリの取得
    commit権をもらったら、リポジトリを取得しましょう。
    リポジトリの取得については、Wikiページが参考になるでしょう。
    リポジトリの取得は、例えば以下のように行います。

    $ cd [作業用ディレクトリ]
    $ git clone git://git.blender.org/blender-addons-contrib.git
    $ cd blender-addons-contrib
    $ git submodule update --init --recursive
    $ git submodule foreach --recursive git checkout master
    $ git submodule foreach --recursive git pull --rebase origin master
    $ git pull --rebase
    $ git submodule foreach --recursive git pull --rebase origin master
    

  3. 著者・連絡先の設定
    リポジトリへcommitした時に、commitを行った人物や連絡先を設定します。
    この設定は一度行っておけば、2度目以降は実施する必要はありません。

    git config --global user.name "[名前(ニックネーム可)]"
    git config --global user.email "[連絡先メールアドレス]"
    

  4. commit権の設定
    リポジトリに対するcommit権の設定を行います。

    $ git remote set-url origin git@git.blender.org:blender-addons-contrib.git
    

  5. ssh鍵の登録
    以下のコマンドを実行し、ssh鍵を作成します。

    $ ssh-keygen
    

    作成したssh鍵の公開鍵は~/.ssh/id_rsa.pubに置かれているので、これをdeveloper.blender.orgに登録します。
    D.B.Oの右上の工具マークをクリックし、左メニューのSSH Public Keysをクリックします。
    そして、Upload Public Keyをクリックし、Public Keyにid_rsa.pub本文をコピー&ペーストして、Nameに適当な名前をつけてAdd Keyをクリックすることで、ssh鍵の登録が完了します。

  6. 登録するプラグインを配置
    登録したいプラグインを希望の場所に置きましょう。

    $ cd blender-addons-contrib
    $ cp [作成したプラグイン] .
    

  7. ローカルリポジトリへcommit
    Blender本体へリポジトリを登録する前に、ローカルのリポジトリへcommitします。

    $ git add [作成したプラグイン]
    $ git commit
    

    git commitを実行するとエディタが開きます。
    ここに登録した内容を記すことになりますが、記入する内容はフォーマットに従っておけばまず間違いないでしょう。

  8. リモートリポジトリ(Blender本体のリポジトリ)へpush
    いよいよ登録も最終段階です。プラグインBlender本体のリポジトリへ登録しましょう。
    登録は以下のように行います。

    $ git pull --rebase
    $ git push
    

おめでとうございます!
これであなたが作成したプラグインBlender本体へと取り込まれました。
次のBlenderのバージョンが公開された時から、Blender本体にあなたの作成したプラグインが入っていることになります。
作業はここで終わりですが、最後に作成したプラグインの宣伝&バグ修正などの報告のためのサポートページを作成しましょう。

サポートページの開設

作成したプラグインBlenderの本体として公開されますので、作成したプラグインのユーザも多くなると思います。
プラグインにバグがあった場合や新機能追加の要望など、ユーザが開発者に対してコンタクトの取れる場が必要になってきます。
そこで宣伝も含めて、あなたのプラグインのサポートページを作成してみましょう。
Blenderプラグインのサポートページとして最も有名なのは、Blender Artists Community(会員登録制:無料)ですね。
様々なプラグインの宣伝がReleased Scripts and Themesで行われています。
新たなスレッドを作成するため、POST NEW THREADから投稿してみましょう。
内容は好きに書いてもらって良いです。
操作手順の動画や画像を貼るのも良し、追加機能を募集するのも良し、バグ報告の場として利用するのも良しです。

なおサポートページですが、Blender Artists Community以外にもGitHubなどのOSSホスティングサービスも候補としては良いでしょう。

おわりに

作成したプラグインBlender本体として公開する方法を共有させていただきました。
公開まで非常に長い道のりですが、Blender本体へ登録される(=自分の作成したソフトウェアが評価される)ことによる達成感は非常に大きいです。
またBlender本体へ公開する過程で、機能レビュー・ソースレビューなどのソフトウェア開発工程を体験できるため、スキルアップとしてもよいのではないでしょうか。
そしてなにより、公開してプラグインを使ってもらい感想をもらえる(それも海外の人から)というのは作り手からすると大変うれしいものです。
良いアイデアが持っていたら、ぜひ公開することを検討してみましょう!!
長くなりましたが、お疲れ様でした!