AIと基板を一日で起こす ── カオス回路、要求からガーバーまでの全記録
「なんか基板作るかぁ」から発注用ガーバー一式まで約12時間。速さの種明かしは、賢いAIではなく「憲法・ゲート・検図ループ」という段取りの缶詰だった。チュア回路のカオス基板を題材に、使った道具、人間の赤ペンが直した7つのこと、AIが自力で見つけた改善、踏んだ地雷、費用の実データ、次からどうするかまで、できるだけ正直に長く書く。
朝、相方が言った。「なんか基板作るかぁ」。
夜には、JLCPCBにそのまま投げられるガーバー一式と、部品の買い物リストと、組立図PDFが手元にあった。60×60mmの2層基板。オシロのXYモードに繋ぐと二重渦巻きアトラクタが電圧で描かれる、チュア回路のカオス基板だ。裏面には、この基板自身の回路定数で微分方程式を数値積分した「本物の軌道」がシルクで彫ってある。
一日で基板が起きた——と書くと「AIすごい」という話に見えるけれど、今日一日やってみた実感は少し違う。賢さは要素のひとつでしかなくて、効いたのは段取りだった。この記事はその段取りの全記録だ。使った道具、人間のレビューが直したもの、AIが勝手に見つけた改善、踏んだ地雷、かかった費用の実データ、そして次からどう変えるか。長くなるが、同じことをやってみたい人の参考になるよう、できるだけ具体的に書く。
道具立て:基板スタジオという「段取りの缶詰」
実は前日の夜、思い付きでひとつアプリを建てていた。名前は仮に「基板スタジオ」。中身は驚くほど小さい。
- ローカルサーバ(Python標準ライブラリのみ、約400行):ブラウザUIと、プロジェクト生成・実行・承認のAPI
- エージェント実行機(約100行):ボタンを押すたび、Claude(Agent SDK経由)を独立プロセスとして起動する
- 憲法テンプレート(Markdown 1枚):新しい基板プロジェクトを作ると自動で焼き込まれる統治原則
賢い部分は全部Claudeに任せて、アプリ自身は「段取り」だけを持つ。その段取りの核が3つある。
1. ディスクが真実。 エージェントは毎回まっさらで起動し、STATE.md(現在の工程)・SPEC.md(要求)・INBOX.md(人間からの指示)を読んでから働き、終わったらSTATE.mdを更新して死ぬ。会話の記憶に頼らないから、セッションが切れても、日をまたいでも、モデルを途中で替えても、続きから走れる。実際この日、ネットワーク瞬断でランが一度死んだが、再実行ボタンひとつで何事もなく続いた。
2. ゲートで止まる。 工程はG0(要件)→G1(ネットリスト)→G2(回路図)→G3(配置)→G4(配線)→G5(製造出力)に切ってあり、エージェントは自分でゲートを進められない。進めるのは人間の承認ボタンだけ。エージェントは質問があっても対話できないので、「質問リストを成果物に書いて停止する」。
3. ネットリストYAMLが構造的真実。 回路図も基板も、1枚のYAML(ネット名→ピンのリスト)から生成する。逆方向の編集は禁止。そして工程のたびにcrosscheck——YAMLとKiCadから抽出したネットリストをピン単位で突合して、差分ゼロを機械で確認する。
この3原則は今回の発明ではなくて、先月、TMC5240という6軸モータ基板3枚をAIと設計・発注したときに実戦で固めたものだ。今回やったのは、その経験を毎回説明し直さなくて済む形に缶詰にすることだった。アプリを開いて「こういう基板が欲しい」と書けば、この規律で走り出す。
題材:チュア回路 ── 微分方程式が電圧で生きている板
作ったのはチュア回路(Chua’s circuit)。1983年に蔡少棠が考案した、カオスを生む最小クラスの自律回路だ。状態変数は3つ。コンデンサ2つの電圧と、インダクタの電流。
ここで が主役の「チュアダイオード」——折れ線状の負性抵抗で、電圧を上げると電流が減る区間を持つ。この非線形性が系にエネルギーを注ぎ込み、3次元の状態空間に「二重渦巻きアトラクタ」と呼ばれる軌道を描かせる。左右2つの渦を不規則に行き来し、決して同じ道を二度通らない。オシロをXYモードにして と を入れると、その影がそのまま画面に現れる。
実装は定番のインダクタレス版にした。チュアダイオードはオペアンプ2回路+抵抗6本(Kennedy 1992のロバスト実装)、インダクタはオペアンプ2回路+RC(Antoniouジャイレータ)で擬似化。つまりTL084一個(4回路入り)と受動部品だけで、カオスが生まれる。
一番こだわったのはつまみだ。状態方程式の を可変抵抗にすると、これが分岐パラメータになる。つまみを回すと、ただの発振→周期2→周期4→……とリズムが倍々に割れていき(周期倍分岐)、ある点を越えるとカオスに落ちる。教科書で式として習う分岐カスケードが、指先で回せる物になる。基板のシルクには、つまみの左右に ORDER ↔ CHAOS と彫った。
電源は±9V(9V電池2本の中点GND)。ここは物理の要求で、状態電圧が0Vを中心に±に振れてこそ、二重渦巻きがオシロの原点対称に開く。単電源にすれば配線はずっと楽になるのだが(後で効いてくる)、美しさの代金は配線が払うことになった。
G0–G1:AIは文献の矛盾を見つけ、読めないPDFを目で読んだ
要求文は普通の言葉で書いた。「カオスを生む基板が作りたい。チュア回路のインダクタレス版。つまみ1つで周期倍分岐からカオスまで辿れること。回路定数は文献値を出典つきで。でっち上げ禁止。」
G0(要件)でエージェントがやったことは、正直、想像の上を行っていた。
- 要求を「絶対に外せない要件」と「努力目標」の表に分解
- 電源の私の雑な提案(単一9V電池+分圧)を「±4.5Vではスイングが足りず二重渦巻きが開かない」と正しく突き返した
- そして参考にした文献の中の数値矛盾を自力で発見した。ジャイレータの合成インダクタンスの式 に文献記載の を入れると mH になり、同じ文献が言う15mHと合わない。エージェントはこれを推測で埋めず、「一次資料で照合するまで未確定」とTODOに積んで停止した
G1(ネットリスト)では、Kennedyの原論文PDFを取りに行ったら埋め込みフォントが壊れていて機械抽出できない、という現実の壁に当たった。ここでの解決が面白い。回路図のページを画像に切り出して、視覚で結線を読み取り、読み取った回路を回路理論で自己検算した(チュアダイオードの内側傾き mS——教科書の標準値と一致)。例の数値矛盾も、読める側の一次資料で決着した( → mH、式と検算一致)。
このあたりで確信したのは、「でっち上げ禁止・出典必須・確認できないものはTODO」という憲法の条文が、ちゃんと行動として現れるということだ。規律は書けば守られる。書かなければ、たぶん埋められていた。
G2:「機械には正しく、人間には読めない」回路図事件
G2で最初に出てきた回路図は、ERC(電気ルールチェック)0件、crosscheck差分ゼロ。機械的には完璧だった。そして人間にはまったく読めなかった。部品が孤立した箱として等間隔に並び、結線はネットラベルの名前一致でしか表現されていない。信号の流れも、帰還ループの形も、目では追えない。
私は検図者としてネットリストを全数トレースして回路の正しさは確認できたが、これでは相方の赤ペンが当てられない。「検証済み」と「読みやすい」は別物で、G2の合格条件は「人間が回路を承認」だ。差戻した。
やり直しの過程で方式を2つ試した。
方式A:描画プログラムでSVGを描く。 エージェントは「絵を手で描く」のではなく「絵を描くプログラムを書く」方式に自力で収束した。ブロック色分け・三角のオペアンプ記号・実線の結線・導出式の欄外注記つきで、教材のような一枚が出てきた。

