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