[Blender] テキストエディタでBlenderのPython APIを補完する

[Blender Advent Calendar 2019](https://qiita.com/advent-calendar/2019/blender) の23日目の記事です。

Blenderのスクリプトやアドオンを作るとき、テキストエディタを使ってソースコードを編集することが多いと思います。
テキストエディタを利用するメリットの1つとして、コード補完機能による開発の効率化がありますが、Blenderが提供するPython APIの一部はPythonのソースコードではなく、バイナリデータとして提供されるため、そのままではコードを補完できません。
このような問題を解決するため、Blenderが提供するPython APIのインタフェース部分のみを記述した疑似モジュール「[fake-bpy-module](https://github.com/nutti/fake-bpy-module)」を開発しました。

「fake-bpy-module」を利用することで、基本的にコード補完機能を持つすべてのエディタで、BlenderのPython APIに関してコード補完できます。
本記事では、「fake-bpy-module」を使って、Visual Studio CodeとPyCharm上でコード補完する方法を紹介します。

# 前提条件

本記事で対象とするBlenderのバージョンは **2.80** とします。
「fake-bpy-module」がサポートするバージョンは、GitHubの [README](https://github.com/nutti/fake-bpy-module#supported-blender-version) を参考にしてください。
「fake-bpy-module」は、Windows/Mac/Linuxのいずれの環境でも動作しますが、Type Hint機能が導入された **Python 3.6** 以上のPythonでなければ、補完機能が利用できないことに注意してください。

将来的には、Blender 2.81以降のバージョンに対応したモジュールを提供予定です。

# 「fake-bpy-module」の提供形態

「fake-bpy-module」は、以下の3つの方式で提供しています。

1. PyPIパッケージ
2. GitHubで公開中のモジュール
3. モジュールの自作

本記事ではそれぞれについて、具体的なコード補完の手順を説明します。


# 方法1：PyPIパッケージ

## 1. pipコマンドを用いてパッケージをインストール

pipコマンドを利用することで、PyPIに登録されている「fake-bpy-module」をインストールできます。
次に示すコマンドを実行して、「fake-bpy-module」をインストールしてください。

```sh
 $ pip install fake-bpy-module-<version>
```

ここで `<version>` には、Blenderのバージョンを指定します。
Blender 2.8に対応する「fake-bpy-module」をインストール場合は、次のコマンドを実行します。

```sh
 $ pip install fake-bpy-module-2.80
```

pipを利用できる環境であれば、pipを利用して「fake-bpy-module」をインストールするのが簡単で確実ですが、pipを利用できない環境の場合は、別の方法を試みてください。


## 2. エディタでコード補完を確認する

pipコマンドを用いてパッケージをインストールした場合、コード補完するための各エディタの設定は不要です。
Visual Studio CodeとPyCharmそれぞれについて、コード補完の例を示します。

### Visual Studio Code

![vscode_completion.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38888/d5c3c58e-8473-a38b-08d7-cfff624122af.png)


### PyCharm

![pycharm_completion.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38888/2ea50b5d-6280-b652-1643-239b87b59a06.png)



# 方法2：GitHubで公開中のモジュール

## 1. GitHubからモジュールをダウンロードする

「fake-bpy-module」は、[GitHubでも公開](https://github.com/nutti/fake-bpy-module/releases) しています。
モジュール一式をまとめたファイルは、`fake_bpy_modules_<Blenderのバージョン>-<モジュールを作成した年月日>.zip` として公開しているため、環境にあわせて必要なモジュールをダウンロードします。
ここでは、[2019/10/8に作成したBlender 2.80向けのモジュール](https://github.com/nutti/fake-bpy-module/releases/tag/20191008) である `fake_bpy_modules_2.80-20191008.zip` をダウンロードします。
ダウンロードが完了したら、ファイルを解凍します。


## 2. エディタにモジュールのパスを伝える

エディタにモジュールのパスを伝え、コード補完できるようにします。
モジュールのパスを伝える方法は、エディタによって異なります。

### Visual Studio Code

Visual Studio Codeでコード補完するためには、次の手順に従います。


1. Pythonの [Visual Studio Code Extention](https://marketplace.visualstudio.com/items?itemName=ms-python.python) をダウンロードします
2. *[File]* > *[Preferences]* > *[Settings]* をクリックします
3. `settings.json` が開いたら、`python.autoComplete.extraPaths` にモジュールのパスを設定します

```json
{
    "python.autoComplete.extraPaths": [
        "<path-to-generated-modules>"
    ]
}
```

`<path-to-generated-modules>` には、モジュールの絶対パスを指定してください。


### PyCharm

PyCharmでコード補完するためには、次の手順に従います。


1. Windowsの場合は *[File]* > *[Settings]* をクリックして *[Settings]* ウィンドウを、macOSの場合は *[Pycharm Menu]* > *[Preferences]* をクリックして *[Preferences]* ウィンドウを開きます
2. *[Project:]* > *[Project Interpreter]* を選択します
3. *[Project Interpreter:]* の右隣にあるギアのアイコンをクリックします
4. 表示されたポップアップメニューから *[Show All...]* をクリックします
5. *[Project Interpreters]* ウィンドウにおいて、*[Show paths for the selected Interpreter]* のアイコンをクリックし、*[Interpreter Paths]* ウィンドウを表示します
6. *[+]* アイコンをクリックすると、ファイルブラウザが立ちあがります
7. モジュールが配置されたディレクトリを指定し、*[OK]* をクリックします
8. Windowsの場合は *[Settings]* ウィンドウ、macOSの場合は *[Preferences]* ウィンドウが閉じるまで、*[OK]* を複数回クリックします


## 3. エディタでコード補完を確認する

方法1の方式でモジュールをインストールした場合と同様、それぞれのエディタでコード補完できるようになります。


# 方法3：モジュールの自作

## 1. Blenderのバイナリをダウンロードする

[公式のBlenderのダウンロードサイト](https://download.blender.org/release/) から、対象となるBlenderのバイナリをダウンロードします。
Blender 2.80のバイナリは、https://download.blender.org/release/Blender2.80/ で公開されています。

## 2. Blenderのソースコードをcloneする

次に示すコマンドを実行し、Blenderのソースコードをダウンロードします。

```sh
$ git clone git://git.blender.org/blender.git
```

## 3. GitHubのfake-bpy-moduleプロジェクトをcloneする

次に示すコマンドを実行し、GitHubに公開されているfake-bpy-moduleプロジェクトをcloneします。

```sh
$ git clone https://github.com/nutti/fake-bpy-module.git
```

## 4. 「fake-bpy-module」を生成する

次に示すコマンドを実行し、「fake-bpy-module」を生成します。

```sh
$ cd fake-bpy-module/src
$ sh gen_module.sh <source-dir> <blender-dir> <branch/tag/commit> <output-dir> <mod-version>
```

* `<source-dir>` ：Blenderのソースコードのルートディレクトリ
* `<blender-dir>` ：Blenderのバイナリが配置されたディレクトリ
* `<branch/tag/commit>` ：生成するモジュールに対応する、Blenderのソースコードのブランチ
* `<output-dir>` ：モジュールの生成先ディレクトリ
* `<mod_version>` ：指定したバージョンについて、`mods` ディレクトリに配置したパッチを使ってAPIを修正する

仮に2から連続してコマンドを実行してきた場合は、次のようにコマンドを実行します。

```sh
$ cd fake-bpy-module/src
$ sh gen_module.sh ../../blender <1でダウンロードしたBlenderのバイナリが配置されたディレクトリ> v2.80 out 2.80
```

## 5. エディタにモジュールのパスを伝える

方法2の方式に従い、モジュールのパスをエディタに伝えます。


## 6. エディタでコード補完を確認する

方法1や方法2の方式と同様、それぞれのエディタでコード補完できるようになります。


# まとめ

「fake-bpy-module」を使って、BlenderのPython APIを、Visual Studio CodeとPyCharm上でコード補完する方法を紹介しました。
コード補完を利用することで、Blenderのスクリプトやアドオン開発の効率がよくなるため、ぜひ活用してみてください。
本記事では紹介していませんが、PyPIパッケージを利用しない場合でも、Visual Studio CodeやPyCharmに限らず、すべてのエディタでコード補完するための方法を、GitHubのプロジェクトページにて [ドキュメント](https://github.com/nutti/fake-bpy-module/blob/master/docs/setup_all_text_editor.md) を公開しています。
こちらもぜひ参考にしてみてください。

なお、「fake-bpy-module」はOSSとして公開していますので、[バグ報告](https://github.com/nutti/fake-bpy-module/issues) や [プルリク](https://github.com/nutti/fake-bpy-module/pulls) などのContributionは大歓迎です！
それでは、ぜひ楽しいBlenderのアドオン開発ライフを！