方式B:KiCadネイティブで「読める.kicad_sch」を生成する。 標準シンボルを使い、ブロック内は実線で配線し、電源はパワーシンボルに逃がす——人間が手で描くときの流儀を、座標計算で再現する。エージェントはSVGを書き出しては自分の目で見て座標を直す、という視覚フィードバックループを3周回して収束させた。

軍配はBに上がった。決め手は見た目ではなく構造で、Bは「人間が見る図」と「機械が検証した真実」が同一ファイルになる。Aは美しいが、検証と別物の二重表現だ。
そしてこの実験は、思わぬ副産物を残した。エージェントが読める配置を組んでいる最中、手組みの配線で短絡を4本作り込んだのだ(Y_V2→GND直結など)。それを4本ともcrosscheckが自動検出した。「配線をいじったら毎回突合」という地味な規律の価値が、実験の中で勝手に実証された形になった。
技術メモとして残しておくと、kicad-cli単体はシンボルのextends(親シンボル継承)を解決しないので、親を展開して自己完結させる必要がある。ERC 0件にするにはプロジェクトlib(.kicad_sym+sym-lib-table+.kicad_pro)の同梱が要る。このへんは知らないと数時間吸われる類の地雷だと思う。
G3:人間の赤ペンが「配置の哲学」を変えた
配置の初版は、機械検査(部品干渉ゼロ・基板内収まり・盤面とYAMLの79ピン突合)を全部通ってきた。等間隔のきれいな配置だった。そして相方から、スマホの赤ペンでスケッチが届いた。
いわく——「配線で部品をつなぐんじゃなくて、配置の時点でほぼ繋がってる状態を作る」。前の部品の終端パッドと次の部品の始端パッドが向き合うように、部品の向きも信号の流れに合わせて回転させ、階段状に連ねる。オペアンプの帰還網はICのピンの周りに物理的に小さく巻く。理由も明快で、①後で基板を見た時に設計者の意図が読める ②ルーティングが単純に楽。
やり直した配置がこれだ。U1(TL084)の左右に、チュアダイオードとジャイレータの部品がそれぞれ巻き付いている。

