GrasshopperでPython開発に外部エディターを使う方法

# はじめに
GrasshopperでPythonスクリプトを書くとき、一般的にはGrasshopper標準のエディターを使いますが、
外部エディタを使うことでコードを書くのが飛躍的に効率的になります。<br>今回はVS Codeを例に説明します。

**外部エディタを使うメリット**

- Rhino/GH以外のライブラリのコード補完ができる
- コードが見やすくなる
- 別ファイルのインポートなどが管理しやすい
- コードだけ見たいときにRhinoを開かなくていい
- かっこいいエディタを使うとテンションがあがる

# 環境
- Windows10
- Rhino6
- VS Code

# VS Codeでやること
Pythonのコードが書けさえすれば何でもよいのですが、より快適に書くために下記手順で環境を整えます。
### VS CodeのPython拡張機能をインストール
[こちら](https://marketplace.visualstudio.com/items?itemName=ms-python.python)からインストールできます。
### Python2.7環境を構築する<br>
[anaconda](https://www.anaconda.com/products/individual)などを使って仮想環境を準備するのがおすすめです。  
Pythonの環境構築については、たくさんの方がわかりやすく解説されているので割愛します。<br>
[こちらの記事](https://qiita.com/manamana/items/38e963ce04f24de4bbe4)が比較的新しくておすすめです。<br>
**<font color="Red">注意点</font>**
Rhinoで動くIronPythonはpython2系なので、<font color="Red">Python2</font>で環境を構築することをお勧めします。
###Rhino/Grasshopperのコード補完ライブラリをインストール<br>
stubsを入れることでRhino、Grasshopperのコード補完が効くようになります。<br>
[こちら](https://github.com/mcneel/pythonstubs)を参考に`Rhino-stubs`と`Grasshopper-stubs`をpython環境にインストールしてください<br>

```bash
pip install Rhino-stubs
pip install Grasshopper-stubs
```
（「python2.7はサポートが終了しています」的なアラートが出ますが気にしないでください。）

### 構築したpython2.7をインタプリターとしてVS Codeで指定する
画面左下にあるPython～をクリックすると画面上部にインタプリタを選択するところが出てくるので今回作ったPython環境を選択してください。


# Grasshopperでやること
### Read Fileの設定
- ```Read File```というコンポーネントを置く<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263714/931c84d6-b6aa-c807-ca41-670ccbed4685.png)
- コンポーネント名を右クリックして```Per Line```のチェックを外す<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263714/898ea126-fa0c-a526-90b8-84edd0767827.png)
- 「F」を右クリックして```Syncronise```をチェックする<br>
このチェックをすることで外部エディタで更新したコードがGrasshopperで反映されるようになります。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263714/d37da332-6ab0-278f-d94a-43b374fe43a8.png)

### Pythonファイルを読み込む
- 「F」を右クリック→```Select one existing file```を選択し、読み込むPythonファイルを選択<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263714/8e4b06a0-52cd-4644-0049-b82aaaa17faa.png)


### Pythonコンポーネントの設定
- Pythonコンポーネントを配置
- コンポーネント名を右クリック→```Show "code" input parameter```をクリック<br>
インプットのトップに```code```というパラメータが出てきます。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263714/3416b568-b7c0-69d4-ed2c-b1f7849d3e18.png)
- ```Read File```の「C」をPythonコンポーネントの```code```につなぐ<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263714/9840124e-ed0f-ba70-6554-957d56b14e3c.png)
- これでPythonファイルをリンクさせることができました！<br>
あとはVS Codeでコードを書きGrasshopperで結果を確認してください。

# 注意点
### コードの変更は必ず外部エディタで行う
Grasshopperのエディタでコードを変更してエディタを閉じようとすると下記のメッセージがでてリンクが解除されてしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263714/6990a5d5-cfb4-c135-1c23-b044b91e8d98.png)

### Grasshopperの入力パラメータ名は外部エディタでは認識されない
例えばこのように```x```と```y```をGrasshopperで入力していても
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263714/723c0270-d200-a27b-bf31-eac32d95cf07.png)
Pythonコード内で定義されているわけではないので、VS Code上では```Undifined variable```というエラーが出てきます。<br>
VS Code上でコード単体でテストしたい場合は変数を初期化しておく必要がありますが、Grasshopper上で実行するだけであれば問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263714/1ca1aca1-b167-7cb1-357b-8fd4774f7b20.png)

# さいごに
Grasshopper上のPythonコードを外部エディタで書く方法をご紹介しました。単体のPythonファイルだけならこの方法で十分なのですが、別ファイルのモジュールや設定ファイルを使って本格的に開発をしようとするとGrasshopperならではの問題がでてきます。それについてはまた別の記事で解説いたします。

# 参考

http://www.hagiri.org/how-to/249