皆さんはどのような環境でDynamo, Pythonを開発されていますか。
良いコードを作るには、良い環境が必要です。たぶん。
SBOでは、DynamoベースでPycharmを活用した環境で開発をしています。ここでは、その内容と構築方法を紹介します。
Python Scriptノード
まずは、Revit標準の開発環境について
Revitをインストールすると、Dynamoも使えるようになります。DynamoでPythonコードを記述する際は、Python Scriptノードを使用します。
ほとんどのユーザがこの環境からスタートすると思いますが、使い勝手は悪いと思います。
使い勝手が悪い例を2点挙げます。
- 1点目:Pythonエディタとしての性能が悪い
-
コードの整形やリファクタリングなどPython Scriptノードではできないことがとても多いです。Python用のテキストエディタを使うと、その違いをすぐに実感できます。
- 2点目:関数等の使いまわしが難しい
-
Python Scriptノードでは、作成した関数等を使いまわすことが難しいと思います。カスタムノードの機能を活用すればそれなりのことができるかもしれませんが、利便性は劣ります。
いずれPythonに慣れてきて、ノードを使用するよりもテキストコードの記述が多くなってくると、Python Scriptノードでのコーディングは非効率になってくると思います。

SBOの開発環境
ここからは、SBOの開発環境を紹介します。
Dynamoベースで開発しつつほぼPythonでコーディングする、という特殊な環境です。
エディタ・IDE
PythonエディタとしてPycharmを使用しています。正確にはエディタではなくIDEですね。
これを選んだ理由は、特にありません・・・。世間では、VS Codeが人気のようです。Dynamo Forumでもそのようですが、私はPycharmしか使ったことがありません。かなり気に入っているため、しばらく使い続けるつもりです。
以降は、PycharmをDynamoで活用するためのノウハウを紹介します。
全体構成
全体構成を示します。

実行用ファイルやモジュールは、Python形式のファイルです(拡張子が.py)。これらはすべてPycharmで作成します。
実行用ファイルは、Dynamoから直接アクセスする唯一のファイルです。Excel等の関連データとのやり取りは、実行用ファイルのみに記述します。
実行用ファイルは、ツールごとに作成します。一方、自作パッケージは、様々なツールで共有します。モジュール(自作の関数等)を容易に共有できることがこの開発環境のメリットの一つです。
エディタ使用時のDynamoグラフ
エディタを使う場合に使用するノードを紹介します。
ツールで実行したい処理はエディタでコーディングするため、ノードはほぼ使用しません。エディタでPython形式(.py)のファイルを作成し、Dynamoでそれを読み込んで実行する、という形になります。
グラフは下図のようになり、どのようなツールでもほぼ同じ構成になります。

各ノードの説明
- File Pathノード
-
実行用ファイルの場所を指定します。
- File From Pathノード
-
パスをファイルに変換します。
- FileSystem.ReadTextノード
-
ファイルを読み込んでテキストを出力します。
- Python Script From Stringノード
-
入力されたテキストをPython Scriptとして認識し、実行します。
- IN[x]につながっているノード
-
Pythonを実行する際に入出力が必要であれば、例のようにIN[x]につなげます。必要によりノード数を増減します。
- Watchノード
-
Dynamoプレーヤで実行結果を表示したい場合に使用します。
Pythonプロジェクトのディレクトリ構成
ディレクトリ構成も紹介しておきます。
”Python ディレクトリ構成”で検索すると様々な記事がでてきます。そして、どれも微妙に異なります。結局は、どんな開発をしたいかで変わるということのようです。
まだまだ勉強中ですが、現時点では以下の構成としています。
基本形と元ネタ
プロジェクト構成は、以下を基本とします。元ネタのリンク先も示します。
packaging_tutorial/ # プロジェクト名(pipで指定)
├── LICENSE
├── pyproject.toml
├── README.md
├── src/
│ └── example_package_YOUR_USERNAME_HERE/ # パッケージ名(importで指定)
│ ├── __init__.py
│ └── example.py
└── tests/
PyPAのPython Packaging User Guideです
Licenseやpyproject.toml等はひとまず放置します(パッケージングするものができたら準備します)。ここで重要なのは、次の2点です。
- 1点目:srcディレクトリを設ける
-
通称srcレイアウトと呼ぶそうです。srcディレクトリを置かないフラットレイアウト派もあるようです。正直どちらでも良いのですが、srcレイアウトを採用します。
- 2点目:パッケージ名に自分の名前を入れる
-
リンク先のガイドでは、名前の衝突を避けるために自分の名前を入れることが推奨されています。GitHubからインストールする際に有効らしいです。だだし、プロジェクト名とパッケージ名を一致させることを推奨する記事もあります(むしろこちらが多数派のようです)。
SBO式のPythonプロジェクト構成
まだ試行錯誤中なので、あくまで現時点の方針です。
親パッケージ名は、relib_sboとします(Revit用のlibraryの意)。この直下に、cmn(共通用)やroad/rail等(それぞれの分野専用)のパッケージフォルダを作ります。
Dynamoで読み取るための実行用ディレクトリ名は、dynamo_exeとします。これの場所は、パッケージ配下ではなく、プロジェクトの直下とします。
プロジェクトの構成
- プロジェクト:pipで指定
- Dynamo用ディレクトリ:Dynamoで指定する実行用ファイルを格納するディレクトリ
- srcディレクトリ:ソースコードを格納するディレクトリ
- 親パッケージ:importで指定(全体構成図でいう自作パッケージ)
- 子パッケージ:cmn(共通用)やroad/rail(各専門分野用)を用意する
- family.py等:関数やクラスを記述するPythonファイル(モジュール)

