notes
Tools

Onshape FeatureScript の基本と落とし穴

カスタムフィーチャーの最小構成、map literal のキー引用符、test 環境での id の扱い

要点#

FeatureScript の map literal はキーを引用符で囲む必要がある。省略すると構文エラーになり、エラーメッセージから原因が分かりにくい。

数字 / コマンド#

カスタムフィーチャーの最小構成 (library version 3044、2026-08-25 時点):

FeatureScript 3044;
import(path : "onshape/std/common.fs", version : "3044.0");

annotation { "Feature Type Name" : "MyFeature" }
export const myFeature = defineFeature(function(context is Context, id is Id, definition is map)
    precondition
    {
        annotation { "Name" : "Length" }
        isLength(definition.length, { (millimeter) : [1, 10, 200] } as LengthBoundSpec);
    }
    {
        fCylinder(context, id + "body", {
            "topCenter" : vector(0 * millimeter, 0 * millimeter, definition.length),
            "bottomCenter" : vector(0, 0, 0) * millimeter,
            "radius" : 3.5 * millimeter
        });
    }, {
        "length" : 10 * millimeter    // defaults map。キーは引用符必須
    });
  • version header と import の version は一致させる。既存 Feature Studio を編集する時は既存の値を維持する
  • LengthBoundSpec は { (単位) : [最小, 既定, 最大] }
  • defaults map (defineFeature の第 2 引数) を省略すると、パラメータ未指定の評価で "Precondition failed" になる

落とし穴#

  1. map のキーは引用符必須。{ length : 10 * millimeter } は構文エラー。{ "length" : 10 * millimeter } と書く。JavaScript の感覚で省略すると、コンパイルが黙って失敗し「no features found」等の間接的なエラーになる
  2. 単発スニペット評価 (REST API の featurescript endpoint に lambda を渡す形式) では id 引数が素の map で渡されるため id + "suffix" が Call append(Id (map), string) does not match append(array, <any>) で失敗する。スニペット内では makeId("name") を使う。defineFeature で定義した本物のフィーチャー内では id + "suffix" が正常に動く
  3. 貫通穴は opBoolean の BooleanOperationType.SUBTRACTION で作る。tools / targets は qCreatedBy(id + "...", EntityType.BODY) で指定

MCP server (onshape-fs)#

Claude から FeatureScript を読み書き・テストできる MCP server。主なツール:

  • test_featurescript: lambda スニペットを評価。libraryVersion フィールドで現行 version を確認できる (上記の落とし穴 2 に注意)
  • test_feature: フィーチャー全体を実際の Feature Studio 相当の環境でコンパイル・実行
  • list_feature_studios / get_featurescript / put_featurescript / create_feature_studio: Studio の列挙・読み書き・新規作成

制約: 全ツール呼び出しが Onshape REST API を消費する (Free アカウントは 2,500 requests / 年)。アセンブリ・図面・GUI のフィーチャーツリー操作はできない。

ドキュメント URL https://cad.onshape.com/documents/{did}/w/{wid}/e/{eid} に document ID・workspace ID・element ID が入っている。

関連#

最終更新:

On this page