タイトル: Dynamo入門
SEOタイトル: Dynamo入門|Revitビジュアルプログラミング・ノードとワイヤ・Pythonノード・Dynamo Player
| この記事の要点 |
|
Dynamo は Revit に同梱されるビジュアルプログラミング環境です。プログラミング未経験の設計者でも、ノードを繋ぐだけで反復作業を自動化できます。本記事ではその考え方と、Revit API への橋渡しを解説します。
ビジュアルプログラミングの考え方
Dynamo は「データフロー型」のプログラミングです。処理の単位である「ノード」を、データの流れを表す「ワイヤ」で繋ぎ、左から右へ値を加工していきます。テキストでコードを書く代わりに、画面上で部品を配線していく感覚です。
たとえば「すべての壁を取得」ノードの出力を「パラメータ値を取得」ノードの入力に繋ぐと、全壁のパラメータ値が一覧で得られます。プログラミングの基本概念(変数・関数・繰り返し)を、視覚的に学べる教材としても優れています。
ノードとワイヤ
- ノード: 1つの処理を表すブロック。入力ポート(左)と出力ポート(右)を持つ。「Element.GetParameterValueByName」のように、Revit 要素を操作する専用ノードが多数用意されている。
- ワイヤ: ノードの出力ポートと別ノードの入力ポートを繋ぐ配線。データの流れを表す。
- リスト: Dynamo は値の集合(リスト)を一括で扱うのが得意。1本のワイヤに複数要素が流れ、各ノードがそれらをまとめて処理する。
リストの階層(ネスト)の扱いと「レーシング(最長/最短/外積)」の理解が、Dynamo を使いこなす最初の壁です。
Revit要素の一括処理
Dynamo の最大の利点は、多数の Revit 要素を一度に処理できる点です。代表的な用途を挙げます。
- 全部屋の面積を集計してパラメータに書き戻す。
- 図面枠のタイトルブロックに、図面番号を連番で一括入力する。
- 外部 Excel から読み込んだ仕様値を、対応するファミリインスタンスへ一括反映する。
- 勾配・座標などの計算結果に基づき、要素を自動配置する。
手作業では時間がかかる定型処理を、グラフ1本で再現可能にできるのが強みです。
Pythonノードと API への橋渡し
標準ノードだけでは表現しにくい複雑な条件分岐やループは、「Python ノード」にスクリプトを書いて補えます。Python ノードの内部からは Revit API(RevitServices や Autodesk.Revit.DB)を直接呼び出せるため、Dynamo は本格的な開発への入り口にもなります。
「Dynamo でできることの限界」に達したとき、次のステップが Revit API による C# アドイン開発です。ノードで概念を掴んでから API に進むと、要素取得やトランザクションといった考え方がスムーズに理解できます。詳しくは Revit API概要 を参照してください。
Dynamo Player による実行
完成したグラフ(.dyn)は「Dynamo Player」から実行できます。Player は Revit のリボンから起動でき、グラフエディタを開かずに一覧から選んでワンクリックで走らせられます。入力値(対象ビューや数値)を Player 上で指定できるよう設計しておけば、作者以外のメンバーも安全に自動化を使えます。社内で再利用するツールは Player 前提で作るのが定石です。
パッケージとノードライブラリ
Dynamo には標準ノードのほかに、コミュニティが公開する「パッケージ」をインストールして機能を拡張できる仕組みがあります。代表的なものに、要素操作を大幅に補強する汎用パッケージや、データ加工・形状処理に特化したものがあります。パッケージマネージャから検索してインストールすると、専用ノードがライブラリに追加されます。
ただし、パッケージはバージョンや Revit の世代に依存することがあり、共有グラフが他PCで動かない原因になりがちです。社内で配布するグラフは、依存パッケージとそのバージョンを明記し、できれば標準ノード中心で組むと保守が楽になります。
つまずきやすいポイント
Dynamo を学び始めた人が陥りやすい点を押さえておくと、習得が早まります。
- リストの階層: データがリストの中のリスト(ネスト)になると、ノードがどの階層に作用するかで結果が変わる。階層を意識し、必要に応じて「Flatten」や「List.Map」で整える。
- レーシング: 2本の入力リストを組み合わせる際の対応規則(最短/最長/外積)を理解しないと、件数が想定外になる。
- 変更はトランザクション扱い: Dynamo が Revit モデルを変更する処理は、内部的にトランザクションとして実行され Undo の対象になる。意図しない一括変更を流すと大量の要素が一度に書き換わるため、対象を限定してから実行する。
- 実行前のバックアップ: 破壊的な処理を流す前は、モデルを保存しておくと安全。
Dynamo は「コードを書かずに自動化を体験できる」入口であると同時に、Revit API のデータモデル(要素・パラメータ・トランザクション)を視覚的に学ぶ場でもあります。ここで掴んだ感覚は、そのまま C# によるアドイン開発へ活きます。