yigarashiのブログ

学んだことや考えていることを書きます

Scrapboxの献立リストから食べるものを自動で決める

今日は豚の味噌漬けを食べた。コロナ禍に入ってから食事のほとんどを自炊でまかなっている。週に2回スーパーに買い出しに行くのだが、そんなに長居したいご時世でもないので、買い出し前夜に献立を計画して何を買うかメモするようにしている。

しかしこの計画が妙につらい。プライベートのScrapboxにある献立ページを眺め始めると、自分が何を食べたいのか悶々と考えてしまう。他にも、今の冷蔵庫の状態だとか、献立の共通の食材だとか、旬の食材だとか、さまざまな要素が献立を左右することになる。仕事で疲れている日に計画が重なると、意思決定力が摩耗しているので、ああでもないこうでもないと1時間くらい悩んでしまうこともある。

そうは言っても、たかだか数日なにを食べるかというだけの話である。そんなにリソースを使うのがいい加減バカらしくなってきたので、雑に自動化することにした。Scrapboxで以下のようなUserScriptを読み込むようにして、献立ページでConsoleを開いてkondate()と打ってやるだけだ。献立はだいたいリスト形式で並べてある。

// https://www.nxworld.net/js-array-shuffle.html
const shuffle = ([...array]) => {
  for (let i = array.length - 1; i >= 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }
  return array;
}

window.kondate = (n = 6) => {
  const array = scrapbox.Page.lines
    .slice(4)
    .map((l) => l.text.replace(/\s/g, ''))
    .filter((s) => s !== '' && s[0] !== '[');
  return shuffle(array).slice(0, n);
}

f:id:yigarashi:20220308004254p:plain

めちゃくちゃ生活感のある実行結果が出ている。諦めてここから選ぶというルールにすることで、無限の可能性から解放されることに成功した。別に全部が全部この通りである必要はなくて、ひとつ決まれば食材の依存関係で勝手に思いつくこともある。とにかく初手で献立の洪水に投げ込まれないことが重要である。店に行った時なんかも、壁一面のメニューから選ぶよりも、「おすすめランチ」みたいなペライチのメニューから選ぶ方が気が楽だと思う。そんな感じだ。

最初は、献立管理をGitHubリポジトリに移して、買い出しのメモまで自動生成するようなツールを夢想したのだが、献立くらいScrapboxで適当に管理したいし、楽になりたいのだから実装も楽をしたいと思って考えていたらこんな形になった。