「助けて、サービスが終わってしまう」から始まりました
投稿は r/mealime というサブレディットに現れました。英国に住む人が、何年も毎週同じ順番で使ってきたアプリ — レシピを選び、一週間の献立を組み、そこから勝手に出てきた買い物リストを持って店に行く — が終了すると知らされ、どこへ行けばいいのかと尋ねました。失いかけていたのはアプリそのものというより、その順番でした。毎週の「何を食べる、何を買う」を一度で片づけてくれる習慣です。
返信に並んだものを見渡すと、同じ模様が繰り返されます。Mealime は数年前から米国の大手スーパーチェーンのものになっていて、利用者が案内された後継の Meals Hub はそのスーパーの店舗とその国を中心に作られたもので、英国の人には役に立ちません。代わりに名前が挙がった Origano は英語とフランス語、Spiceful・Eat This Much・Plan to Eat・Samsung Food は英語の画面です。どれもまずアカウントを作らねばならず、いくつかは使える部分を購読の奥に置き、なによりレシピをまた誰かのサーバーに預けることになります — 今回消えたのは、まさにそのサーバーだったのに。
ミールパッドは、その質問への別の答えです。Mealime のあの順番 — レシピボックス、週の表、勝手にまとまる買い物リスト、家にあるものはパントリーへ — をそのまま残し、アカウントとスーパーだけを外しました。レシピは名前と人数と数行の材料だけで、韓国語・英語・日本語・ドイツ語のどれで書いても同じリストにまとまり、すべてはこの端末のブラウザにだけ残ります。特定の店・ブランド・国に結びついたものはなく、JSON の書き出しはまるごと自分のものなので、どこかの会社が終了したり売られたりしても、レシピを失うことは二度と起きません。
ミールパッドがすること
まずレシピボックスを埋めます。レシピは名前、何人分か、任意の所要時間、そして1行にひとつ書く材料の行です — 「スパゲッティ 400 g」「カットトマト缶 1缶」「にんにく 3片」「オリーブオイル 大さじ3」「塩」。書いている間に下の表へ量・単位・材料・売り場が読み込まれるので、売り場が違えばその場で選び直します。作り方とタグは任意です。空っぽなら「最初の8レシピを読み込む」で画面の言語のレシピ8つ — トマトバジルパスタ、鶏肉チャーハン、豆腐と野菜の炒め物、レンズ豆のスープ、オーバーナイトオーツ、鮭とじゃがいものオーブン焼き、卵とチーズのサンドイッチ、ひよこ豆のカレー — が入り、直しても消しても構いません。
次は週の表です。週は月曜に始まり、どの日にも朝・昼・夜の枠があります。どの枠でも「追加」を押すとレシピを選んで人数を決めるシートが開き、人数は上の「いつもの人数」があらかじめ入っていて食事ごとに変えられます。ひとつの枠に何食置いても構いませんし、レシピカードの「置く」からも同じ場所に着きます。先週・来週に移って「今日へ」で戻り、「先週をそのまま」は先週の食事を今週にそのまま写し、「今週を空にする」は一度尋ねてからこの週の食事とチェックと自分で書いた品を消します — レシピはボックスに残ります。
残りは買い物リストです。リストはいま見ている週から勝手にできます — すべての食事の材料が人数に合わせて計算され、同じ材料は1行に足され、売り場ごとに並びます。買い物中に1行ずつチェックし、「チェックをすべて外す」で戻し、「テキストとしてコピー」でまだチェックしていない行だけをスーパーのメモやメッセージに貼ります。牛乳 2 l やゴミ袋のようにレシピにないものは、リストの下の欄に書けばその週のリストに入ります。塩や油のようにいつもあるものは「ある」ひとつでパントリーに入り、毎週リストから外れます。画面の言語はアドレスの後ろの ?lang=ko、?lang=en、?lang=ja、?lang=de で選び、ホーム画面に追加すればオフラインでも動く PWA として入ります。
リストができる算数
基本は1行です: 材料の量 × (食事の人数 ÷ レシピの人数)。4人分のレシピを2人分で置けばすべての材料が半分になり、6人分なら 1.5倍になります。その週のすべての食事をこう計算したあと、名前と単位が同じ材料は1行に足され、その行にはどのレシピの何人分から来たかが書かれます。玉ねぎ1個、缶1つ、1束、1袋のように丸ごと買うものは、足したあとで次の整数に切り上げます — 玉ねぎ半分は売っていませんから。量のない行(「塩」)は「少々」として載り、量のある行とない行が混じると数字の後ろに + が付きます。
単位は言語をまたいでひとつに畳まれます。「大さじ」「tbsp」「큰술」「EL」は同じ単位で、「個」「개」「Stück」「pc」も、「缶」「캔」「can」「Dose」も同じです。だから日本語で書いたレシピの にんにく 3片 と英語で書いたレシピの 3 cloves garlic が同じ行に足されます — 材料の名前が同じ言葉で書かれている限りは。日本語のように単位が数字の前に来る書き方(大さじ2、カップ1/2)も、分数(½、1/2、1 1/2)も、範囲(玉ねぎ 2〜3個、大きいほう)も読みます。売り場は材料名の言葉から推測し、いちばん長く合った言葉が勝ちます — 「ココナッツミルク」は乳製品ではなく米・麺・調味料・缶詰、「なす」は野菜です。推測が外れたら、レシピ編集画面のプレビュー表でその行の売り場だけ変えれば済みます。売り場は野菜・果物、肉・魚、乳製品・卵・豆腐、パン、米・麺・調味料・缶詰、冷凍、スパイス、飲み物、日用品、その他の順で、いつも同じ場所に来ます。
例を挙げます。最初のレシピのトマトバジルパスタ(4人分: スパゲッティ 400 g、カットトマト缶 1缶、にんにく 3片、塩)を月曜の夜に2人分で、ひよこ豆のカレー(4人分: ひよこ豆缶 2缶、カットトマト缶 1缶、にんにく 3片、玉ねぎ 1個、塩)を木曜の夜に6人分で置いたとします。スパゲッティは 200 g。カットトマト缶は ½缶 + 1½缶 = 2缶が1行に、両方のレシピ名つきで。にんにくは 1½片 + 4½片 = 6片。玉ねぎは 1½個ですが丸ごと買うものなので 2個に切り上げ。ひよこ豆は 3缶。塩は量がないので「少々」 — そして塩に「ある」を押したことがあれば、リストではなくその下のパントリーの行に静かに置かれます。リストに印字されるのは、ちょうどその6行です。
パントリー、チェック、そして週
パントリーは「いつも家にあるもの」のリストです。買い物リストのどの行でも「ある」を押すと、その材料はパントリーに移り、どの週のどのレシピに出てきてもリストから外れ、代わりにリストの下の「パントリーにあるもの」の行に見えます — 消えるのではなく脇に寄せておくので、切らしたときは「リストへ戻す」ひとつで次のリストから戻ってきます。パントリーは材料名で合わせ、大文字小文字や空白、全角半角は無視するので、どのレシピから来た塩も同じ塩です。
チェックは週ごとです。今週のリストでかごに入れたものにチェックすると上に「m件中n件をかごに」が増え、来週のリストはまっさらで始まり、「チェックをすべて外す」は今週の分だけ戻します。「テキストとしてコピー」はまだチェックしていない行だけを売り場の見出しつきの平文にして、スーパーのメモや家族のチャットに貼れるようにします。リストの下の欄に書く品も材料の行とまったく同じに読まれます — 「牛乳 2 l」は飲み物ではなく乳製品の売り場へ、「ゴミ袋」は日用品へ — そしてその週だけのものです。週の表に食事を置く前に書いておいても構いません。
レシピのある場所と、バックアップ
レシピ、週の献立、パントリー、チェック、自分で書いた品 — すべてこの端末のブラウザにだけあり、ほかのどこにもありません。アカウントも、こちらのサーバーも、同期もなく、アプリが献立を持ってどこかのサーバーに接続することはありません。どのスーパー・ブランド・国のものでもないので、店のカタログに結びついたものはありません。ツール画面に広告はなく、アプリ内課金もなく、レシピの数に上限もありません。
「バックアップ」の「JSON を書き出す」は、レシピ・献立・パントリー・チェック・自分で書いた品をひとつのファイルにして、この端末で作りダウンロードとしてだけ外に出します。「JSON を読み込む」は置き換えずに合わせます: レシピは名前で照合し、両側に同じ名前があれば最近直したほうが残り、食事は日付・枠・レシピが同じなら一度だけ、パントリーとチェックと自分で書いた品は和集合です。新しいスマホや別のブラウザへ移るとき、あるいは二台のボックスをひとつにまとめるときの方法です。
新しいバージョンが出ても「更新が必要」の壁で止めることはなく、ボックスを消すこともありません。レシピを消すときは先に尋ね、置いてある日からも一緒に外れると伝えます。ほかのどこにも控えはないので、レシピが増えてきたらときどき JSON で書き出しておいてください。
レシピをネットから取ってきたり、何を作るか提案したりしますか?
どちらもしません。ミールパッドにはレシピのデータベースがなく、URL を貼り付ける取り込みも、好みやカロリーに合わせて週を埋めてくれるプランナーもありません。レシピは自分で書いたもので — ここでのレシピは名前と人数と数行の材料だけなので、ウェブページや料理本の材料欄をそのまま貼れば済みます — 何をどの日に食べるかも自分で決めます。最初の8レシピは手に馴染ませるためにあるだけです。栄養情報もありません。ミールパッドが得意なのは決めたあとの部分、それを買い物リストに変えることです。
スーパーとつながりますか? リストからそのまま注文できますか?
いいえ、そしてそれがミールパッドの要点です。店のカタログも「かごに入れる」ボタンも配達との連携もありません。献立アプリがスーパーチェーンに買われ、そのスーパーの国の外の利用者に行き場がなくなったのがこのアプリの出発点なので、どのスーパー・ブランド・国にも結びつけていません。リストは売り場順の平文で、「テキストとしてコピー」でスーパーのアプリのメモにも紙にもメッセージにも貼れます。どの国のどの店で買っても同じように使えます。
材料を日本語や韓国語で書いても大丈夫ですか? それでもまとまりますか?
はい。材料の行は4つの言語の書き方をすべて読みます — 「玉ねぎ 1個」「醤油 大さじ2」「양파 1개」「간장 2큰술」「1,5 kg Kartoffeln」「2 EL Olivenöl」「2 cups rice」。数字が前でも後ろでも、小数点がカンマでもピリオドでも構わず、単位はひとつの標準単位に畳まれます。まとまる基準は材料名と単位が同じかどうかなので、日本語レシピの「にんにく 3片」と英語レシピの「3 cloves garlic」は単位は同じでも名前が別の言葉なので2行のまま残ります — 翻訳はしません。同じ材料をいつも同じ言葉で書くのがまとめるコツです。材料名そのものは自由なので、「キムチ用の白菜」のようなものもそのまま書けます。
売り場が違っていたり、量が読まれなかったりしたら?
売り場は材料名の言葉から推測するので、知らない材料は「その他」に行きます。レシピ編集画面のプレビュー表でその行の売り場を選べば、そのレシピに保存され、リストもそれ以降その売り場に置きます。量は行の先頭か末尾の数字を読むので、「カットトマト缶 400 g 1缶」のように数字が二つあるとどちらか分かりません — 買う単位のほうだけ残してください(「カットトマト缶 1缶」)。量が読めなかった行は捨てられず「少々」として載るので、何も失われません。プレビュー表は、まさにこの二つを保存前に確かめるためにあります。
新しいスマホに移すには? 家族とリストを分けるには?
移すのは「バックアップ」の「JSON を書き出す」と「JSON を読み込む」です。古い端末で書き出したファイルを新しい端末で読み込むと、レシピと献立とパントリーが合わさって入ります。同期はないので、二人がそれぞれの端末で献立を組めばボックスは二つになります — ときどきお互いの JSON を読み込めば名前で統合され、同じ名前のレシピは最近直したほうが残ります。今週の買い物だけ分けたいなら、ずっと簡単です: 「テキストとしてコピー」してメッセージで送ってください。まだチェックしていない行だけが売り場ごとに並んで届きます。
Mealime や Meals Hub、Origano、Spiceful、Eat This Much、Plan to Eat、Samsung Food と何が違いますか? 無料ですか?
三つあります。第一に、誰のものでもありません: Meals Hub のようにひとつのスーパーチェーンの店舗と国を中心に作られてはおらず、アカウントがないので終了したり売られたりするサーバーもなく、レシピは JSON としていつも手元にあります。第二に、言語です: Origano は英語とフランス語、残りは英語の画面ですが、こちらは日本語・韓国語・ドイツ語の画面があり、材料の行は4つの言語をすべて読んで同じリストにまとめます。第三に、順番は同じです: レシピボックス → 週の表 → まとまったリスト → パントリーのチェックという Mealime の習慣をそのまま移しました。そして無料です: 購読も、アカウントも、ログインも、アプリ内課金もなく、ツール画面に広告はなく、レシピ数の上限もありません。それらの道具がしてミールパッドがしないこともあります — レシピのデータベース、自動の献立、栄養情報、端末間の同期はありません。