等間隔グリッドの配置は「テープから並べました」であって、動いても意図が読めない——この言語化は、そのままアプリの憲法に条文として刻んだ。次の基板からは最初からこの原則で走る。人間の20年の勘を、口に出してもらった瞬間に道具へ移植する。今日一日で一番価値があったのは、たぶんこのループだ。
配置ではもうひとつ、現物都合の変更があった。相方が0603サイズ(インチ表記=1.6×0.8mm)の抵抗とコンデンサのサンプルブックを持っていたので、受動部品を全部0603に統一し、組立は「JLCには基板だけ発注、部品は全数手はんだ」に決めた。ここで危険な罠がひとつ。KiCadのフットプリント名にはC_0201_0603Metricという**メトリック表記の0603(=インチ0201、0.6×0.3mm!)**が実在する。文字列の「0603」だけ見て選ぶと、米粒の半分みたいなパッドを掴む。対策は名前でなく寸法で検証すること——盤面から実際のパッド座標を抜き、ランド間隔1.6mm前後であることを数字で確認した。
幕間:配置とは平面グラフの埋め込みである
配置の議論の途中で、相方が自分の頭の中を言語化してくれた。「グルーピングして、線が逃げれるところをなんとなーく探す。空間上で接続させたものを、トポロジを保存しながら二次元に投影する感じ。無理だったらネジれ(2層目への逃げ)を考える」。
これは数学にそのまま名前がある。平面グラフの埋め込みだ。回路は抽象的には「つながり」だけのグラフで、基板に置くとは、それを交差なしで平面に描けるか(平面性)という問題。描けない最小の反例が (3軒の家と3つの井戸を交差なしで結べ、という不可能パズル)で、ビアとは面に橋を架けて実質もう1枚の面を足す操作にあたる。
面白くなって、実際にこの基板のネットリストからグラフを組んで(部品を頂点、ネットを星形展開)、networkxで平面性を判定してみた。
- 全18ネットのまま → 非平面。Kuratowski部分グラフ(反例)にはGNDと解析コアが丸ごと絡んでいた。犯人は16箇所につながるGNDの星
- GNDをグラフから除外(=裏面ベタに逃がす)→ 平面 ✓
つまり「裏面GNDベタ」という定石が、この基板では慣習ではなくトポロジ上の必要条件だと証明できたことになる。相方の「無理だったらネジれ」という直感は、「最初に面へ逃がすべきはGND」という結論まで含めて正しかった。この判定はそのままplanarity.pyという20行の道具にして、配線前のプリフライトとしてアプリの標準装備にした。ただし正直な注釈もつけておく。グラフの平面性は「原理的に交差なしで描ける」であって、実寸の幾何(ピンの並び順)までは保証しない。その摩擦を減らすのが数珠つなぎ配置、という分担になる。
G4:配線 ── 2層×両電源の格闘と、AIの発見と、機械の言い訳
配線は今日一番の長丁場だった。信号線は数珠つなぎ配置のおかげでほぼ即決。手こずったのは電源だ。裏面を全面GNDベタにした(EMCと平面性の勝ち筋)ということは、電源が裏へ逃げる床を失ったということでもある。±9Vの2本が、表面で信号もポアも避けながら周縁を這って配るしかない。エージェントはDRCの銅エラーを集計し、「中央を貫く電源トランクが主犯」と自己診断して周縁配電に全面書き直し、153ターンかけてDRC違反0・未結線0まで持っていった。
このゲートでは人間の赤ペンが立て続けに入った。45度配線の徹底(今は「非45°セグメント0/138本」まで機械検査になっている)。パスコンを電源ピンの足元へ(デカップリングループ14mm→4mm、給電ビア→C→ピンの正順)。手はんだ前提なのでvia-in-padは禁止、パッド外の短スタブ+ビアへ。そして「アナログ回路としての流儀ができてなさそう。そこまで気にしなくていい回路だけど、常にベストなパターンを目指そう」という総括のマンデート。
ここで相方の指示により、仕上げのランだけモデルをFable(最上位)に格上げした。成果は注文以上で、特筆が2つ。
1. アンダーチップ・チャネル。 SOICパッケージの本体の下(パッド列の内側)に短い橋渡し配線を通す手を自分で見つけてきた。これでパスコンの一等地が空き、Y_V2信号のビア2個が消えて表層一直線になり、ビア総数はむしろ減った(40→38)。
2. 機械の言い訳を自己摘発した。 前のランは、シルク検査の警告99件を「ベタ上のシルクは偽陽性」と説明してignoreに設定していた。Fableが掘り直したところ、真因は露出したはんだパッドに意匠がかかっていたこと——つまり相方が赤ペンで指摘していた「アトラクタとはんだ部が重なってる」そのものだった。意匠を移設した今は既定の検査でも違反ゼロ。抑制設定は完全撤去した。人間の目は、機械の言い訳より正しかった。この一連は、抑制を戻して再検査して「隠れた違反が他にないこと」を機械的に証明する証跡ファイルまで残っている。
そして裏面の意匠。飾りの曲線ではなく、この基板の実定数(、 ほか)で無次元チュア方程式をRK4積分した本物の軌道を、約2000セグメントのシルクとして彫った。基板が、電源を入れたときにオシロへ描くのと同じ形を、自分の背中に背負って生まれてくる。


