もち麦の水加減とβ-グルカン・糖質量を1g単位で逆算するSwiftUI炊飯計算Macアプリ自作録
作成日:
更新日:

もち麦の水加減とβ-グルカン・糖質量を1g単位で逆算するSwiftUI炊飯計算Macアプリ自作録


🔧 論旨

血糖値スパイクを抑えるために「もち麦ごはん」を炊いている方が必ずぶつかる壁があります。それは、市販のカロリー計算アプリに「麦ごはん 130g」と入力しても、あなたが実際に混ぜたもち麦の割合(3 割・5 割・10 割)や、多めに入れた水加減(2.5〜3 倍)が一切反映されず、糖質量が 15〜20g もズレてしまう という問題です。

結論からお伝えすると、炊飯による水分蒸発の誤差をゼロにして 1g 単位で正確な糖質と水溶性食物繊維(β-グルカン)を把握するには、「投入した生穀物のグラム数」と「炊きあがり後の実測総重量」から比例配分で逆算する自分専用の SwiftUI 製 Mac アプリ を AI と一緒に作ってしまうのが最も確実で快適な解決策でした。本記事では、家族別の 2 釜管理(お釜 A / B)や冷凍パック等分計算、A4 レポート印刷機能まで詰め込んだ自作アプリの設計と実装ノウハウを公開します。

🔧 合わせて読みたい深まる関連情報
🔧 対象となる方
  • もち麦(『きらりもち』『ダイシモチ』など)や玄米を好みの水加減・ブレンド比で炊いており、お茶碗 1 杯あたりの正確な糖質量と β-グルカン量を知りたい 方

  • 表計算シートを毎回開く手間をなくし、Mac で動く自分や家族専用の栄養・レシピ計算アプリを SwiftUI で自作してみたい 方

  • SwiftPM 製アプリでつまずきやすい 「テキスト欄にキーボード入力できない問題」や「SwiftUI 画面の印刷実装」 の具体的なコードを知りたい方

市販の食事記録アプリでは『もち麦計算』が狂う理由

白米は 1 合(150g)を標準の水加減で炊くと、およそ 2.2 倍(約 330g) に炊きあがります。一方、水溶性食物繊維の塊である国産もち麦『きらりもち』を白米なしの 100%(10 割)・水 3 倍(生麦 150g + 水 450cc) でふっくら炊きあげると、蒸発分を引いても炊きあがり総重量は 約 520g(約 3.47 倍) まで大きく膨らみます。

ここでもしお茶碗に 130g(全体の 4 分の 1) をよそって食べた場合、一般的な食事管理アプリの数値と実際の栄養素がどれほど食い違うか見てみましょう。

炊きあがり130gを食べたときの『市販アプリ固定値』と『実測逆算値』の差
約1.8倍の誤差
糖質を過大評価
市販アプリの「白米 / 一般麦ごはん」固定値
  • 水分2.2倍前後の白米ベース(130gあたり糖質 約44〜46g)で計算される
  • 品種ごとの水溶性食物繊維(β-グルカン)含有量が分からない
  • 「糖質を摂りすぎたかも」と誤解して極端な食事制限に陥りやすい
1g単位で正確
きらりもち100%(水3倍・総重量520g)の真値
  • 130gの中身は生麦換算でちょうど 37.5g分(150g ÷ 4等分)
  • 実際の糖質は 約24.0g と白米のほぼ半分!
  • 同時に食物繊維 約5.1g(うちβ-グルカン約2.7g) を確実に摂取できる
質問するおじさん

なんと!同じお茶碗 130g に見えても、水をたっぷり吸ったもち麦 100% ごはんなら実際の糖質は 24g しかなかったんか!市販アプリの数字だけ見とったら完全に騙されるところじゃったわい!

解説ナビゲーター

そうなんです!炊飯器から蒸発して出ていくのは「純粋な水蒸気(H2O)」だけなので、最初に釜へ入れた生米・生麦のカロリーや糖質・食物繊維の総量は、炊く前も炊いた後も 1 ミリも変わりません。この物理の保存則を使えば、どんな水加減でも 100% 正確に逆算できるんです!

国産 もち麦『きらりもち』(農研機構育成・水溶性食物繊維β-グルカン高含有・白米なし10割炊きでも美味しい品種)

国産 もち麦『きらりもち』(農研機構育成・水溶性食物繊維β-グルカン高含有・白米なし10割炊きでも美味しい品種)


