実在する 3.5 mm ステレオプラグとジャックの接合機構を、ブラウザ上で自由に観察・挿抜できる 3D アプリです。
一番の狙いは、プラグを途中まで挿したときに内部で何が起きているかを、 見た目の色替えではなく実際の幾何計算で見せることです。
このリポジトリを変更する場合は CONTRIBUTING.md を先に読んでください。 モデルを直すより、モデルを説明している場所を直すほうが手間がかかります。
**先にここを読んでください。**判断が分かれるのはこの 1 点だけです。
| ✅ 使える | 半挿しのときに接点がどの順で何に触れるかを理解する/教材にする/「片方しか鳴らない」「ガリッとノイズが出る」といった故障の説明に使う/接合機構の形と動きを見る |
| ❌ 使えない | 設計値の根拠にする/調達や部品選定の判断に使う/実物の寸法として引用する |
理由は ジャックの内部が公開されていないことです。 外形はメーカー公開図面どおりですが、接点の位置・ばね・押付力は図面にもデータシートにも 書かれていません。そこは仮定で埋めてあり、実物と突き合わせた検証もまだ済んでいません (UNKNOWNS.md)。
ただし、何もかもが不確かなわけではありません。 このアプリの中で、確かなものとそうでないものは、はっきり分かれています。
| 確か — 仮定を振り直しても変わらない | 接点が何に触れるかの順序(帰線接点が Tip → Ring の順に通る)/その過程で Ring↔Sleeve の橋絡が起きること |
| 不確か — 仮定に直接乗る | それが何 mm で起きるかという深さ/挿抜力の絶対値/ブレーク接点がいつ開くか(しきい値が仮定で、値によっては一度も開きません) |
✅ の用途がどれも「順序」と「仕組み」の話で、❌ の用途がどれも「値」の話なのは、そのためです。 仮定の内訳が知りたい場合は ASSUMPTIONS.md(寸法 135 件のうち 54 件が仮定)へ。
またモデル化したのは下の 2 型番の組み合わせ 1 組だけです。 「実在する代表的な 3.5 mm TRS 接続の一例」であって、3.5 mm ジャック全般の代表ではありません。
- プラグ: Lumberg 1532 10 — JIS C 6560 JC35P3、3.5 mm、3極ステレオ、ストレート型
- ジャック: Lumberg 1503 09 — JIS C 6560 JC35J3B、3.5 mm、3極ステレオ、アングル型、ブレーク接点 2 個つき
この 2 つは、メーカー自身が対応品として互いに列挙している実在の組み合わせです。
タイトルの TRS は、プラグの 3 つの導体 Tip(先端)/Ring(中間)/Sleeve(根元)の頭文字です。 ステレオなら Tip = 左、Ring = 右、Sleeve = グランド(帰線)に使われます。
| 語 | 意味 |
|---|---|
| 絶縁帯 | 導体と導体のあいだの、電気を通さない黒い帯。ここに接点が乗ると回路が開く |
| 橋絡(きょうらく) | 1 つの接点が隣り合う 2 つの導体に同時に触れてしまい、両者が短絡すること |
| ブレーク接点 | ジャックに内蔵されたスイッチ。プラグを挿すと押し開かれて開く。機器はこれで「挿さった」を検知する |
| パッド | ジャック側接点のうち、実際にプラグへ触れる面。幅を持つので複数の導体にまたがりうる |
| プラトー | プラグ外形のうち、半径が同じで平らな区間(Ring と Sleeve はどちらも φ3.5 で同じ高さ) |
| 完全挿入 | 半挿し(帰線接点が Tip 導体に触れている) |
|---|---|
![]() |
![]() |
| 橋絡(Ring と Sleeve が同時に短絡する深さ) | 断面 |
|---|---|
![]() |
![]() |
いずれも npm run screenshots が実ブラウザを操作して生成したものです(加工していません)。
| できること | 説明 |
|---|---|
| 自由な視点 | 回転・拡大縮小・移動。「視点を戻す」で既定位置へ |
| 連続的な挿抜 | ドラッグ/スライダー/キーボード/ホイール/自動アニメ。任意の深度で停止できる |
| 内部の可視化 | 半透明・完全透明・断面・可動断面・分解・接点のみ・ワイヤーフレーム |
| 接点状態 | どのジャック接点が Tip / Ring / Sleeve のどこに触れているかを実時間表示 |
| 異常の区別 | 絶縁帯上・誤電極・橋絡(短絡)・不安定接触を別々の状態として区別 |
| ブレーク接点 | 内蔵スイッチ 2 個の開閉を表示 |
| 電気回路 | 端子とプラグ導体の接続グラフを 3D と同期表示 |
| イベント | 挿入経路上の重要な位置を自動抽出し、クリックでその深度へ移動 |
| 故障モード | 半挿し/絶縁帯停止/橋絡/軸ずれ/傾き/押付不足/摩耗/汚れ/断続接触 |
| 根拠の追跡 | 全ての寸法に FACT / DERIVED / ASSUMPTION の区分と出典を表示 |
| 4極 (TRRS) | CTIA / OMTP を別プリセットとして追加。3極ジャックとの混挿も幾何から計算 |
npm installnpm run devブラウザで http://localhost:5173 を開きます。
| コマンド | 内容 |
|---|---|
npm run test |
単体テスト (Vitest)。件数と内訳は docs/TEST_RESULTS.md |
npm run typecheck |
TypeScript 型検査 (src / scripts / test) |
npm run build |
本番ビルド |
npm run artifacts |
artifacts/ へ走査結果 JSON を生成 |
npm run sensitivity |
仮定パラメータの感度解析(15 分ほどかかる。CI 向けではない) |
npm run docs:html |
docs/*.md から docs/*.html を生成 |
npm run test:count |
テスト件数を artifacts/test_counts.json へ書き出す(文書と機械照合するため) |
npm run check:stale |
重い成果物(探索・感度解析)の再実行が要るかを判定する |
npm run check:published-assets |
公開済み release asset が公開時のまま在るかを GitHub 側と突き合わせる(gh が要る。→ SECURITY.md) |
npm run artifacts:all |
軽い成果物をまとめて作り直す(数秒) |
npm run export:half-plug -- --variant "TRS|JACK-TRRS" |
接点トポロジーを DSP 非依存の JSON として書き出す |
npm run export:half-plug:all |
3極×3極 と 3極×4極 の両方を書き出す |
npm run search:topology -- --target DIFFERENCE_SIGNAL |
目標トポロジーが成立する構成を探す(約 10 分) |
npm run compare:real-jack |
実在部品の図面値と本モデルの仮定値を突き合わせる(→ docs/REAL_JACK_COMPARISON.md) |
npm run screenshots |
実ブラウザ (Playwright) で UI を操作し、docs/screenshots/ へ画像を保存 |
npm run perf |
実 GPU (headed Chrome) でフレームレートと描画コストを測定 |
npm run touch |
iPhone/iPad 相当のビューポートにタッチ入力を注入して操作を検証 |
npm run predict:probe |
テスターで測れる形の予測を出力(実物との突き合わせ用) |
npm run fit:contacts |
実測した切り替わり深さから接点の軸位置を逆算 |
npm run inspect |
モデルの挙動をコンソールに出力 (開発用) |
npm run screenshots / npm run perf / npm run touch は npm run dev が別ターミナルで動いていることが前提です。
npm run perf は実 GPU を使うため Chrome のウィンドウが一時的に開きます。
挿抜
- 3D 上でプラグを直接ドラッグ
- スライダー、数値入力 + 「移動」、
50%ボタン ←→… 微調整(Shift= 0.5 mm、Alt= 0.01 mm、既定は選択中の刻み)Home/End… 完全抜去 / 完全挿入Space… 自動挿入の開始・一時停止、R… リセット- ビューポート上で
Shift+ ホイール … 深度の微調整(ホイール単独は拡大縮小) - 刻みは 0.01 / 0.05 / 0.2 / 1 mm から選択
視点
- ドラッグ … 回転、ホイール … 拡大縮小、右ドラッグ … 平行移動
ジャック前面基準面 (ローレットナット前面)
│
未挿入 ←── d<0 │ d>0 ──→ 奥
│
d = 0 : プラグ先端がちょうど前面にある
d = 14.0 mm : プラグ肩が停止面に当たる完全挿入
d… 挿入深度 [mm]。ジャック前面基準面からプラグ先端までの距離s… プラグ先端からの軸方向距離 [mm]。セグメント境界はこの座標で定義- 対応関係 …
s = d − (接点の軸位置)
完全挿入深度 14.0 mm は、プラグ肩の外径 φ10 がジャックのボア φ3.6 より大きく、 肩が前面に当たって止まることから導出しています(推測ではなく幾何的帰結)。
src/
data/ 寸法・接点・材料・出典・故障プリセット (JSON)。数値はすべてここだけにある
model/ 接触判定・回路・力・走査。3D にもブラウザにも依存しない純粋 TypeScript
three/ 3D 形状生成と表示。data/model からしか数値を受け取らない
ui/ パネル類
store/ 操作状態 (zustand)
接触判定は 3D メッシュ名にも画面座標にも物理エンジンにも依存しません。 プラグの軸方向区間・接点パッド幅・ばね変位から決定論的に計算しています。 同じ入力なら常に同じ出力になることをテストで担保しています。
このアプリの中心的な発見です。物語ではなく、幾何計算の結果として出てきます。
ジャックの 3 つの接点は軸方向にばらばらの位置にあります。 前面から 帰線 3.2 / Ring 7.1 / Tip 11.4 mm(3 つとも一次資料に無い ASSUMPTION)。 プラグを挿していくと、入口に一番近い「帰線(グランド)用の接点」が、 まずプラグの Tip(左チャンネル)の上を通り、次に Ring(右チャンネル)の上を通ります。
下の表はジャック内部の接点位置とパッド幅を、現在の仮定値に固定したときの計算結果です。 それらは一次資料に無い仮定なので、深さの数字はそのぶん動きます。
| 事象 | 下表の値 | 仮定を成立範囲いっぱいに振ったときの幅 |
|---|---|---|
| Ring↔Sleeve 橋絡が始まる | 11.78 mm | 6.96〜13.14 mm |
| Ring 側ブレーク接点が開く | 8.06 mm | 8.00〜12.33 mm |
8.06 は 0.02 mm 刻みの走査値です。二分法で詰めると 8.05 になります(docs/SENSITIVITY.md)。差は刻みの粒度で、食い違いではありません。
振れは最大 4.8 mm、しかも方向が事象ごとに違います。
橋絡は下へ −4.82 / 上へ +1.36、ブレーク接点は下へ −0.06 / 上へ +4.26。
±◯ mm のような対称な誤差ではありません。
下表の 2 桁の数字を確定値として持ち帰らないでください
(測り方は docs/SENSITIVITY.md)。
**さらに、表の全体が一律にずれる可能性もあります。**帰線接点を前面から 3.2 mm に 置いていますが、この値は同じリポジトリが記録する入口ブッシングの寸法と噛み合っていません。 両立させると接点は 3.95〜4.55 mm となり、橋絡を含む全ての深度がちょうど +1.0 mm ずれます (状態の並び・区間幅・完全挿入時の結線はいずれも変わりません)。 上の「幅」とは別種の、表全体に効く系統的なずれです(UNKNOWNS.md §3-8)。
一方、「何が起きるか」の順序は幅を持ちません。 帰線接点が Tip → Ring の順に通過すること、 その過程で Ring↔Sleeve の橋絡が起きること、Tip↔Ring の橋絡は起きないこと ―― これらは帰線接点の仮定をどう選び直しても変わりませんでした。
ブレーク接点の順序はこの「変わらない」に含めません。下の(※)のとおり、 開くしきい値を振ると値によっては一度も開かなくなるためです。 2026-08-03 まで、ここに「ブレーク接点が正しい結線より先に開くこと」も並べていました。
「何が起きるか」はほぼ決まっていて、「何 mm で起きるか」が決まっていない、という状態です。
表中の数字はすべて 0.02 mm 刻みの走査値です(正本は
artifacts/events.json)。 走査は刻みの倍数でしか値を出せないので、実際の切り替わりはその刻みの間にあります。 これはモデル内部の値であって、実物を測った値ではありません。
右の列は、帰線接点の軸位置とパッド幅を成立範囲いっぱいに振った 869 構成での幅です。 「—」は測っていないという意味で、動かないという意味ではありません。
| 深度 | 起きること | 帰線接点を振ったときの幅 |
|---|---|---|
| 3.92 mm | 最初の物理接触。帰線用接点がプラグ先端の円錐に触れる | -0.88〜5.72 |
| 3.94 mm | 最初の電気接触。帰線用接点が Tip 導体に接触(左チャンネルがグランドに落ちる) | -0.86〜8.02 |
| 6.32〜7.04 mm | 帰線用接点が第1絶縁帯を通過し、いったん回路が開く | — |
| 8.02 mm | Ring 用接点が Tip 導体に接触(右チャンネルの線に左の信号が乗る) | — |
| 8.06 mm | Ring 側ブレーク接点が開く — 機器は「挿さった」と判断するが、まだ何も正しくつながっていない | 動かず(※) |
| 8.26〜8.28 mm | 帰線用接点が第1絶縁帯の上を通る。ここでは橋絡しない(下記) | — |
| 9.44 mm | Ring 側ブレーク接点がいったん閉じ直す(先端の細くなる部分をばねが下るため) | — |
| 11.24 mm | Ring 側ブレーク接点が再び開く | — |
| 11.78 mm | 橋絡発生。帰線用接点が第2絶縁帯をまたぎ、Ring と Sleeve を同時に短絡する | 6.98〜13.14 |
| 11.96 mm | 橋絡が解消し、帰線用接点がようやく Sleeve だけに乗る | — |
| 12.34 mm | ようやく全接点が正しい導体に接触 | 12.34〜14.00 |
| 14.00 mm | 完全挿入 | 動かない(幾何で決まる) |
**(※)ブレーク接点の「動かず」は要注意です。**振ったのは帰線接点の 2 つだけなので、 ブレーク接点は自分のパラメータを振られていません。その開くしきい値 (0.05 mm・ASSUMPTION)を成立範囲で振ると、開く深さは 8.00〜12.33 mm まで動き、 0.4 以上では一度も開きません。「幅 0」はこの振り方では動かないという意味です。
二分法で詰めた値(走査刻みに依存しない値)が分かっているのは 2 つだけです。 橋絡の開始 11.760、終了 11.94。表の 11.78 / 11.96 は 0.02 mm 刻みの走査値なので、 その差が刻みの粒度です。どちらもモデル内部の値で、実物の値ではありません。
つまり 「半挿しでガリッとノイズが出る」「片方しか鳴らない」「機器は挿入を検知しているのに音がおかしい」 のいずれも、この 10 mm ほどの間に順番に起きています。
この表は docs/REPORT.md §4 にも同じものがあります。文言は用途に合わせて 別々に書いていますが、深さの数字は
npm run testが両方ともartifacts/events.jsonと 突き合わせています(test/docs.test.ts)。表そのものは自動生成していません ——第2列の因果の説明は生成物に無いためです。
一見すると、パッド 0.9 mm が絶縁帯 0.7 mm より広いのだから、どちらの絶縁帯でも 両側の導体に同時に触れそうに見えます。しかしそれは軸方向しか見ていません。
**プラグの導体には高さの差があります。**Tip だけが細いのです。
| 導体 | 外半径 | 直径 |
|---|---|---|
| Tip | 最大 1.600 mm | φ3.20 |
| Ring | 1.750 mm | φ3.50 |
| Sleeve | 1.750 mm | φ3.50 |
接点はパッドの範囲内で一番高い面に乗って押し開かれます。 そこから下は、ごくわずかしか追従できません。だから絶縁帯の両側が同じ高さかどうかで 結果が分かれます。
| 絶縁帯 | 片側 | もう片側 | 高さの差 | 橋絡 |
|---|---|---|---|---|
| 第1(Tip ↔ Ring) | Tip 1.600 | Ring 1.750 | 0.15 mm ある | ❌ 起きない |
| 第2(Ring ↔ Sleeve) | Ring 1.750 | Sleeve 1.750 | 0(同じ高さ) | ✅ 起きる |
第1絶縁帯では接点が高いほうの Ring に乗るため、0.15 mm 低い Tip の面には届きません。 第2絶縁帯では両側が同じ高さなので、パッド 0.9 mm が 0.7 mm の隙間をまたいで両方に届きます。
実際の形は、冒頭の断面と橋絡のスクリーンショットで見られます (断面 / 橋絡)。 アプリ上では「断面」表示にして深度 11.8 mm 付近まで挿すと、この状態が再現できます。
つまり橋絡の成立条件は「パッド幅 > 絶縁帯幅」ではなく、 **「同じ高さの導体面どうしの間隔(0.700 mm)< パッド幅(0.9 mm)」**です。
どちらが正しいかは実物で決着できます → docs/VERIFICATION_PLAN.md (この判定は 2026-07-31 に一度直しています。経緯は CHANGELOG.md)
なおこの結論は、仮定の選び方に依存しません。
接点のドームは、押し上げられた位置から少しだけ下の面まで追従できます。この追従量を
compliance(コンプライアンス)と呼んでいます。単位は mm で、これも仮定値です。
接点が Tip 面に届いてしまう条件は「追従量 ≥ Ring と Tip の半径差」、つまり
compliance ≥ 0.150 mm。この式にパッド幅も接点位置も出てきません。
だからそれらをどう仮定し直しても結論が変わらないのです。
実際に測った境目は 0.1538 mm です。上の式の 0.150 との差 0.0038 は、 「触れている」と判定するのに要する最小の重なりぶんで、Tip 後端の斜面の上で稼ぐ必要があります。 床の 0.150 のほうは、その判定基準を変えても動きません。
採用している追従量は 0.05 mm。境目 0.1538 の約 1/3.1 です。 境目未満の範囲を 864 通り埋めて走査しても、Tip の橋絡は 1 度も出ませんでした。
**ただし「1/3.1」を余裕としてそのまま持ち帰らないでください。**これは 公称寸法かつ追従量 0.05 のときの比です。次の 2 つを同時に悪い側へ振ると、余裕は縮みます。
境目 追従量 0.05 との比 公称寸法 0.1538 3.08 倍 図面公差の最悪コーナー(φ3.45 × 絶縁帯 φ3.22) 0.1189 2.38 倍 さらに追従量そのものの採用範囲は 0.02〜0.10 mm です (UNKNOWNS.md §3-6)。その上端 0.10 と最悪コーナーを組み合わせると、 余裕は 1.19 倍しか残りません。結論は保たれますが、3.1 倍とはまったく違う強さの主張です (docs/SENSITIVITY.md §6-1)。
配布物は v0.6.24 です。
**profileId を報告文から転記しないでください。**同梱の
trs-jack-3d-release-index.v1.json から引くのが正本です
(profileId は provenance.inputDigest の先頭 12 桁で、版ごとに変わります)。
sourceRevision や main では固定しないでください
— artifact を含めてコミットすると HEAD は変わりますが、入力が同じなら inputDigest は変わりません。
配布物の中身は Half-Plug Topology Profile v3(half_plug_topology_profile.v3.*.json)と、
その検証に要る schema・evidence・入力の範囲定義・検証ツールです。
入力は同梱の verifyReleaseSourceInputs.mjs で自分で検算できます。
v0.5.0 で schema を 6 本まとめて上げました。旧版を pin した実装は 6 か所で止まります。 profile 本体はファイル名も
.v2.→.v3.へ変わるので、名前で引く lock は schema 検査に届く前に止まります。何がどう変わったかは同梱のcontract-migration.v1.jsonと、 各 artifact のcontractMigration.historyにあります(→ 条文)。
この節の版数・schema 版・ファイル名は
test/docs.test.tsが機械照合しています。 v0.1.1〜v0.4.0 の間、この節はずっと古い版を案内していました(→ 履歴)。
このプロジェクトは元々、「有線イヤホンを半挿しにすると音の質感が変わる」現象を
無線イヤホンで再現したいという目的から始まりました。その音響エミュレーター
(Half-Plug Lab)へ、接点のつながり方を渡すための出口が npm run export:half-plug です。
trs-jack-3d 決定論的な幾何・接点・回路グラフ
↓
Half-Plug Topology Profile v3 ← 中立 JSON。ここが境界
↓
Half-Plug Lab DSP 状態候補への写像は向こう側の責任
この JSON は音響係数ではありません。渡しているのは「どの端子とどの導体が つながっているか」という電気的なつながり方だけです。次の変換は明示的に禁じています。
quality(相対スコア)を接触抵抗 Ω やゲインへ換算する- 音響の分類をフィルタ係数として扱う
- 1 機種の mm 値を一般的な「挿入深度」として使う(
normalizedを併記しています) - 実測していない profile に「実物と同じ」と表示する
半挿しの音として有力な候補は 帰線(グランド)が浮く状態ですが、 この Lumberg の組み合わせの既定モデルでは、その状態が一度も現れません。 現れるのは誤接触・左右短絡・無音・正常接続です。
profile はこれを absentTopologies として機械可読な「不在」の記録にしています。
表示上だけ足すことはしません。
npm run search:topology -- --target DIFFERENCE_SIGNAL で、接点の軸位置・パッド幅・
接触ドームの追従量を振り、24,750 構成を調べました。
見出しを 2026-08-03 に直しました。 それまで「無改造で左右差分が残ります」と書いていましたが、 「無改造」が意味していたのは「このモデルの入力値を 1 つも変えていない」だけで、 市販の実物がそうなると確かめたわけではありません(統合オーダー P0-5)。
| 件数 | |
|---|---|
| 完全挿入を壊さずに成立する構成 | 1,338 |
| うちパッド幅の下限 0.3 mm を通ったもの | 879 |
| うち既定の入力値から 1 つも動かさないもの | 2 |
| variant | 成立 | 幅 0.3mm 以上 | 既定値のまま | そのときの深さ |
|---|---|---|---|---|
| 3極プラグ × 3極ジャック | 78 | 51 | 0 | — |
| 4極 CTIA × 4極ジャック | 396 | 252 | 1 | 12.79〜13.00 mm |
| 3極プラグ × 4極ジャック | 864 | 576 | 1 | 13.30〜13.52 mm |
どちらも
L → Tip 導体 / R → Ring 導体 / 帰線 → どこにも触れず
4極ジャックの帰線接点が、プラグの絶縁帯にちょうど落ちるためです。
「幅 0.3 mm 以上」を「製造しうる」と読まないでください。 0.3 mm は探索空間を切るための下限で、出典がありません。 材料・ばね応力・耐久性・成形・公差・接触圧・メーカー工程のいずれも確認していません。 artifact では
passesPadWidthHeuristicという名前にし、manufacturingVerified: falseを添えています。
上の表と同じ重さで読んでください。
| 資料 | 4極ジャックの Tip 接点 | 左右差分の区間 |
|---|---|---|
| pro-SIGNAL PS000001(唯一入手できた断面図) | 12.75 mm | 出ません(0 件) |
| Lumberg 1503 28(端子位置。本モデルの土台) | 11.30 mm | 出ます |
看板の結論は Tip 接点が 12.6 mm より浅いことを必要条件にしています。 PS000001 はその外側です。どちらが実物に近いかは決着していません (REAL_JACK_COMPARISON.md)。
4極 CTIA × 4極ジャックはごく普通の組み合わせです(マイク付きイヤホンを スマホのジャックへ半挿しにするだけ)。だからこそ、上の不確かさが効きます。
4極ジャックは Lumberg 1503 28(JEITA RC-5325A 準拠)ベースですが、 **接点そのものの位置は依然として仮定です。**図面に断面図が無いためです (UNKNOWNS.md §5-2)。
| 区分 | |
|---|---|
| 端子 6 本の軸位置 / ブレーク接点 2 個 | FACT(図面記載) |
| 端子番号 ↔ 機能の対応 | DERIVED |
| 接点そのものの軸位置 | ASSUMPTION |
**「実在部品ベースになった」は「実測された」ではありません。**実物を測った人は誰もいません。
**組み直したのは接点系だけです。**外形(ハウジング・ノーズ・ナット)は 3極 1503 09 の値を 流用したままなので、3D 表示の外形は 1503 28 の実物とは違います (1503 28 は SMT のミッドマウント品でナットを持ちません)。
残る仮定は 1 つだけです — 接点が端子より何 mm 手前にあるか (採用値 0、図面と両立する範囲 0〜1.3 mm)。その全域で区間は出ます。 動くのは深さだけで、ほぼ 1:1 で移動します。
| 根拠 | Tip 接点の軸位置 | 区間 |
|---|---|---|
| 本モデル(Lumberg 1503 28 の端子位置・メーカー公式) | 11.30 mm | 出る |
| pro-SIGNAL PS000001(接点の寸法記入・商社ブランド) | 12.75 mm | 出ない |
4極ジャックのデータシートを 13 方面・170 型番探した結果、 接点位置そのものが寸法記入された図面は 1 件だけでした(PS000001)。 その値を入れると区間は 1 つも出ません。分かれ目は Tip 接点が 12.6 mm より浅いことです。
証拠の種類が違うので、資料だけでは決まりません。 本モデルは前者を採っていますが、それは選択であって決着ではありません。
経緯・図面の照合方法は
docs/REAL_JACK_COMPARISON.md(npm run compare:real-jack)。
実物で確かめる手順は docs/VERIFICATION_PLAN.md §2-2 です。
探索結果の構成はすべて evidenceGrade: ASSUMPTION です。
「3.5 mm ジャック一般でこうなる」とは言えません。
| 版 | 内容 |
|---|---|
| v0.1.0 | TRS モデルの感度解析値が TRS×TRRS profile へ混入。v0.1.1 で修正(区間・electricalTopology・provenance には影響なし) |
| v0.2.0〜v0.3.0 | この README が配布物として v0.1.1 を案内し続けていた。v0.4.1 で機械照合を入れて修正 |
| v0.4.0 | test_counts.json の allPassed が false。実際は全件通過で、件数・内訳は正しい。v0.4.1 で生成手順を直し、配布側で拒否するようにした |
| 区分 | 件数 | 意味 |
|---|---|---|
| FACT | 53 | メーカーデータシートに数値として直接記載されている |
| DERIVED | 28 | 記載寸法から演算、または図面を実測して導出した |
| ASSUMPTION | 54 | 資料が無いため明示的に置いた仮定 |
| UNKNOWN | 0 | (未確認のまま数値化した項目は無い。未確認事項は UNKNOWNS.md に文章で列挙) |
アプリ内の「根拠」タブで、全ての寸法キーについて値・区分・出典を確認できます。 「根拠区分表示」を押すと 3D の各部品が区分ごとの色に変わります。
- 何がいつ変わったか(訂正の履歴を含む)→ CHANGELOG.md
- 詳しい出典 → SOURCES.md
- 仮定の一覧と理由 → ASSUMPTIONS.md
- 未確認事項・資料の矛盾 → UNKNOWNS.md
- 第三者資料(図面・CAD)の扱い → THIRD_PARTY_NOTICES.md
- 検証結果 → docs/TEST_RESULTS.md
- 仮定を振ったときに何が動くか → docs/SENSITIVITY.md
- Half-Plug Lab へ渡す仕様 → docs/HALF_PLUG_ADAPTER.md
- 実物との突き合わせ計画 → docs/VERIFICATION_PLAN.md(実測してくださる方を募集中。メンテナ自身は実施しません)
重要: 外形寸法はメーカー公開図面に基づきますが、ジャック内部の接点ばねの寸法は どのデータシートにも CAD にも含まれていません。内部接点はデータシートの回路記号、 基板レイアウト図の端子位置、および「完全挿入時に正しく結線されねばならない」という 幾何条件から独自に構成したもので、DERIVED または ASSUMPTION です。
また メーカー CAD は再配布が禁止されているため、本プロジェクトには一切含まれていません。 3D 形状はすべて公開寸法から自前で生成しています(THIRD_PARTY_NOTICES.md)。
| ファイル | 内容 |
|---|---|
contact_sweep.json |
0.02 mm 刻みで全域を走査した接点状態(1451 行) |
force_curve.json |
推定挿抜力曲線と内訳 |
events.json |
挿入経路上の主要イベントと状態変化 |
variant_matrix.json |
プラグ 3 種 × ジャック 2 種の全組み合わせ比較 |
verification_summary.json |
寸法検証・完全挿入/抜去時の結線・根拠区分の内訳 |
ui_verification.json |
実ブラウザでの UI 検証 27 項目の結果 |
perf_real_gpu.json |
実 GPU (Apple M5) でのフレームレートと描画コスト |
touch_verification.json |
タッチ操作の検証 20 項目の結果 |
sensitivity.json |
仮定パラメータの感度解析の生データ(→ docs/SENSITIVITY.md) |
half_plug_topology_profile.v3.*.json |
接点トポロジーの中立表現(variant ごと)。音響係数ではありません |
topology_search_difference_signal.json |
左右差分が残る構成の探索結果(npm run search:topology・約 10 分) |
real_jack_comparison.json |
実在部品の図面値との突き合わせ(npm run compare:real-jack)。看板の結論が実在図面 1 件と食い違うことを記録しています |
test_counts.json |
テスト件数と内訳(npm run test:count)。文書の件数はこれと機械照合します |
sensitivity.json だけは npm run artifacts では作られません。**npm run sensitivity
(単独・実行に 15 分ほど)**で生成します。二分法を何万回も回すため他の成果物より桁違いに重く、
CI で回すものではありません。仮定の値や範囲を変えたときだけ手動で流し直してください。
乱数は使っていないので、同じ入力なら何度実行しても同じ結果になります。
実 GPU (Apple M5 / Chrome / ANGLE Metal) で測定した結果、 1440×900 @2x と 1920×1080 @2x のどちらでも、静止時・挿抜アニメ中・低負荷モードの 全条件で fps 59.9(60 Hz vsync の上限)に達しています。 最大フレーム時間は 19.4 ms 以下で、33 ms を超えるフレーム落ちは 0 件でした。 1 フレームの描画コストは 0.08〜0.10 ms で、16.7 ms の予算の 0.5〜0.6 % です。
「低負荷モード」は Apple M5 では効果がありません(すでに削る必要が無いため)。 一方、ソフトウェアラスタ環境では 2〜2.9 倍速くなり、 フィルレートが足りない環境では意図どおり効くことを確認しています (倍率は測定時の CPU の混み具合で動きます)。 詳細は docs/TEST_RESULTS.md §5。
- 接触抵抗の実測値は出しません。完全接触時のみメーカー公称値 (≤30 mΩ) を「仕様値」として表示し、 不完全接触時は 0〜1 の相対スコアのみを出します(Ω に換算していません)。
- 挿抜力は有限要素解析ではありません。エネルギー法による近似で、摩擦係数とばね定数は仮定値です。 **とくにばね定数は、完全接点あたりの押付力が「別メーカーの技術資料」の範囲に収まるよう 逆算した値です。**モデル化した Lumberg 1503 09 自身のばね諸元は公開されていません (SOURCES.md §6。この値を 1503 09 の仕様として表示してはいません)。 曲線全体は、ジャック側データシートの公称挿抜力レンジに合わせて校正しています。
- 音響予測は回路接続からの簡易推定であり、特定製品の実際の音を保証しません。
- 4極 (TRRS) の導体境界は 2 社の図面記載寸法からの演算 (FACT) ですが、 4極ジャックの内部接点位置は一次図面が無く全面的に仮定です。 詳細は ASSUMPTIONS.md の TRRS 節を参照してください。 ただし橋絡が起きるかどうかは、この仮定にほとんど依存しません。 条件はパッド幅が同一半径のプラトー間隔 0.700 mm(=図面記載の絶縁帯幅)を 超えるかどうかだけで、接点位置を成立範囲いっぱいに振ってもしきい値は 0.720 mm から動きませんでした(docs/SENSITIVITY.md §4)。 0.700 と 0.720 の差 0.020 は、両側の導体に「触れている」と判定するのに要する 最小の重なり(片側 0.01 mm)を 2 か所ぶん足したものです。
- タッチ操作は iOS Safari (iPhone 17 シミュレータ / iOS 26.4) と、iPhone/iPad 相当ビューポートの Chromium 自動テストの 2 系統で確認しました。物理的な iPhone / iPad では未検証です。
- 性能測定は Apple M5 / 60 Hz ディスプレイ 1 台のみです。他の GPU、120 Hz 環境、 実際の低性能端末では未測定です。
TypeScript / React 19 / Vite / Three.js / React Three Fiber / drei / zustand / Vitest (単体) / Playwright (実ブラウザ検証)。
3D の 1 unit = 1 mm です。物理エンジンは使っていません (電気的接触の正解判定を汎用物理エンジンに委ねてはならないため)。
外部ホストへの通信はありません。 3D 内テキストのフォントも同梱しています
(未指定だと drei の <Text> が実行時に CDN からフォントを取りに行くため)。
ページ読み込み時の外部リクエストが 0 件であることを Playwright で実測しています。
コードと、それ以外(データ・生成物・文書)と、同梱フォントで分かれています。 どのファイルがどれに当たるかは LICENSING.md にまとめてあります。
| 対象 | ライセンス |
|---|---|
ソースコード(src/・scripts/・test/・設定) |
MIT → LICENSE |
| 寸法データ・生成成果物・スクリーンショット・文書 | CC BY 4.0 → LICENSE-ASSETS.md |
同梱フォント(public/fonts/) |
SIL OFL 1.1(Noto Sans JP のサブセット)→ public/fonts/README.md |
| メーカーのデータシート・CAD・図面 | 本リポジトリに含まれていません → THIRD_PARTY_NOTICES.md |
3D 形状はすべて公開寸法から自前で生成したもので、メーカー CAD の派生物ではありません。 「Lumberg」は Lumberg Holding GmbH & Co. KG の商標です。本プロジェクトは同社と関係がなく、承認も受けていません。
設計・製造・調達の根拠には使わないでください(→ 冒頭「使える用途/使えない用途」)。 ジャック内部の寸法は 32 件の仮定を含み(仮定は全体で 54 件)、 実物と突き合わせた検証はまだ済んでいません(UNKNOWNS.md)。



