最近の投稿

レシピビルダー | OG/FG/ABV/IBU/SRM自動計算

この記事をシェアする

この記事は約19分で読めます。
About me

About Me

りほのプロフィール画像

りほ

ITエンジニア兼ビアジャッジ

IT技術とビール愛を融合させた活動を展開中。日本のビアジャッジ資格保持者として2024年JGBAでの審査経験あり。現在はシアトル拠点で、日米のクラフトビール文化を比較しながら、情熱を注いでいます。趣味でビール関連アプリの開発も行っています(詳細はGitHubにて)。

ブルワリー向けにWebサイト刷新、SEO対策、AIを活用したペルソナ分析、プロンプトエンジニアリングなど、IT知識を活かしたサポートが可能です。「ブルワリーの魅力が正しく伝わる世界」を目指して、純粋な情熱でクラフトビールを応援しています。ビールとテクノロジーの融合についてご興味があれば、お気軽にご連絡ください🍻



.rb-wrap{max-width:760px;margin:0 auto}
.rb-nav{margin-bottom:20px;font-size:.9em}
.rb-nav a{color:#D97706}
.rb-section{background:#f9f9f9;border-radius:12px;padding:16px;margin-bottom:16px}
.rb-section h3{margin:0 0 12px;font-size:1em;color:#92400e}
.rb-row{display:flex;gap:10px;margin-bottom:10px;flex-wrap:wrap;align-items:end}
.rb-field{flex:1;min-width:100px}
.rb-field.narrow{flex:0 0 80px;min-width:70px}
.rb-label{display:block;font-size:.82em;color:#888;margin-bottom:3px}
.rb-input,.rb-select{width:100%;padding:7px;border:2px solid #ddd;border-radius:6px;font-size:.92em;box-sizing:border-box}
.rb-input:focus,.rb-select:focus{border-color:#F59E0B;outline:none}
.rb-hint{font-size:.78em;color:#aaa;margin-top:2px}
.rb-btn{padding:7px 14px;border:none;border-radius:6px;cursor:pointer;font-size:.9em;font-weight:bold}
.rb-btn-add{background:#F59E0B;color:#fff}
.rb-btn-add:hover{background:#D97706}
.rb-btn-del{background:#fee2e2;color:#dc2626;padding:4px 8px;font-size:.8em}
.rb-btn-del:hover{background:#fecaca}
.rb-item{display:flex;gap:8px;align-items:center;padding:6px 8px;background:#fff;border-radius:6px;margin-bottom:4px;font-size:.88em;flex-wrap:wrap}
.rb-item span{flex:1;min-width:120px}
.rb-result{background:#FFFBEB;border:2px solid #F59E0B;border-radius:12px;padding:16px;margin-bottom:16px}
.rb-result h3{margin:0 0 12px;color:#92400e}
.rb-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}
.rb-stat{background:#fff;border-radius:8px;padding:10px;text-align:center;border:1px solid #f0e0b0}
.rb-stat-val{font-size:1.4em;font-weight:bold;color:#D97706}
.rb-stat-label{font-size:.78em;color:#888;margin-top:2px}
.rb-color-bar{height:30px;border-radius:6px;margin:12px 0;border:1px solid #ddd}
.rb-summary{display:flex;gap:12px;margin-top:12px;flex-wrap:wrap;font-size:.88em}
.rb-summary div{flex:1;min-width:140px;background:#fff;padding:8px;border-radius:6px;border:1px solid #f0e0b0}
.rb-xlinks{margin-top:20px;padding:12px;background:#f0f9ff;border-radius:8px;font-size:.85em}
.rb-xlinks a{color:#D97706;text-decoration:none;font-weight:bold}
.rb-xlinks a:hover{text-decoration:underline}
.rb-legal{margin-top:24px;padding:12px;background:#FFF3CD;border-radius:8px;font-size:.8em;line-height:1.5}
@media(max-width:480px){
.rb-row{flex-direction:column}
.rb-field.narrow{flex:1;min-width:100%}
.rb-stats{grid-template-columns:repeat(2,1fr)}
.rb-input,.rb-select{font-size:16px;min-height:44px}
}

グレイン・ホップ・酵母を組み合わせてOG/FG/ABV/IBU/SRMを自動計算する簡易レシピビルダーです。

バッチ設定

グレイン(穀物・モルト)

ホップスケジュール

酵母

(function(){
// — Grain DB —
const GRAINS={
pale_2row:{n:’ペールモルト(2-Row)’,ppg:37,lov:1.8},
pilsner:{n:’ピルスナーモルト’,ppg:36,lov:1.5},
maris_otter:{n:’マリスオッター’,ppg:38,lov:3},
vienna:{n:’ウィンナモルト’,ppg:35,lov:3.5},
munich_light:{n:’ミュンヘンモルト(ライト)’,ppg:34,lov:10},
munich_dark:{n:’ミュンヘンモルト(ダーク)’,ppg:34,lov:20},
wheat:{n:’小麦モルト’,ppg:37,lov:2},
rye:{n:’ライモルト’,ppg:29,lov:3.5},
oats_flaked:{n:’フレークドオーツ’,ppg:33,lov:1},
crystal_20:{n:’クリスタル 20L’,ppg:34,lov:20},
crystal_40:{n:’クリスタル 40L’,ppg:34,lov:40},
crystal_60:{n:’クリスタル 60L’,ppg:34,lov:60},
crystal_80:{n:’クリスタル 80L’,ppg:34,lov:80},
crystal_120:{n:’クリスタル 120L’,ppg:33,lov:120},
chocolate:{n:’チョコレートモルト’,ppg:28,lov:350},
black_patent:{n:’ブラックパテントモルト’,ppg:25,lov:500},
roasted_barley:{n:’ローストバーレイ’,ppg:25,lov:300},
carapils:{n:’カラピルス’,ppg:33,lov:1.5},
honey_malt:{n:’ハニーモルト’,ppg:34,lov:25},
biscuit:{n:’ビスケットモルト’,ppg:35,lov:23},
aromatic:{n:’アロマティックモルト’,ppg:35,lov:20},
smoked:{n:’スモークモルト’,ppg:34,lov:2},
dme:{n:’DME(ドライモルトエキス)’,ppg:44,lov:8},
lme:{n:’LME(リキッドモルトエキス)’,ppg:36,lov:8},
};

// — Yeast DB —
const YEASTS={
us05:{n:’US-05 / American Ale’,att:77,tmin:15,tmax:24},
s04:{n:’S-04 / English Ale’,att:73,tmin:15,tmax:24},
nottingham:{n:’Nottingham’,att:80,tmin:14,tmax:21},
belle_saison:{n:’Belle Saison’,att:90,tmin:17,tmax:35},
k97:{n:’K-97 / German Wheat’,att:78,tmin:15,tmax:24},
w34_70:{n:’W-34/70 / German Lager’,att:81,tmin:9,tmax:15},
s23:{n:’S-23 / Lager’,att:80,tmin:9,tmax:15},
wlp001:{n:’WLP001 / California Ale’,att:76,tmin:16,tmax:22},
wlp002:{n:’WLP002 / English Ale’,att:66,tmin:16,tmax:22},
wlp530:{n:’WLP530 / Abbey Ale’,att:78,tmin:19,tmax:24},
wy1056:{n:’Wyeast 1056 / American Ale’,att:75,tmin:16,tmax:22},
wy3068:{n:’Wyeast 3068 / Weihenstephan’,att:76,tmin:18,tmax:24},
wy1762:{n:’Wyeast 1762 / Belgian Abbey’,att:77,tmin:18,tmax:24},
};

const SRM_HEX=[
[0,’#FFE699′],[1,’#FFD878′],[2,’#FFCA5A’],[3,’#FFBF42′],[4,’#FBB123′],
[5,’#F8A600′],[6,’#F39C00′],[7,’#EA8F00′],[8,’#E58500′],[9,’#DE7C00′],
[10,’#D77200′],[11,’#CF6900′],[12,’#CB6200′],[13,’#C35900′],[14,’#BB5100′],
[15,’#B54C00′],[16,’#B04500′],[17,’#A63E00′],[18,’#A13700′],[19,’#9B3200′],
[20,’#952D00′],[25,’#751607′],[30,’#58032A’],[35,’#420217′],[40,’#2C010A’],
];

let grainList=[];
let hopList=[];

// Init selects
const gs=document.getElementById(‘rb-grain-sel’);
for(const[k,v]of Object.entries(GRAINS)){
const o=document.createElement(‘option’);o.value=k;o.textContent=v.n;gs.appendChild(o);
}
const ys=document.getElementById(‘rb-yeast’);
for(const[k,v]of Object.entries(YEASTS)){
const o=document.createElement(‘option’);o.value=k;o.textContent=v.n;ys.appendChild(o);
}

// Preload a simple pale ale recipe
grainList=[{key:’pale_2row’,wt:4.5},{key:’crystal_40′,wt:0.3}];
hopList=[{wt:25,aa:11,min:60},{wt:30,aa:6,min:5}];

function esc(s){return String(s).replace(/[&”‘]/g,c=>({‘&’:’&’,”:’>’,'”‘:’"’,”‘”:”'”}[c]));}

function renderGrains(){
const el=document.getElementById(‘rb-grain-list’);
el.innerHTML=grainList.map((g,i)=>{
const info=GRAINS[g.key];
return `

${esc(info.n)} — ${g.wt}kg

`;
}).join(”);
}

function renderHops(){
const el=document.getElementById(‘rb-hop-list’);
el.innerHTML=hopList.map((h,i)=>{
return `

${h.wt}g / α${h.aa}% / ${h.min}分

`;
}).join(”);
}

window.addGrain=function(){
const key=document.getElementById(‘rb-grain-sel’).value;
const wt=parseFloat(document.getElementById(‘rb-grain-wt’).value)||1;
grainList.push({key,wt:Math.round(wt*100)/100});
renderGrains();calc();
};

window.delGrain=function(i){grainList.splice(i,1);renderGrains();calc();};

window.addHop=function(){
const wt=parseFloat(document.getElementById(‘rb-hop-wt’).value)||30;
const aa=parseFloat(document.getElementById(‘rb-hop-aa’).value)||10;
const min=parseInt(document.getElementById(‘rb-hop-min’).value)||60;
hopList.push({wt,aa,min});
renderHops();calc();
};

window.delHop=function(i){hopList.splice(i,1);renderHops();calc();};

function r(v,d){const f=10**d;return Math.round(v*f)/f;}

function srmToHex(srm){
if(srm=0;i–){if(srm>=SRM_HEX[i][0])return SRM_HEX[i][1];}
return SRM_HEX[0][1];
}

window.calc=function(){
const vol=parseFloat(document.getElementById(‘rb-vol’).value)||20;
const eff=(parseFloat(document.getElementById(‘rb-eff’).value)||72)/100;
const yeastKey=document.getElementById(‘rb-yeast’).value;
const customAtt=document.getElementById(‘rb-att’).value?parseFloat(document.getElementById(‘rb-att’).value):null;
const yeast=YEASTS[yeastKey];

// OG
const bGal=vol*0.264172;
let totalPts=0;
for(const g of grainList){
const info=GRAINS[g.key];if(!info)continue;
const lbs=g.wt*2.20462;
const e=(g.key===’dme’||g.key===’lme’)?1:eff;
totalPts+=info.ppg*lbs*e;
}
const og=grainList.length?r(1+totalPts/(bGal*1000),3):1;

// FG
const att=(customAtt||yeast.att)/100;
const fg=r(1+(og-1)*(1-att),3);

// ABV
const abv=r((og-fg)*131.25,1);

// IBU (Tinseth)
let ibu=0;
for(const h of hopList){
const big=1.65*Math.pow(0.000125,og-1);
const bf=(1-Math.exp(-0.04*h.min))/4.15;
const util=big*bf;
const mgL=(h.aa/100)*(h.wt*1000)/vol;
ibu+=util*mgL;
}
ibu=r(ibu,1);

// SRM (Morey)
let mcu=0;
for(const g of grainList){
const info=GRAINS[g.key];if(!info)continue;
mcu+=(g.wt*2.20462*info.lov)/bGal;
}
const srm=mcu>0?r(1.4922*Math.pow(mcu,0.6859),1):0;
const ebc=r(srm*1.97,1);
const hex=srmToHex(srm);

// BU:GU
const gu=(og-1)*1000;
const bugu=gu>0?r(ibu/gu,2):0;

// Total weights
const totalGrain=r(grainList.reduce((s,g)=>s+g.wt,0),2);
const totalHop=grainList.length?hopList.reduce((s,h)=>s+h.wt,0):0;

// Balance description
let balance=’バランス’;
if(bugu<0.4)balance='モルティ(甘め)';
else if(bugu<0.6)balance='ややモルティ';
else if(bugu<0.8)balance='バランス';
else if(bugu<1.0)balance='ややホッピー';
else balance='ホッピー(苦め)';

let html=`

レシピ計算結果

`;
html+=`

`;
html+=`

${og.toFixed(3)}
OG(初期比重)

`;
html+=`

${fg.toFixed(3)}
FG(最終比重)

`;
html+=`

${abv}%
ABV

`;
html+=`

${ibu}
IBU

`;
html+=`

${srm}
SRM

`;
html+=`

${ebc}
EBC

`;
html+=`

`;
html+=`

`;
html+=`

`;
html+=`

BU:GU ${bugu} — ${esc(balance)}

`;
html+=`

減衰率 ${r(att*100,0)}%(${esc(yeast.n)})

`;
html+=`

発酵温度 ${yeast.tmin}-${yeast.tmax}°C

`;
html+=`

穀物合計 ${totalGrain}kg / ホップ ${totalHop}g

`;
html+=`

`;

document.getElementById(‘rb-result’).innerHTML=html;
};

// Init
renderGrains();renderHops();calc();
})();

{“@context”:”https://schema.org”,”@graph”:[{“@type”:”WebApplication”,”name”:”レシピビルダー”,”description”:”グレイン・ホップ・酵母からOG/FG/ABV/IBU/SRMを自動計算する簡易レシピビルダー。24種のモルトと13種の酵母プリセット付き。”,”url”:”https://rihobeer.com/tools/recipe/”,”applicationCategory”:”UtilitiesApplication”,”operatingSystem”:”Web Browser”,”offers”:{“@type”:”Offer”,”price”:”0″,”priceCurrency”:”JPY”},”inLanguage”:”ja”},{“@type”:”FAQPage”,”mainEntity”:[{“@type”:”Question”,”name”:”ビールのOG(初期比重)はどう決まりますか?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”OGはグレイン(穀物)の種類・量とマッシュ効率から決まります。PPG(Points Per Pound per Gallon)にモルトの重量と効率をかけて算出します。一般的なペールエールのOGは1.045〜1.060です。”}},{“@type”:”Question”,”name”:”マッシュ効率とは何ですか?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”マッシュ効率は、穀物から実際に抽出できる糖分の割合です。初心者は65〜70%、経験者は72〜78%が一般的です。DMEやLMEは効率100%で計算されます。”}},{“@type”:”Question”,”name”:”IBUはどう計算されますか?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”IBU(国際苦味単位)はTinseth式で計算します。ホップの重量・α酸含有率・煮沸時間・OG・バッチサイズが関係します。煮沸時間が長いほど苦味が増し、0分(フレームアウト)ではほぼ0IBUです。”}},{“@type”:”Question”,”name”:”BU:GU比とは何ですか?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”BU:GU比はビールのバランスを示す指標です。IBU÷GU(Gravity Units)で算出します。0.5前後がバランス、0.8以上はホッピー、0.3以下はモルティなビールです。”}},{“@type”:”Question”,”name”:”酵母の減衰率はFGにどう影響しますか?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”減衰率(Attenuation)は酵母が発酵で消費する糖分の割合です。減衰率が高い酵母(Belle Saison: 90%等)はFGが低くドライに、低い酵母(WLP002: 66%等)はFGが高くボディのあるビールになります。”}}]}]}

この記事をシェアする