自作Macアプリ『炊飯栄養計算』の設計とSwift実装

品種別β-グルカン定義と実測重量の比例逆算

そこで AI エディタを相棒にして、SwiftUI(macOS 13 以降対応)で自分専用のデスクトップアプリ 『炊飯栄養計算(RiceCalculator)』 を自作しました。計算エンジンの中核はとてもシンプルで美しい 3 ステップの比例計算です。

水加減や炊飯器のクセに左右されない『保存則ベースの3段階逆算ロジック』
Step 1
生穀物の栄養総量を合算

投入した1種類目・2種類目の生重量(g)から、釜全体のカロリー・糖質・食物繊維・β-グルカン総量を確定します。

Step 2
炊きあがり総重量の確定

水量(cc・倍率・目盛り)から推定重量を出しつつ、スケールで測った「実測炊きあがり重量(g)」があれば優先採用します。

Step 3
1食分・等分パックへ比例配分

「食べた量(g)÷ 炊きあがり総重量(g)」の比率を釜全体の栄養素に掛け、朝・昼・晩や冷凍1パック分の栄養を即座に算出します。

炊きあがり総重量をキッチンスケールで1回測るだけで、すべての誤差が消滅します

モデル層(Models.swift)では、白米・玄米・押し麦に加えて、β-グルカン含有量が異なる 『もち麦(一般)』『キラリモチ』『ダイシモチ』 および袋裏面の成分表を自由に入れられるカスタム枠を列挙型(enum)で定義しています(以下は個人情報を一切含まない汎用コアコードの抜粋です)。

// Models.swift(抜粋:品種別の100gあたり栄養素と比例逆算ロジック)
import Foundation

enum RiceType: String, CaseIterable, Codable, Identifiable {
    case hakumai = "白米"
    case genmai = "玄米"
    case mochimugiStandard = "もち麦 (一般)"
    case mochimugiKirari = "もち麦 (キラリモチ)"
    case mochimugiDaishi = "もち麦 (ダイシモチ)"
    case mugi = "押し麦"

    var id: String { rawValue }

    var nutritionPer100g: Nutrition {
        switch self {
        case .hakumai: return Nutrition(calories: 358, protein: 6.1, fat: 0.9, carbs: 77.6, fiber: 0.5, betaGlucan: 0.0)
        case .genmai: return Nutrition(calories: 353, protein: 6.8, fat: 2.7, carbs: 74.3, fiber: 3.0, betaGlucan: 0.0)
        case .mochimugiStandard: return Nutrition(calories: 339, protein: 9.5, fat: 1.6, carbs: 78.1, fiber: 12.9, betaGlucan: 6.0)
        case .mochimugiKirari: return Nutrition(calories: 338, protein: 9.0, fat: 1.5, carbs: 77.5, fiber: 13.5, betaGlucan: 7.2)
        case .mochimugiDaishi: return Nutrition(calories: 335, protein: 9.2, fat: 1.6, carbs: 77.0, fiber: 14.0, betaGlucan: 6.5)
        case .mugi: return Nutrition(calories: 340, protein: 7.0, fat: 1.3, carbs: 77.8, fiber: 9.6, betaGlucan: 4.0)
        }
    }
}

struct Nutrition: Codable {
    var calories: Double
    var protein: Double
    var fat: Double
    var carbs: Double
    var fiber: Double
    var betaGlucan: Double
    var sugar: Double { max(0, carbs - fiber) } // 利用可能炭水化物(糖質)の簡易算出
}

お釜A・Bの2釜管理とA4レポート印刷機能

実際に家庭で使い始めると、「自分はもち麦 100% で炊きたいけれど、家族は白米や 3 割ブレンドを食べたい」という場面が必ず出てきます。市販アプリだと計算を 2 回やり直す羽目になりますが、自作アプリなら機能を足すのも自由自在です。

改善を重ねて完成した 『炊飯栄養計算 Rev.14(お釜 A/B 選択式)』 の実際の Mac 画面と、盛り込んだ 4 つの実用機能 がこちらです。

SwiftUIで自作したMacアプリ『炊飯栄養計算 Rev.14(お釜 A/B 選択式)』の実機画面。お釜A(キラリモチ200g・水2倍・5等分120g)とお釜B(白米150g・炊飯器の目盛り標準・330g)、家族別の目標炭水化物量とβ-グルカン内訳を一画面で計算

▲ 実際に毎日使っている『炊飯栄養計算 Rev.14』の画面。お釜 A(キラリモチ 100%)とお釜 B(白米)の条件分けから、1 パック重量・1 食あたりの糖質と β-グルカン内訳まで一目で把握できます

🔧 🍚 自分専用アプリだからこそ実装できた4つの快適機能
  1. 『お釜 A / お釜 B』の 2 釜同時セットアップと 3 種の水量指定 : 画面のように「お釜 A はキラリモチ 100%(200g・加水比率 2 倍)」「お釜 B は白米(150g・炊飯器の目盛りぴったり)」といった 2 つの炊飯条件を同時に保持でき、家族メンバーごとに「どちらのお釜を食べるか」をワンクリックで切り替えられます(水量は手動 cc・加水倍率・目盛り微調整の 3 方式に対応し、右上のゴミ箱アイコンでお釜 B を閉じて 1 釜運用にも戻せます)。

  2. 冷凍タッパーの『何等分パッキング』シミュレーター : 炊きあがり総重量に対して「何等分(パック)にする?」を入力するだけで、たとえば総重量 600g なら 5 等分で 1 パックあたり 120g、総重量 520g なら 4 等分で 130g のように、均等に小分けするグラム数が即座に算出されます。

  3. 標準体重ベースの目標炭水化物算出と色分け栄養表示 : 身長から求めた適正体重(BMI 22 基準)と目的・活動レベル(減量用 20 kcal/kg 等)から 1 日の必要カロリー・目標炭水化物量を自動算出し、朝・昼・晩ごとのカロリー・タンパク質・脂質・炭水化物(糖質・食物繊維・うち β-グルカン)を見やすく色分け表示します(お弁当などの「冷やして食べる」レジスタントスターチモードにも対応)。

  4. キッチンに貼れる A4 サマリー印刷(NSHostingView × NSPrintOperation) : ウィンドウ右上のプリンターアイコンを押すと、SwiftUI の印刷専用ビュー(白背景・黒文字固定の PrintReportView)を AppKit の NSHostingView で包んで NSPrintOperation へ渡し、炊飯条件と 1 パックあたりのグラム数を A4 用紙 1 枚に美しく出力できます。

SwiftPM起動で文字入力できない罠の解決策

なお、Xcode の巨大な .xcodeproj を使わず、Package.swift(Swift Package Manager)だけでビルドした実行バイナリをターミナルや .command ファイルから起動する場合、そのままではウィンドウが前面に出ても TextField にキーボード入力が一切入らない という macOS 特有の落とし穴があります。

これはバンドルを持たないコマンドライン実行ファイルがデフォルトで「バックグラウンド補助プロセス扱い」になるためで、App 構造体の init() に以下の 2 行を入れるだけで一発解決します。

// RiceCalculatorApp.swift:SwiftPM単体ビルドでもキーボード入力を確実に受け付ける定石
import SwiftUI
import AppKit

@main
struct RiceCalculatorApp: App {
    init() {
        NSApplication.shared.setActivationPolicy(.regular)
        NSApplication.shared.activate(ignoringOtherApps: true)
    }

    var body: some Scene {
        WindowGroup("炊飯栄養計算") {
            ContentView()
                .frame(minWidth: 520, minHeight: 640)
        }
    }
}

計量スケールと冷凍容器を組み合わせた実践運用

アプリを作ったあとは、台所での作業も驚くほどルーティン化できました。用意しておくべき物理ツールは 「最大 2kg〜3kg まで測れる 0.1g 単位のクッキングスケール」 と 「すのこ付きの冷凍ごはん容器」 の 2 つだけです。

あらかじめ空の炊飯器内釜の重さ(例:685g など)を一度だけ測ってメモしておけば、炊きあがった直後に内釜ごとスケールへ乗せて引き算するだけで、1 秒で正確な「実測炊きあがり総重量」が分かります。あとはアプリが出してくれた「1 パックあたりの重量(例:130g)」通りに、すのこ付きの『マーナ 極 冷凍ごはん容器』へ小分けしていくだけです。

ノルウェージャンフォレストキャット

水多めで炊いたもち麦ごはんも、底に「すのこ」が入った容器なら余分な水気が下に落ちてベチャベチャにならないんでちね!

解説ナビゲーター

そうなんです!しかも一度冷蔵・冷凍して冷やす過程で、でんぷんの一部が消化されにくい 「レジスタントスターチ(難消化性でんぷん)」 に変化するので、水溶性食物繊維の β-グルカンと合わせてダブルで食後の穏やかな糖吸収をサポートしてくれますよ!

