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" になる
落とし穴
- map のキーは引用符必須。
{ length : 10 * millimeter }は構文エラー。{ "length" : 10 * millimeter }と書く。JavaScript の感覚で省略すると、コンパイルが黙って失敗し「no features found」等の間接的なエラーになる - 単発スニペット評価 (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"が正常に動く - 貫通穴は
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 が入っている。
関連
最終更新: