8.

Speckle .NET SDK入門|NuGet導入・認証・Base作成・send/receiveとRevitアドイン連携

編集
Speckle · 08

.NET SDK 入門

Revit のような .NET 製アプリのアドインから Speckle を扱うときに中心となるのが .NET SDK です。NuGet での導入から、認証・Base 作成・send / receive までを、概念を押さえながら整理します。

この記事の要点

  • Speckle の .NET SDK は NuGet で配布され、近年 Speckle.Sdk へ再編された(旧 Speckle.Core 系)
  • C# から認証・データの作成(Base)・send / receive をプログラムで扱える
  • Revit / Rhino など .NET ベースのホストアプリ向けアドイン開発と相性がよい
  • 新世代の用語は Project / Model / Version、旧 v2 は Stream / Branch / Commit に対応する

本記事は Speckle カテゴリの一部として、Speckle の .NET SDK を C# 開発者向けに整理します。Revit のような .NET 製アプリのアドインから Speckle を扱う場面で中心になる SDK です。ホスト側の API と組み合わせる場合は Revit API概要 もあわせて参照してください。

1.NET SDK とは・パッケージの再編

Speckle の .NET SDK は、Speckle サーバーやローカルのデータ転送層を C# / .NET から操作するためのライブラリ群です。NuGet パッケージとして配布され、コンソールアプリ・サービス・各種 CAD/BIM アドインに組み込めます。

歴史的には Speckle.CoreSpeckle.Objects といったパッケージ構成でしたが、近年は Speckle.Sdk を中心とした構成へ再編されています。名前空間やクラスの配置が版によって異なるため、サンプルコードを写す際は「どの世代の SDK か」を必ず確認してください。本記事のコードは概念を示すものであり、実際の型名・メソッド名は利用するバージョンの公式ドキュメントに合わせる必要があります。

新世代
Speckle.Sdk 中心。用語は Project / Model / Version
旧 v2 系
Speckle.Core 中心。用語は Stream / Branch / Commit

2導入(NuGet)

.NET プロジェクトに NuGet 経由で追加します。新世代では概ね次のようなパッケージを参照します(パッケージ名は版で変わり得ます)。

dotnet add package Speckle.Sdk
dotnet add package Speckle.Objects

対象フレームワークは、組み込み先のホストアプリに合わせます。Revit アドインであれば、その Revit バージョンが要求する .NET ランタイム(.NET Framework または .NET 8 系など、年次で異なる)に一致させる必要があります。ランタイム不一致は読み込み失敗の典型原因です。

3認証(アカウント・トークン)

Speckle サーバーへアクセスするには認証情報が必要です。多くの場合、デスクトップの Speckle Manager / Connector で追加済みのローカルアカウントを SDK から取得して使うか、Personal Access Token を明示的に渡します。概念的なコードは次のようになります。

// 既定アカウントの取得(概念例・型名は版に依存)
var account = AccountManager.GetDefaultAccount();

// もしくはトークンとサーバー URL を明示
// var account = new Account { token = "xxxxx", serverInfo = ... };
トークンの取り扱い
トークンはソースコードに直書きせず、環境変数・設定ファイル・シークレットストアから読み込む。権限(読み取り専用か書き込み可か)も用途に応じて最小限に絞る。

4Base オブジェクトの作成

Speckle のデータはすべて Base を基底とするオブジェクトで表現されます。任意のプロパティを動的に持たせられ、これがツール間でデータをやり取りする共通の器になります。データモデルの詳細は オブジェクトモデル を参照してください。

// 動的プロパティを持つ汎用オブジェクト
var obj = new Base();
obj["name"] = "Wall-01";
obj["height"] = 3000.0;            // 単位は呼び出し側の取り決めに従う
obj["category"] = "Walls";

// 子要素を入れ子にできる
var child = new Base();
child["type"] = "Opening";
obj["@elements"] = new List<Base> { child };

@ で始まるプロパティは「分離して保存される(detach)」という Speckle の慣習を表し、大きな構造を効率よく保存・参照するために使われます。

5send / receive の基本

作成した Base をサーバーへ送る(send)と、その状態を指す Version(旧 Commit)が作られます。逆に受け取る(receive)と、指定した Version のオブジェクトツリーが復元されます。send / receive の概念は send/receive で詳しく扱います。

1Base 作成
2シリアライズ
3Send
4Version 作成
// 送信(概念例)
// 1) ローカルにシリアライズして保存
// 2) サーバーへ転送し Version を作成
var objectId = await Operations.Send(obj, transport);
// その後、Project(旧Stream) / Model(旧Branch) に対して Version を作成する API を呼ぶ

// 受信(概念例)
var received = await Operations.Receive(objectId, transport);

新世代の API では、転送(オブジェクトの保存・取得)と「プロジェクトへの Version 登録」は分けて扱われる傾向があります。ここでも具体的なメソッド名・引数は版に依存するため、利用バージョンの公式サンプルで確認してください。

6Revit アドインからの利用

Revit は .NET 上で動作するため、アドイン内から Speckle .NET SDK を直接呼び出せます。Revit 側 API の基礎は Revit API概要 を参照してください。典型的な流れは次のとおりです。

送る側(Revit → Speckle)
  • Revit API で要素(壁・床など)の形状・パラメータを取得する
  • 取得した情報を Base(または Speckle.Objects の型)へ変換する
  • SDK で send し、Project / Model に Version を作成する
受け取る側(Speckle → Revit)
  • 受信側で receive した Base をホスト側のジオメトリへ戻す
  • 属性をホスト要素のパラメータへ書き戻す
  • 長時間の処理は UI スレッドをブロックしない設計にする

この「ホスト要素 ⇄ Base への双方向変換」を担うのが各コネクタの中心ロジックです。コネクタの考え方は コネクタ、Revit 連携の具体は Revit⇄Speckle で扱います。アドイン内では Revit の API 呼び出しが UI スレッド制約を持つ点に注意し、長時間の send / receive はトランザクションや実行コンテキストの扱いに気をつけてください。

つまずきやすい点

  • パッケージ名・名前空間の世代差Speckle.Core 時代のサンプルがそのまま動かないことがある
  • .NET ランタイムの不一致:ホストアプリの要求バージョンに合わせる
  • 単位・座標系Base は単位を強制しないため、送受信側で取り決めが必要
  • 非同期処理:send / receive は async で、UI スレッドをブロックしない設計にする

Python から扱いたい場合は specklepy が選択肢になります。.NET SDK はホストアプリ組み込み、specklepy はデータ処理・自動化、と役割で使い分けると整理しやすいでしょう。

Revit アドインC# / .NET Speckle .NET SDK Speckle.Sdk(旧 Speckle.Core・NuGet) Account / トークン認証 operations.send / receive ServerTransport Speckle Server
図: Speckle .NET SDK — C#/.NET(Revit アドイン等)から Account 認証・operations・ServerTransport を通じて Speckle Server とデータを送受信する。Python の specklepy と同じ役割を .NET で担う。

次に読む

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Speckleとは
  2. アーキテクチャ(Server/Project/Model/Version)
  3. Speckleオブジェクトモデル
  4. コネクタ
  5. send/receive の基本ワークフロー
  6. Revit ⇄ Speckle の往復ワークフロー
  7. specklepy(Python SDK)入門
  8. .NET SDK 入門
  9. Speckle Automate
  10. Speckle Viewer・埋め込み
  11. 自前ホスティング(Docker)
  12. Speckle と IFC の違い・使い分け
  13. データ連携の実務パターン

最近更新/作成されたページ