コードからのFritzingスケッチ生成
このスキルが提供するもの
- ネットリスト(どのピン同士が接続されるかのリスト)を、ブレッドボード、回路図、PCBの3つのビューを持つ1つの
.fzzファイルに変換する方法。 - 2つの動作例ジェネレーター。コピーしてパーツとネットを変更する。
scripts/build_fzz_battery_led.pyは、Fritzing標準搭載のパーツ(電池ボックス、押しボタン、抵抗、LED)のみを使用。ここから始める。scripts/build_fzz_header_led.pyは、カスタムパーツ(.fzpファイルと4つのSVGファイル)をスケッチに書き込む方法を示す。
- パーツチェッカー
scripts/check_core_part.py。コアパーツがすべての画像ファイルを持っているかどうかをチェックする。 - ヘッドレスチェッカー
scripts/fritzing_export.py。Fritzingでスケッチをロードし、3つのビューをSVGファイルとして書き出す。 - ウィンドウチェッカー
scripts/fritzing_gui_shot.ps1(Windows)。Fritzingウィンドウのスクリーンショットを取得してステータスバーを読み取る。 references/fz-file-format.mdにファイル形式の事実を記載。.fzXMLを書く前に読むこと。
テスト済みの環境
- テスト済み: Windows 11上のFritzing 1.0.x(
C:\Program Files\Fritzingにインストール)。examples/内の両方のスケッチ例は、ビルド、SVGエクスポート、Fritzingウィンドウでの表示(3ビューすべてで「配線完了」)、PCBデザインルールチェックを通過。2026-11-07に確認。 - 未テスト: macOS、Linux、Fritzing 1.0.x以外のバージョン、自動配線、数個を超えるパーツの回路。
Claudeへのルール
- パーツのピンを推測しない。
.fzpファイルを読み、コネクタをリストし、ネットリストと比較してからビルドすること。 - コアパーツを使用する前に、必ず
scripts/check_core_part.pyでチェックする。画像ファイルが欠落しているパーツは空白で描画される。 - ユーザーがリンクを提供しない限り、ファイルをダウンロードしない。ファイル名、ソース、サイズを伝え、各ダウンロードは新しい空のフォルダに入れ、そこから何も実行しない。
- ジェネレーターが実行されたからといってスケッチが「動作する」と言わない。Fritzingでロードし、各ビューですべてのパーツが表示される必要がある。チェックしていないことを明示する。
- 最後のチェックは人間が行う。ユーザーはFritzingウィンドウでファイルを開き、見えた内容を報告する。ファイルを手で修正せず、ジェネレーターを修正すること。
- 毎回、ファイル名とパーツ名を完全に記述する。
ワークフロー
Fritzingとそのパーツライブラリを見つける
- Windows(テスト済み): Fritzingは
C:\Program Files\Fritzing\Fritzing.exeにあり、パーツライブラリはC:\Program Files\Fritzing\fritzing-parts。サンプルスケッチはC:\Program Files\Fritzing\sketches\coreにある。これらを読み、Fritzingが書き出す正確なXMLをコピーする。 - Linux(このリポジトリでは未テスト): Fritzing AppImageは、
--appimage-extractオプションで新しい空のフォルダに展開できる。その後、パーツライブラリはsquashfs-root/fritzing-partsになる。 - macOS(未テスト): パーツライブラリはFritzingアプリケーション内にある。
fritzing-partsという名前のフォルダを探す。 - スクリプトはユーザー自身のFritzingインストールからパーツライブラリを読む。環境変数
FRITZING_PARTSをそのフォルダに設定する。
パーツをチェックする
- 必要なパーツをリストし、それぞれを検索する:
python scripts\check_core_part.py "C:\Program Files\Fritzing\fritzing-parts" <パーツ名>。--all batteryを追加すると、タイトルに「battery」を含むすべてのコアパーツをリストする。 - 各パーツについて
OKまたはMISSING、コネクタ数、モジュールIDが表示される。MISSINGと表示されたパーツは、画像ファイルが欠落しているビューで空白になる。 - 2026-11-07のテストインストールの例: コアパーツ
screw_terminal_2_100milは回路図とPCBの画像が欠落。コアパーツBattery block 9VはPCBフットプリント(jumper_2_100mil_pcb.svg)が欠落。コアパーツ4 x AAA Battery Mountは完全。 - 適切なコアパーツがない場合は、新しいパーツを描画する。
scripts/build_fzz_header_led.pyに例がある: 1つの.fzpファイルと4つのSVGファイル。 - 別のソースからのパーツにピンが不足している場合は、パーツをコピーし、新しい
moduleIdを割り当て、コネクタを追加する。ブレッドボードSVG、回路図SVG、PCB SVGsにピンを追加する。
ビルド
scripts/build_fzz_battery_led.pyをコピーする。パーツ、穴の名前、座標、ネットを変更する。- ネットをメンバーのリストとして記述する。スクリプトは、3つのビューすべてで自身の配線をそのリストと照合し、PCBトレースのクリアランスもチェックする。
- 最初にブレッドボードのレイアウトを選択し、次に回路図、最後にPCBを選択する。
references/fz-file-format.mdを穴の名前、スケール、レイヤー名、変換に使用する。 - 足が曲げられるパーツの場合、Fritzingのサンプルスケッチからleg XMLをコピーする。推測しない(「問題が発生したこと」を参照)。
チェック
python scripts\fritzing_export.py "C:\Program Files\Fritzing\Fritzing.exe" <sketch.fzz> <新しい空のフォルダ>を実行する。出力行をすべて読む。<name>_breadboard.svg、<name>_schematic.svg、<name>_pcb.svgが書き出される。- SVGファイルを画像として確認する。Windowsでの一つの方法: SVGファイルを
<img>で表示するHTMLページを作成し、msedge.exe --headless --window-size=W,H --screenshot=<out.png> file:///<page.html>を実行する。PNGを読む。エクスポートは銅のみを表示し、シルクスクリーンの輪郭は表示しない。輪郭を含むPCB画像を得るには、scripts\fritzing_gui_shot.ps1でFritzingウィンドウのPCBビューをスクリーンショットし、ボードをトリミングする(examples/のPCB画像はこの方法で作成)。 - 各パーツについて3つをチェック: 描画されている、ピンが穴の上にある、各ワイヤの端がピンに接触している。
- SVGエクスポートはラットネスト線(未配線の接続を示す細い線)を描画しない。そのため、Fritzingが接続を登録したことを証明できない。スケッチを実際のFritzingウィンドウで開く。
- Windowsの実際のFritzingウィンドウ:
Start-ProcessでFritzing.exe "<sketch.fzz>"を起動。25秒待つ。scripts\fritzing_gui_shot.ps1 -Out <png>を実行して現在のビューを取得、次に-Keys "^3"で回路図ビュー、-Keys "^4"でPCBビューを取得。各PNGを読む。- 各ビューのステータスバーに「配線完了」と表示され、緑色のコネクタドットがあることを確認。
- デザインルールチェックは、PCBビューで
-Keys "^+d" -Wait 5を指定してスクリプトを実行。クリーンなスケッチでは「Your sketch is ready for production: there are no connectors or traces that overlap or are too close together.」と表示される。 - ダイアログを閉じ、
Stop-Process -Name Fritzingを実行。
報告
- チェックした内容と方法を報告する。チェックしていないことも報告する。作成したファイルをフルパスで示す。
- ユーザーにファイルの開き方を伝える: Fritzingで「ファイル」→「開く」。
これまでに問題が発生したこと
- コアパーツの画像ファイルがインストールから欠落している。 パーツは空白で描画される。パーツを使用する前に
scripts/check_core_part.pyを実行する。 - パーツが空白で描画される。 Fritzing 1.0.xでは、ブレッドボードSVGに
<g id="breadboard">グループがない場合、何も描画されない。コンテンツ全体をそのグループで囲む。 - ワイヤの端が正しく見えるが接続されていない。
.fzファイルは、各接続を両方のアイテムにリストする必要がある。ペアごとに1回のlink()呼び出しを書き、両側を出力する。 - 曲げられる足を持つパーツ(LED、抵抗、ダイオード、電池ボックス)。
.fzファイルでは、コネクタの<geometry x y>は、SVG内の足の線のボディ側の端(スケール倍)である。<leg>の2番目の点は、その点を基準とした先端。5mm LEDの場合、先端オフセットは(0, 30.5172)。電池ボックスの場合、(6.25, 0)。Fritzing自身のサンプルスケッチがこれを示している。 - スケールの誤り。 1シーンユニットは1/90インチ。
in単位のSVGは、90 × 幅_in / viewBox_幅でスケーリングされる。通常のpx単位のIllustrator SVGは72dpiとみなされるため、1.25倍する。 - 回路図の端子が見つからない。 一部の回路図SVGファイルは端子を
<g>要素内に隠しており、端子がまったくないものもある。SVGファイルを読み、ピン線の外側の端を取得する。LED回路図led.svgの端子は、72dpiでカソードが(9.9005, 21.8165)、アノードが(9.9005, 0.2165)にある。 - 回転したパーツが穴からずれる。 リファレンスファイルの変換式を使用する。パーツは、その角ではなく、1つのピンの位置で配置する。
- トレースが交差する。 2つのトレースを異なるレイヤーに配置する。スルーホールパッドは両方のレイヤーを接合するため、ビアは不要。
- Python。 スクリプトは標準ライブラリのみを使用する。インストール済みパッケージは不要。
このスキルのファイル
SKILL.md: このファイル。references/fz-file-format.md:.fzzと.fzの形式、XMLの例、スケール、レイヤー名、公式を含む。scripts/build_fzz_battery_led.py: コアパーツのみを使用するジェネレーター(電池ボックス、押しボタン、抵抗、LED)。scripts/build_fzz_header_led.py: カスタムパーツ(2ピンヘッダー)も書き込むジェネレーター。scripts/check_core_part.py: コアパーツがすべての画像ファイルを持っているかチェックする。scripts/fritzing_export.py: ヘッドレスのロード&エクスポートチェッカー。scripts/fritzing_gui_shot.ps1: Fritzingウィンドウをアクティブにし、キーを送信し、スクリーンショットを保存する(Windows)。examples/battery_led.fzzとexamples/header_led.fzz: 2つのジェネレーターが作成したスケッチと、各ビューの画像。