タニタ (TANITA) クッキングスケール 0.1g単位 (最大2kg〜3kg対応・洗えるシリコーンカバー付 KJ-212 / KD-321)

タニタ (TANITA) クッキングスケール 0.1g単位 (最大2kg〜3kg対応・洗えるシリコーンカバー付 KJ-212 / KD-321)

マーナ (marna) 極 冷凍ごはん容器(すのこパーツ付・一膳分小分け保存・食洗機&電子レンジ対応)

マーナ (marna) 極 冷凍ごはん容器(すのこパーツ付・一膳分小分け保存・食洗機&電子レンジ対応)


まとめ:自分の食卓に合う道具はAIと自作しよう

市販の健康管理アプリに自分の食生活を無理やり合わせるのではなく、自分のこだわり(品種・水加減・家族別の炊き分け)に合わせてアプリ側を 10 分で誂(あつら)えられるのが、AI 時代の個人開発の醍醐味です。「投入した生穀物の栄養は蒸発しない」というシンプルな物理法則と SwiftUI の軽快なフォーム画面 があれば、毎日の主食管理から一切の迷いがなくなります。

※栄養計算に関するご注意:食品成分表の数値は農産物の収穫年や精麦度合いにより多少の個体差があります。糖尿病や腎臓疾患等で医師・管理栄養士から厳密な食事療法の指導を受けている方は、必ず主治医の指示範囲内でご活用ください。

ご自身の Mac にも同じような「自分専用の炊飯・ブレンド栄養計算アプリ」を作ってみたい方は、以下のプロンプトを最上位モデルの AI エディタへ貼り付けてみてください。

🔧 🤖 自分専用の『炊飯栄養計算Macアプリ』をAIに作らせるコピペ用プロンプト

※SwiftUI と AppKit(印刷処理・ウィンドウフォーカス制御)の正確な連携コードを一発で出力させるため、『Gemini 4 Argon』(または同等以上の最上位推論モデル)での実行を推奨します。

以下の記事の設計を参考に、Swift Package Manager(Package.swift / macOS 13以降対象)だけでビルド・起動できる自分専用のSwiftUI製Macアプリ『RiceCalculator(炊飯栄養計算)』を作成してください。
参照URL: https://lab.chihouzakki.com/blog/review/swiftui-mochimugi-rice-nutrition-calculator-diy/

【実装してほしい仕様】
1. 白米・玄米・押し麦・もち麦(キラリモチ・ダイシモチ等)の100gあたり栄養素(kcal・P・F・炭水化物・食物繊維・β-グルカン)を持たせ、2種類のブレンド炊飯および『お釜A / お釜B』の2釜選択式(不要時はお釜Bを削除して1釜運用可)に対応させてください。
2. 水加減(手動cc・加水倍率・炊飯器の目盛り微調整)からの推定重量に加え、キッチンスケールで測った「実測炊きあがり総重量(g)」で上書き補正し、指定した等分数(パック数)および家族メンバー別の朝・昼・晩の摂取g数に応じた栄養素(糖質・食物繊維・うちβ-グルカン内訳付き)を比例逆算してください。
3. 身長から標準体重(BMI 22)を求め、目的・活動レベルに応じた1日の必要カロリーと目標炭水化物量を自動表示するとともに、ウィンドウ右上の印刷ボタンから NSHostingView × NSPrintOperation でA4サマリーを印刷できるようにしてください。
4. Appのinit()に NSApplication.shared.setActivationPolicy(.regular) を入れ、ターミナルや .command スクリプトからの起動でもTextFieldへ確実に文字入力できるようにし、設定値は UserDefaults にローカル保存(外部通信・個人情報のハードコード一切なし)としてください。
5. すべての数値入力欄に全角数字・ピリオドの半角正規化(applyingTransform(.fullwidthToHalfwidth, reverse: false))と Double.isFinite・非負ガードを入れ、日本語入力モードのまま入力したり空欄・記号が入ったりしても計算破綻やクラッシュが起きないようにしてください。

毎日の主食を「感覚」から「納得の数値」へ変えて、美味しくて無理のない健康習慣を続けていきましょう!

お腹いっぱいで気持ちよさそうに眠るノルウェージャンフォレストキャット

▲ 血糖値の乱高下がなくなると、食後の異常な眠気からも解放されます