cad-viewer について
cad-viewerは、既存または生成済みのCAD、ロボット記述、DXFファイルをCAD Viewerで開き、レビュー用リンクを返すスキルです。指定したワークスペースのサーバーを起動し、その配下のファイルを一覧表示します。
主な機能
- 01CAD Viewerでのモデル表示
- 02ワークスペース内ファイルの再帰検索
- 03指定ファイルの閲覧リンク生成
- 04条件に合う実行中インスタンスの再利用
- 05STEPのコンパイル状態とエラー表示
活用シーン
- 01CADモデルのレビューリンク作成
- 02プロジェクト内の複数モデルの閲覧
- 03STEPファイルのコンパイル進捗確認
- 04ワークスペース内でのレビュー対象切り替え
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ earthtojake/ text-to-cad --skill cad-viewerインストール後、Claude Code で/cad-viewerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSErequirements.txtagents/openai.yamlreferences/viewer-features.md詳細
CAD Viewer
出典: earthtojake/text-to-cad で保守されています。 実行時の信頼できる情報源として、インストール済みのローカルスキルファイルを使用してください。リポジトリへのリンクは、出典の確認とリリースのレビュー用です。ユーザーが CAD Viewer のソース自体の変更、デバッグ、反復作業を求めている場合、それはこのスキルではなくリポジトリで行う作業です。このスキルは Viewer を実行するものであり、編集する場所ではありません。
このスキルを使うと、既存または新たに生成された CAD、ロボット記述、DXF ファイルを CAD Viewer で開き、ライブのレビューリンクを返せます。入力には、1 つ以上の明示的なファイルパスを指定してください。
セットアップ
Viewer は cadgen の一部です。このスキルの requirements.txt を
Python >= 3.11 にインストールすると、cadgen コマンドでサーバーとビルド済み
クライアントを利用できます。ほかにインストールするものはなく、実行時に Node も必要ありません。
python -m pip install -r requirements.txt
cadgen doctor <this skill's directory> を実行すると、インストール済みの cadgen が
このスキルの公開時に使用されたバージョンと一致することを確認できます。
Viewer の起動
起動は常に行われます。以下のコマンドは、起動ディレクトリ用のライブ Viewer の URL で必ず終了します。そのディレクトリで、ディスク上の Viewer コードが同一のインスタンスがすでに実行中の場合(再利用キーは
realpath(directory) x ID トークンです。ID トークンは cadgen のバージョンと、Python ランタイムおよびビルド済みクライアントの正確な内容のダイジェストで構成されます。そのため、アップグレードされた Viewer や別の --dist によって古いインスタンスの URL が返されることはありません)、その URL が返されます
("action": "reused")。それ以外の場合は、3245 から始まる最初の空きポートで新しいサーバーが起動します
("action": "started")。ポートを選んだり、推測したりしてはいけません。コマンドが表示する URL を確認してください。各インスタンスが提供するのは 1 つのディレクトリ、つまり起動元のディレクトリだけです。プロセスの存続中、この設定は変わりません。この設定用のフラグはありません。cwd が提供対象のディレクトリです。
ベースポート
3245は0xCAD、つまり 16 進数で「CAD」です。
cd /absolute/project/models && cadgen viewer --host 127.0.0.1 --json
(cadgen は、このスキルの requirements.txt からインストールしたものでなければなりません。PATH にない場合は、そのインタープリターで python -m cadgen.viewer を実行しても同じように起動できます。)
起動ディレクトリは慎重に選んでください。最も重要なポイントです。 cwd によってカタログがスキャンする範囲が決まります(プロジェクトのルートから起動すると、node_modules、.git、ビルド出力まで取り込まれます)。また、cwd はインスタンスの再利用キーでもあるため、たまたま現在いる場所から起動すると、別の場所を提供している Viewer の URL が返されることがあります。ユーザーがモデルの作業場所として認識しているディレクトリ(通常はプロジェクトの models/ ディレクトリ)に cd して、そこから起動してください。このスキルのディレクトリ内から起動してはいけません。モデルではなくスキルが提供対象になります。
フラグ:--json は、機械可読形式の最終 stdout 行
({"url", "port", "action": "started"|"reused"})を出力します。必ず指定し、URL はそこから取得してください。--new は再利用せず、新しいインスタンスを強制的に起動します。明示的な --port <n> は厳密な指定で、「このポートで起動するか、失敗するか」のどちらかです。これを指定すると、再利用とポートの繰り上げの両方が無効になります。その他のフラグは cadgen viewer --help で確認できます。
URL の形式
ページはオリジンのみで、file= によって配信ルート内のアーティファクトを選択します。
http://127.0.0.1:3245/?file=gripper/STEP/gear_rack_gripper.step
file= の値は、配信ディレクトリからの相対パスです。URL にディレクトリ情報は含まれないため、同じリンクでもインスタンスによって異なるファイルを指します。ルートはリンクではなく、サーバー側のものです。
起動ディレクトリはファイルのフォルダーではなく、ワークスペースです。 Viewer は再帰的にスキャンするため、ファイルブラウザーにはその配下にあるすべてのモデルが表示され、ユーザーは新しいリンクを使わずにファイルを切り替えられます。ユーザーがモデルのワークスペースと考えるディレクトリから起動してください。通常はプロジェクトの models/ ディレクトリ、またはレビューを依頼されたファイルの共通の親ディレクトリです。残りのパスは file= に指定します。アーティファクトの深い階層にあるフォルダーから起動すると(cd .../models/gripper/STEP、?file=gear_rack_gripper.step)、同じモデルは開きますが、プロジェクトの残りの部分が表示されません。これは、ほとんどの場合ユーザーの望む動作ではありません。
ポートの競合を気にする必要はありません。ランチャーは空いているポートに切り替え、出力される URL が正しい URL です。サンドボックス化されたエージェント環境では、EPERM/EACCES などのローカルバインドエラーが発生する場合があります。その場合は、必要な権限の付与や昇格を行って再実行してください。
cadgen viewer list では、配信対象ディレクトリとともに実行中のすべてのインスタンスが表示されます。cadgen viewer stop --port <n> でインスタンスを終了します。(どちらもどこからでも実行できます。カレントディレクトリが関係するのは起動時のみです。)
現在のルートの外にあるディレクトリを確認するには、そのディレクトリに cd して再度起動してください。再利用または起動するため、2 回目の起動は簡単かつ適切に行われます。
生成は CAD スキルの役割で、ドキュメントのコンパイルは Viewer で行います
Viewer は静的なビジュアライゼーションツールで、すでに存在するアーティファクトをレンダリングします。生成モデルは、モデルスクリプトを実行して先にビルドする必要があります(CAD スキルを参照)。Viewer がスクリプトを実行することはなく、ドキュメントにスクリプトがあるかどうかを認識することもありません。
Viewer における .step/.stp ドキュメントの状態は、ファイルのバイト列とストアだけを基に決まる次の 4 つのいずれかです。未コンパイル(ストアにこのバイト列に対応するツリーがありません。Viewer はコンパイルを提案し、開いたときにコンパイルします)、コンパイル中 · n/total(cadgen のビルドプール内のジョブが、このドキュメントを出力に含むツリーを生成しています。Viewer 自身によるコンパイル、ターミナルでの python model.py、親の子ビルドのいずれも含みます)、レンダリング済み、または失敗(このドキュメントに対する最後のジョブが失敗しており、メッセージが表示されます)。コンパイルは、cadgen の各画面で使われる同じプールに送信されるジョブであるため、進捗とエラーはデータとして返されます。「ソースに対して古いかどうか」という状態はありません。ドキュメントがスクリプトに対して遅れているかどうかは Viewer ではなく、cadgen store why で確認します。エージェントが作業している場合は、先に実行するものはありません。ファイルを使ってリンクを返すだけです。
リンク
- リンクを返す前に、
<directory>/<file>を解決し、存在することを確認してください。生成されたものもインポートされたものも含め、.step/.stpアーティファクトそのものを渡してください。カタログにはアーティファクトが一覧表示され、ディスク上の名前がそのまま正確に表示されます。生成されたものかインポートされたものかにかかわらず、moonwatch.stepはタブ、パンくずリスト、カタログの行、ファイルピッカーのいずれでもmoonwatch.stepと表示されます。Viewer がドキュメントの生成元を知ることはありません。ステータスはアーティファクト側にのみ存在し(未コンパイル/コンパイル中/レンダリング済み/失敗)、モデルスクリプトは UI のどこにも表示されません。生成されたモデルのドキュメントはあらかじめ存在している必要があります(モデルスクリプトを実行してください)。ストアにツリーがないドキュメントは、開いたときにそのバイト列からコンパイルされます。解決したパスが見つからない場合は、リンクを返さず、問題を報告して正しいパスを示してください。 - リクエストされたファイルごとに Viewer URL を 1 つ返してください。
- Viewer は一度だけ起動し、セッション用のワークスペースルートを 1 つ選んでください。すべてのリンクは同じオリジンに
?file=<path relative to that root>を付けたもので、すべて同じブラウズ可能なカタログを共有します。そのルートの外にあるアーティファクトには、専用の Viewer が必要です。そのルートで再度起動してください(再利用または起動の処理はべき等です)。リンクだけでは、そのアーティファクトにアクセスできません。 - ディレクトリのみのレビュー用リンクでは、
?file=を付けずにオリジンを返してください。 - ユーザーから依頼されない限り、稼働中の Viewer サーバーを停止しないでください。
- Viewer の起動に失敗した場合は、その失敗を報告し、対象スキルの GUI 以外の検証またはアーティファクトを使って処理を続けてください。
参考資料
- 対応ファイル形式、Viewer の操作方法、またはファイル固有の機能の詳細が必要な場合は、
references/viewer-features.mdを読んでください。