ディレクトリやパッケージの作成方法
- プロジェクトで右クリック
- 新規をクリック
- 作成したいものをクリック

Pycharmのインストール&日本語化の手順
この環境に興味を持たれた方は、ぜひ試してみてください。インストール方法等を紹介します。
(1)https://www.jetbrains.com/ja-jp/pycharm/にアクセスし、ダウンロードボタンを押します。

(2)ページが変わったら、Pycharm Community Editionをダウンロードします。こちらは無料です。Professionalは有料です。

ダウンロードしたexeファイルを実行します。
初期設定のままインストールで良いと思います。



簡単に日本語化ができます。
(1)Pluginsを選択
(2)検索窓にjapaneseと入力
(3)日本語言語パックのInstallボタンを押す
(4)インストール後、Pycharmを再起動

オートコンプリート
エディタ使用時の最大の欠点は、初期設定のままではオートコンプリートが効かないことかもしれません。この回避策を紹介します。参考にした元ネタのリンクです。こちらは、VS Codeでの方法が示されているようです(試したことはありません)。
https://forum.dynamobim.com/t/add-dll-reference-to-get-the-intellisense/12829
Dynamo Forumです。
既にプロジェクトを作成済みであれば、飛ばしてください。
(1)新しいプロジェクトをクリック

(2)プロジェクトの名前を入力
(3)プロジェクトの場所を選択
(4)Pythonバージョンを選択
Revit2024はPython3.9のため、Pycharmでも3.9をインストールしました。一致させる必要はありません。
(5)作成をクリック

(6)参考—RevitのPythonバージョン確認方法—
Python ScriptノードでOUT = sys.version
と入力し、実行すると表示されます。

Pycharmの操作です。
(1)メニューを選択

(2)VCSを選択
(3)バージョン管理から取得をクリック

(4)STEP2で取得したURLを張り付け
(5)stubsを保存する場所を指定
(6)Gitがインストールされていない場合は、ここでインストール
(7)クローンをクリック

(8)新しいプロジェクトが立ち上がります

引き続きPycharmの操作です。
(1)メニューを選択

(2)設定をクリック

(3)プロジェクト内のPythonインタープリターをクリック
(4)枠をクリック
(5)すべて表示をクリック

(6)ステップ1でインストールしたPythonを選択(アイコンにvがついていない方です)
(7)ツリーのようなアイコンをクリック
(8)+をクリック
(9)STEP3で作成したクローンのstubsフォルダを選択
(10)何回かOKボタンを押して終わり

これでPycharmでもオートコンプリートが効くようになります。

最後に
以上で開発環境の紹介は終わりです。今後紹介する解説記事は、この環境を前提として話をします。
初めてPycharmに触れたときは感動しました。VS Codeもそうなのかもしれませんが、最近のエディタってすごいですね。非効率な記述をしていると指摘をくれたりします。将来的には、GitHub Copilotを試してみたいと思っています。
ディレクトリ構成は、現在進行形で試行錯誤中です。これまでは深く考えずに作っていました。もっと良い方法が見つかったら報告します!
コメント(承認後に表示されます。メールアドレスは表示されません)