[Blender] Blenderスクリプトのデバッグ環境（Eclipse+PyDev）を整える

Blenderスクリプトの規模が大きくなってくると、そろそろデバッガを使いたくなってきます。
これまでBlenderスクリプトを作る時はself.report一筋でしたので、そろそろ限界を感じてきていました。
そこで **Eclipse+PyDev** を使って、Blenderスクリプト開発のデバッグ環境を構築してみました。

# デバッグ環境構築

## Eclipseのダウンロード

Eclipseのホームページから、最新版のEclipseをダウンロードします。

[Eclipseダウンロードページ](https://www.eclipse.org/downloads/)

必要に応じてJava SEをインストールするように求められるかもしれませんが、その場合は指示に従ってインストールを行います。

※ PyDevは **Java SEのバージョンが6以下では動作しません** 。インストールされているJava SEのバージョンが6以下の場合は、以下のリンクからJavaの最新版を入手してください。
（参考：http://ameblo.jp/cubsuke/entry-11767899203.html）

[Java SEダウンロードページ](http://www.oracle.com/technetwork/java/javase/downloads/index.html)

## PyDevのインストール

**PyDev**を以下の手順従ってインストールします。

1. `Help` - `Install New Software...` をクリック
2. `Available Software` ウィンドウの `Add...` をクリック
3. `Name` に **PyDev** 、`Location` に **http://pydev.org/updates** を入力して `OK` をクリック
4. しばらく経つと、`Available Software` ウィンドウに `PyDev` が追加されるので選択した後、 `Contact all update sites during install to find required software` のチェックボックスを外し、 `Next >` をクリック  
※ 注意：`Contact all update sites during install to find required software`のチェックを外さないと、5.までに**長い時間がかかってしまいます**。  
（参考：[Stackoverflow](http://stackoverflow.com/questions/4179612/eclipse-very-slow-to-start-a-plugin-install)）
5. `Install Details` ウィンドウの `Next >` をクリック
6. `Review Licenses` ウィンドウでライセンスに同意した後、 `Finish` をクリック
7. PyDevがインストールされるので、インストール後に **Eclipseを再起動**

# デバッグ実行の準備

## デバッグ用プロジェクトの作成

デバッグ実行のためのプロジェクトを作成します。

### Eclipseプロジェクトの作成

1. `File` - `New` - `Project...` をクリック
2. `Select a wizard` ウィンドウから、 `PyDev` - `PyDev Project`を選択し、 `Next >` をクリック
3. `Project name` に適当な名前をつけた後、 `Next >` をクリック
4. `Finish` をクリック

### Blenderのパスを設定

1. `Project` - `Properties` クリック
2. 左のメニューから `PyDev - PYTHONPATH` を選択
3. `External Libraries` を選択
4. `Add source folder` を選択し、以下のパスを追加
 * (Blenderスクリプトのパス)/addons
 * (Blenderスクリプトのパス)/addons/modules
 * (Blenderスクリプトのパス)/modules
 * (Blenderスクリプトのパス)/startup
 * 必要に応じて個人用の作業ディレクトリ


## デバッグの為のソース修正

### デバッグサーバへ接続するソースの作成

PyDevデバッグサーバへ接続するためのソースを作成します。
作成したソースは、**デバッグするBlenderスクリプトと同じディレクトリ**に置いてください。

```py:debug.py
import sys

DEBUGGING = True

def start_debug():
    if DEBUGGING is True:
        PYDEV_SRC_DIR = "(eclipseディレクトリへのパス)/plugins/org.python.pydev_XXXXX/pysrc"    # 環境に応じて書き換えが必要
        if PYDEV_SRC_DIR not in sys.path:
            sys.path.append(PYDEV_SRC_DIR)
            import pydevd
            pydevd.settrace()
            print("started blender script debugging...")
```

### デバッグ対象のBlenderスクリプトの修正

デバッグを開始するために、デバッグ対象のスクリプトで **デバッグを開始する場所** に `start_debug()` を追加します。
例えば、スクリプト実行開始直後にデバッグを開始したい場合は以下のようにします。

```py:start_debug_at_main.py
from . import debug

if __name__ == "__main__":
    debug.startdebug()
```

## PyDevデバッグサーバの起動

### EclipseにBlenderを登録

Eclipseの外部ツールにBlenderを追加します。
追加の方法を以下に示します。

1. `Run` - `External Tools` - `External Tools Configurations...` をクリック
2. 左メニューから、`Program` をダブルクリック
3. `Main` タブを選択し、`Location` に**Blenderの実行ファイル**、`Working Directory` に **Blenderの実行ファイルが置かれたディレクトリ** を入力  
`Name` には自分の好きな名前を入力（ここでは、 **New_Configuration** とする）
4. `Apply` をクリック

### デバッグサーバの起動

PyDevデバッグサーバを起動します。
起動の手順を以下に示します。

1. `Window` - `Open Perspective` - `Other...` をクリック
2. `Debug` を選択し、Debugパースペクティブを開く
3. `Pydev` - `Start Debug Server` をクリックし、サーバを起動

## デバッグ実行

### Blenderの起動

以下の手順に従って、EclipseからBlenderを起動します。

1. `Run` - `External Tools` - **New_Configuration** をクリック
2. Blenderが起動

# デバッグの実行画面

ここまでの説明をもとに、Blenderのスクリプトを作成してデバッグしてみました。

![20150413.png](https://qiita-image-store.s3.amazonaws.com/0/38888/5dfa6c17-5e40-21e9-44fd-24dbbb6e9104.png)

このような感じで、デバッグを開始した時点でEclipseを用いてデバッグを進めることが出来ます。

# 最後に

いつかはやろうと思っていたBlenderとデバッガとの連携ですが、特にハマるところ無く無事に連携できました。
デバッガを使うことで **self.reportデバッグに比べて開発効率が格段に向上する**ので、ぜひ利用してみてはいかがでしょうか。

# 参考情報
* http://python.keicode.com/devenv/install-pydev.php
* http://wiki.blender.org/index.php/Dev:Doc/Tools/Debugging/Python_Eclipse
* http://truefalsedev.blogspot.jp/2013/02/blender.html