作ったもの
Recipe Scale — https://sen.ltd/portfolio/recipe-scale/
- 混合分数・小数・Unicode 分数 (½, ¼, ⅓) のパース
- 英語単位(cup / tbsp / tsp / oz / lb / g / kg / ml / l)
- 日本料理単位(大さじ / 小さじ / 杯 / 個 / 本 / 片)
- メトリック ↔ インペリアル変換
- スマート分数表示(0.75 → ¾)
- ペースト後の個別編集
vanilla JS、ゼロ依存、ビルド不要。node --test で 65 ケース。
パーサの優先順位
"1 1/2 cups flour" → 1.5 cups flour
"1½ cups flour" → 1.5 cups flour
"大さじ 2 の醤油" → 大さじ 2 の醤油
"salt to taste" → 数量なし
混合分数(1 1/2)→ 小数(1.5)→ 分数(1/2)→ Unicode(½)の順にチェック。順序を間違えると 1 1/2 が 1 と 1/2 に分かれてしまう。
スマート分数表示
const FRACTIONS = [
{ value: 0.25, symbol: '¼' },
{ value: 0.333, symbol: '⅓' },
{ value: 0.5, symbol: '½' },
{ value: 0.667, symbol: '⅔' },
{ value: 0.75, symbol: '¾' },
];
for (const f of FRACTIONS) {
if (Math.abs(frac - f.value) < 0.01) return `${whole}${f.symbol}`;
}
許容誤差 0.01 で 1/3(0.333...)や 2/3(0.666...)の float 誤差を吸収。1.5 → 1½、0.25 → ¼、2.75 → 2¾。
日本単位
- 大さじ = 15ml(tbsp と同じ)
- 小さじ = 5ml(tsp と同じ)
- 個 / 本 / 片: 個数単位、変換せずスケーリングのみ
英語単位との相互変換が自然にできるので、海外レシピを日本の計量器で使える。
単位変換は正準単位経由
const TO_ML = { 'cup': 240, 'tbsp': 15, 'tsp': 5, '大さじ': 15, '小さじ': 5 };
全単位 → ml → 全単位。15×15 の 225 定数の代わりに 15 定数だけ。新単位の追加はテーブルに 1 行追加するだけ。
シリーズ
100+ 公開ポートフォリオ シリーズの #65 です。