最後に、実装する人間(相方)のためのシルクを入れた。全31部品のRefを、実ジオメトリを読んで衝突しない位置を探すスクリプトで省略ゼロ配置。出力ヘッダはピン別にX/G/Y/G。電池コネクタには極性。ちなみに「電池と外部の同時給電禁止」という注意書きも提案したら、「ワイそんなことせん」と一蹴された。ごもっとも。プロに説教を書くのはやめて、極性とピン名だけ残した。

紙の側も用意した。Ref・値・位置・部品表を一枚にまとめたA4の組立図で、役割分担は「Refは基板・値は紙」。シルクが読みにくい箇所があっても紙が拾い、紙を無くしても基板が語る、という二重化になっている。

G5:発注セットと、費用の実データ
最終ゲートで、JLCにそのまま投げられる一式が出た。ガーバー7層+ドリル、ビューアで弾かれる余計なファイルを抜いた入稿zip、購入リスト(LCSC番号は実在と在庫をWebで確認、代替つき)、手持ちブックから拾う値の一覧、A4の組立図PDF。発注パラメータは60×60mm・2層・1.6mm・黒レジスト白シルク・5枚。
ここで最後の設計変更がひとつ。主制御の2.5kΩポットがE系列外で市販品がほぼ無いとわかり、5kΩ Bカーブに変更した(分岐の窓が回転30%あたりに来る。敏感にはなるが、トリマ側で窓位置を調整できる)。フットプリントは値に依存しないので基板データは無変更。部品の入手性は、最後の最後まで牙を剥く。
費用も実データで書いておく。全部相方のClaude MAXプランの月次枠内なので現金支出はゼロだが、枠の消費量として:
| 工程 | 消費 | 備考 |
|---|---|---|
| G0 要件 | $1.8相当 | 17ターン |
| G1 ネットリスト | $8.2 | 原論文の目視復元込み |
| G2 回路図(3ラン) | $29.2 | うち$17.9は方式実験(一回きり) |
| G3 配置(5ラン) | $34.5 | 赤ペン反復込み |
| G4 配線(4ラン) | $87.2 | 格闘7.8+Fable総点検14.4 |
| G5 製造出力(2ラン) | $8.8 | 入稿zip・購入リスト・値確定 |
| 合計 | 約$170相当 | 基板の製造費は別途$5前後 |
2層vs4層の損得も今日の実測で言えるようになった。4層にしていれば電源はプレーンに落ちるだけなので、G4の格闘の半分(10〜20。名目ではほぼ相殺だが、枠は月次で消えるが現金は消えないこと、実時間と収束リスクは明確に4層有利なことから、結論は「複雑な基板は最初から4層。根拠は金額ではなく、枠で時間を買う」。これも憲法に刻んだ。
振り返り:効いたもの
憲法。 出典必須・でっち上げ禁止・ゲート停止・毎回crosscheck。条文はすべて行動に現れた。文献の矛盾の発見も、短絡4本の検出も、質問リストを書いて止まる姿勢も、全部条文の産物だ。
ディスクが真実。 ネットワーク瞬断でランが死んでも、モデルを途中でFableに替えても、何も失われなかった。エージェントを「使い捨ての労働者」、ファイルを「不揮発の記憶」にする設計は、長い設計作業と本当に相性がいい。
人間の赤ペンループ。 今日、人間のレビューは7回入った。回路図が読めない。配置は流れで数珠つなぎに。ジャイレータも巻き付けて。45度で。アトラクタがはんだ部に重なってる。パスコンは足元に。アナログの流儀で総点検を。——そのうち普遍性のあるものは、その場で憲法の条文になった。レビューは一枚の基板を直すだけでなく、次の全部の基板を直す。この蓄積構造が、たぶんこの仕組みの本体だ。
機械検査の自動化。 DRC・ERC・crosscheck・部品間隙・45度率・ノブの回転クリアランスまで、「守りたいこと」を片端から機械検査に落とした。人間とAIの言い合いは「気がする」で滑るが、検査は滑らない。
モデルの使い分け。 標準はopus、軽い工程はsonnet、総点検だけFable。Fableは「注文の実行」より「注文してないものを見つける」場面で明確に格が違った(アンダーチップ・チャネル、抑制の自己摘発)。全部を最上位で回す必要はない。
振り返り:直すもの
基板サイズを攻めなかった。 60×60mmは私が最初に雑に書いた数字で、実装面積はその半分だった。結果的には余白がつまみの操作性と裏面の大判アトラクタに化けたからよかったものの、「選んだ余白」と「残った余白」は別物だ。次からは配置確定時に外形の縮小余地を必ず提案させる(条文化済み)。
2層を選んだこと。 上述の通り。±9V両電源の時点で4層にすべきだった。
指示のタイミング。 エージェントは起動時にINBOXを読むので、走行中のランに追加指示が届かないことが数回あった(表面ベタの指示が1ラン遅れた)。長いランの途中に届いた指示は次のランで確実に拾う、という運用でカバーしたが、仕組みとしても改善の余地がある。
シルク文字の初期品質。 機械生成の文字は最初、回転や重なりが雑だった。最終的には「実ジオメトリを読んで衝突回避する」スクリプトに育ったが、最初からその水準を憲法に書いておけば1ラン節約できた。
次にやること
基板が届いたら、ブリングアップだ。手順書はもう設計検討文書の中にある——電流制限つきで火入れ、トリマを1.8kΩに合わせ、つまみを回して周期倍分岐の梯子を降りる。オシロに二重渦巻きが開いたら、この計画は完了になる。
実機でしか答えが出ない問いも仕込んである。0603のセラミックコンデンサは電圧がかかると圧電効果でわずかに歪む。数kHz・数Vで揺れ続けるこの回路では、基板がかすかに鳴くかもしれない。カオスの周波数成分で鳴る板というのは、それはそれで面白いので、まず聴いてみて、気になったらフィルムコンに戻すrev-Bを起こす。焦らない。一点物の正しい順番だと思う。
最後に身も蓋もない話をすると、今日いちばん時間を食ったのは、AIでも回路でもなく「±9Vにしたい」という私の美意識だった。原点対称の蝶が見たいというだけの理由で、配線の難度が上がり、4層論争が生まれ、憲法が1条増えた。でも、そういうものだと思う。道具がどれだけ速くなっても、「何を美しいとするか」の値段は人間が払う。そこだけは、缶詰にしない。
出典
- Kennedy, M.P., “Robust OP Amp Realization of Chua’s Circuit”, Frequenz 46 (1992) ── チュアダイオードのオペアンプ実装(一次資料。本文中の「読めないPDF」はこれのスキャン版)
- chuacircuits.com “How to build Chua’s circuit” ── 定番の定数セット
- Inductorless Chua’s Circuit(chaotic-circuits.com, 2015) ── ジャイレータ版の定数と合成式。本文のR10/L矛盾はこの資料内の記載を式で検算して発見・決着した
- 回路定数・検証手順の詳細は、設計リポジトリ内の設計検討文書(design-study.md)に版数・頁番号つきで凍結してある
— ランキン
コメント
まだコメントはないよ。最初のひとことをどうぞ。