公差の積み上げ(スタックアップ)をブラウザだけで計算する Web ツールです。インストールは不要で、計算は端末内で完結し、入力したデータは外部に送信しません。画面の字体(BIZ UDPゴシック・IBM Plex Mono)は Google Fonts から読み込むため、開いたときに Google のサーバーへ接続します(入力したデータは送りません)。
https://kotaooka.github.io/stackup-calc/
- ワーストケース・統計(RSS)・補正RSS・モンテカルロを同時に計算し、規格に対する判定(合格/条件付き/不合格)を出す
- 寸法だけでなく、輪郭度・位置度(Ⓜ のボーナス公差)・組付けの遊びも寄与項目として扱える
- 2次元のベクトルループ(すき間と段差の2方向)にも対応
- どの項目が効いているか(寄与率)、どこまで公差を詰める/緩められるか(逆算)までを1画面で確認できる
初めて開くと例題(ハウジング内幅に部品A・B・スペーサ等を並べたときのすき間)が入っている。まずはこれを触ってみるのが早い。
左の「寄与項目」に、すき間を決める寸法を1行ずつ入れる。
| 欄 | 入れるもの |
|---|---|
| 種類 | 寸法 / 輪郭度など / 位置度 / 組付けの遊び |
| 係数 | すき間を広げる寸法は 1、狭める寸法は -1。てこ比などがあればその値(感度係数) |
| 分布 | 正規(±3σ)、一様、三角、Cpk 指定(平均のずれも入れられる)、実測(平均・σ) |
| 基準寸法・許容差 | 図面の値。上下非対称でもよい |
+ 寸法 + 輪郭度など などのボタンで行を追加する。下の「規格(任意)」にすき間の下限・上限を入れると判定が出る。入力を変えると結果はすぐ更新される(モンテカルロだけは入力が止まってから別スレッドで計算する)。
右上の「結果」に各計算方式の範囲と、出力の Cpk・規格外れ率が並ぶ。一番下の枠が判定。
| 判定 | 意味 |
|---|---|
| 合格 | 全部品が公差内である前提が成り立ち、ワーストケースでも規格内 |
| 条件付き | ワーストケースでは規格外だが、統計(モンテカルロがあれば 0.135〜99.865%、なければ ±3σ)では規格内 |
| 不合格 | 統計でも規格外 |
実測分布で平均±3σ が公差域をはみ出す項目や、Cpk が 1 未満の項目を含むときは「全部品が公差内」の前提が崩れるため、ワーストケースでの合格判定はしない。
上段が「すき間を広げる側」、下段が「狭める側」。その差が右端の緑の「すき間」になる。下半分は各項目の公差がワーストケースでどう積み上がるか(内訳)と、ワーストケース・統計・モンテカルロの範囲を規格線と並べて表示する。
- 上のチップ(
+ 寸法(広げる側)など)を図にドラッグすると部品を追加できる - ブロックを左右にドラッグすると並べ替え、上下の段に移すと係数の符号が反転する
- ブロック右端の ○ をドラッグすると基準寸法、内訳の行の端をドラッグすると公差、緑の線で規格を変えられる
モンテカルロのヒストグラムと正規近似の曲線に、規格線(緑)を重ねる。規格線は左右にドラッグして動かせる。
青が統計(分散の割合)、灰色がワーストケース(|係数|×公差の半幅 の割合)。この例では「締結の遊び」が分散の約6割を占めていて、対策するならここ、と分かる。行を左右にドラッグすると、その項目の公差幅を変えられる(公差域の中心は保ったまま)。
目標(出力の Cpk ≥ 指定値、またはワーストケースで規格内)を満たすのに必要な公差を2通りで出す。
- 案A:全項目を同じ倍率で変える場合の倍率
- 案B:1項目だけ変える場合の、各項目の必要公差(効きやすい順)
この案を反映 / 反映 を押すと入力に書き戻される。平均が規格中心からずれていれば、そのずれ量も表示する。
ケース名を入れて 現在の入力を保存 を押すと、その時点の入力と結果が一覧に残る。入力を変えてもう一度保存すれば、結果が横に並ぶ。上の例は「締結の遊び」の穴・軸公差を詰めたときの比較で、Cpk が 1.42 → 1.53 になっている。呼び出す で保存した入力に戻せる。
上部のタブで「2次元ベクトルループ」に切り替える。
- 「ベクトル」に、長さ(mm)と角度(°)を順に入れてループをつなぐ。角度は「x軸から」または「前のベクトルから」で指定できる。長さ・角度それぞれに許容差と分布を設定する
- 「出力の設定」に目標点と測定方向を入れると、終点の目標点からのずれを**2方向(すき間・段差)**に分けて評価する。感度係数は数値微分で自動的に求める
- ベクトル図の先端の ○ をドラッグすると、長さと角度を直接変えられる。右の枠は目標点付近の拡大表示
結果・分布・寄与率・逆算・ケース比較は1次元と同じように使える(出力が2つになる)。
| 機能 | 操作 |
|---|---|
| 元に戻す/やり直す | 画面右上のボタン、または Ctrl+Z / Ctrl+Y |
| 共有URL | 入力を URL の # 以降に圧縮して埋め込む。URL を渡せば相手の画面で同じ入力が開く(サーバーには送られない) |
| レポート印刷 | 印刷用レイアウトで出力する。ブラウザの印刷で「PDF に保存」を選べば PDF になる |
| JSON で書き出し/読み込み | 入力をファイルに保存・復元する |
| 自動保存 | 入力内容とケース一覧はこの端末のブラウザに自動で保存される |
| オフライン・アプリとして使う | 一度開けば、通信がなくても使える。スマホは「ホーム画面に追加」、PC の Chrome・Edge はアドレスバーの「インストール」でアプリとして起動できる |
| モンテカルロの回数 | 「計算の設定」で 1万〜100万回から選ぶ。乱数の種は固定なので、同じ入力なら同じ結果になる |
| 方式 | 内容 |
|---|---|
| ワーストケース | Σ |係数| × 公差の半幅 |
| 統計(±3σ) | 各項目の分布から求めた σ に感度係数を掛け、二乗和平方根をとったものの ±3σ。全項目が正規分布(±3σ)なら従来の RSS と一致する |
| 補正RSS | 従来の RSS に 1.5 を掛けたもの(Bender) |
| モンテカルロ | 各項目を指定分布から発生させて出力を計算し、0.135〜99.865% 点を範囲とする |
push のたびに GitHub Actions で 2 種類のテストを実行しています。
- 独立した検算(
tests/verify.py):例題をエンジンで計算し、同じ考え方を Python で書き直した計算と照合します。ワーストケースは全組み合わせの総当たり、判定と公差の逆算は目標の境界にあることまで確かめます - 答えが数学的に分かっている例題との照合(
tests/analytic.js):分布の和の確率が式で正確に求まる例題で、各方式の答えを確かめます
| 例題 | 正解の出し方 | 確かめるもの |
|---|---|---|
| 正規分布の寸法 4 個の和。規格を平均 ±3σ・±4σ・±5σ に置く | 和も正規分布。規格外れ率は標準正規分布の裾の確率(2,699.796 ppm・63.342 ppm・0.573 ppm)、出力の Cpk は 1.00・1.33・1.67 | ワーストケース・RSS・補正RSS の半幅、σ、出力の Cpk、正規近似とモンテカルロの規格外れ率 |
| 一様分布の寸法 2・3・4・6 個の和 | Irwin–Hall 分布の累積分布関数(多項式で正確に求まる) | σ、モンテカルロの規格外れ率 |
| 三角分布の寸法 1 個 | 裾の確率 (h − a)² / h² | σ、モンテカルロの規格外れ率 |
| Cpk と平均のずれを指定した寸法 1 個 | 公差を規格にすると、出力の Cpk は指定した Cpk に戻る | σ、出力の Cpk |
- モンテカルロ(40 万回)の規格外れ率は、正解との差が二項分布の標準誤差の 5 倍以内なら合格としています。乱数の種を固定しているので結果は毎回同じです
- 正規近似の規格外れ率は、エンジンの累積分布関数の近似(誤差 1.5×10⁻⁷ 以下)を見込んで ±0.3 ppm で比べています
- テストが誤りを検出できることは、三角分布の発生を 2% 広げると不合格になることで確かめています
src/
template.html 画面(HTML・CSS)
engine.js 計算エンジン(画面に依存しない。Node・Web Worker からも読み込む)
ui.js 画面の処理・図の描画・ドラッグ操作・逆算・ケース比較・共有URL・レポート
tools/build.py src/ をまとめて docs/index.html を生成
tests/
cases.js 例題をエンジンで計算して tests/out.json に書き出す
verify.py 結果を Python で独立に計算し直して照合する(ワーストケースの総当たり、判定、逆算の境界を含む)
analytic.js 答えが数学的に分かっている例題(正規分布の裾、Irwin–Hall 分布、三角分布)と照合する
tools/screenshots.py docs/images/ を撮り直す
tools/make_icons.py docs/icons/ を作る
docs/index.html ビルド結果(GitHub Pages の公開対象)
docs/sw.js Service Worker(オフライン用のキャッシュ)
docs/manifest.webmanifest PWA の設定
docs/icons/ アプリのアイコン
docs/images/ README 用のスクリーンショット
python tools/build.py
node tests/cases.js
python tests/verify.py
node tests/analytic.js
公開するファイル(docs/ の中)を変えたら、docs/sw.js の VERSION を上げる(上げないと、インストール済みの PWA に古い版が残る)。公開するファイルを増やしたら ASSETS にも足す。
スクリーンショットは Google Fonts が読めない環境でも日本語字形で写るよう、fontsource のローカルファイルに差し替えて撮る(読めていなければ中断する)。例題を読み込んだ状態をダーク表示・1440×900・1.5 倍で撮影する。
# 任意の作業フォルダで
npm pack @fontsource/biz-udpgothic @fontsource/ibm-plex-mono
Get-ChildItem *.tgz | ForEach-Object { tar -xzf $_.Name --one-top-level }
pip install playwright pillow
python -m playwright install chromium
# リポジトリのフォルダで
python tools/build.py
python tools/screenshots.py <フォント展開先フォルダ>
python tools/make_icons.pyプッシュすると GitHub Actions(.github/workflows/test.yml)で同じ手順が自動で実行され、docs/index.html がビルド結果と一致しているかも確認される。






