【効率化の極意】「GAS × スプレッドシート」で毎日の献立を完全自動生成:脳のメモリを解放する仕組み作り
この記事の要点
- 毎日の「献立を考える」作業は、ビジネスパーソンにとって重要な脳のワーキングメモリを浪費する「意思決定のノイズ」です。
- Google Apps Script(GAS)を活用し、スプレッドシート上のレシピリストから自動的に献立を抽出するシステムを構築します。
- この仕組みを構築することで、帰宅後の「今日何を作ろう?」という無駄な悩みから解放されます。
毎日の生活の中で、私たちが最も無意識に脳のエネルギーを消費しているのが「献立の意思決定」ではないでしょうか。「冷蔵庫に何があったっけ?」「昨日は肉だったから今日は魚にすべきか?」といった思考は、忙しいビジネスパーソンにとって不要なノイズです。
私は現役のWebエンジニアとして、日々システムの最適化を行っていますが、ふと気づいたのです。「なぜこの最適化の思考を、自分の生活にも適用しないのか?」と。今回は、私の生活を劇的に楽にした「献立の自動提案システム」の全貌を公開します。
なぜ「献立の自動化」が脳のメモリを解放するのか?
エンジニアの世界には「コンテキストスイッチ」という言葉があります。作業中に別の作業に切り替える際、脳が情報を入れ替えるために発生する「コスト」のことです。
料理の献立を考える行為は、まさにこのコンテキストスイッチの連続です。仕事モードから帰宅し、疲れた脳で「食材の在庫」「栄養バランス」「家族の好み」「調理時間」という複数の変数を計算して解を導き出す。これだけで、貴重な脳のメモリ(ワーキングメモリ)は枯渇します。
私が料理の自動化に踏み切ったのは、「意思決定をゼロにする」という目標を達成するためでした。システムに「制約条件」と「レシピ群」を渡し、解を算出させる。人間は、システムが出力した結果を「そのまま実行する」だけで良いのです。
献立自動提案システムの処理フロー
このシステムは、非常にシンプルな構造で動いています。スプレッドシートをデータベースとし、GAS(Google Apps Script)が条件に従ってレシピを抽出します。
graph TD
A[スプレッドシート: レシピデータベース] -->|データ取得| B(GASスクリプト)
B -->|ランダム/条件付き抽出| C{献立決定}
C -->|LINEやメール等へ通知| D[ユーザー]
このフローにより、人間は「考えてから行動する」のではなく、「システムから渡された予定を遂行する」という、エンジニアがタスクをさばく際と同じプロトコルへと移行できます。
【実践】献立自動生成を構築する手順
実際にGoogleスプレッドシートとGASでこのシステムを構築しましょう。
手順1:レシピデータベースの作成
まず、スプレッドシートに「レシピシート」を作成します。A列に「料理名」、B列に「難易度」などを入力します。
手順2:GASスクリプトの記述
スプレッドシートのツールバーから「拡張機能」→「Apps Script」を開き、以下のコードを入力してください。
function suggestMenu() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('レシピシート');
const data = sheet.getDataRange().getValues();
// 見出し行(1行目)を除外してレシピデータを取得
const recipes = data.slice(1);
// 在庫あり(C列が1)のレシピをフィルタリング
const availableRecipes = recipes.filter(row => row[2] === 1);
// 候補がない場合は全レシピから選択、ある場合は候補からランダム選択
const candidates = availableRecipes.length > 0 ? availableRecipes : recipes;
const randomIndex = Math.floor(Math.random() * candidates.length);
const todaysMenu = candidates[randomIndex][0]; // A列(料理名)を取得
// ログに出力(実際はここからLINEやSlackへ通知する処理を追加)
Logger.log('今日の献立は「' + todaysMenu + '」です。');
}
手順3:トリガーの設定
Apps Scriptエディタ左側の「トリガー(時計アイコン)」から、毎日決まった時間(例:17:00)に suggestMenu 関数が実行されるように設定します。これにより、帰宅前に今日の献立が自動的に確定します。
システム運用の最適化:在庫管理と優先順位付け
このシステムの運用において、「冷蔵庫の在庫との乖離」が課題となります。これを解決するために、私は在庫がある食材を優先して抽出するフラグを設けています。
- 在庫フラグ列の追加: シートに「在庫あり(1/0)」の列を追加。
- スクリプトのフィルタリング:
data.filter(row => row[2] === 1)のように、在庫フラグが立っている行のみを抽出対象にします。
最初は単純なランダム抽出から始め、徐々に制約を厳しくしていくのが、エンジニア的な「継続的な改善」のアプローチです。
よくある質問(FAQ)
Q. 全く知らない料理が選ばれたらどうしますか? A. システムはあくまで提案です。「今日は気分じゃない」と感じたら、手動で再実行するか、その日はあえて無視して自分の直感に従うのも重要です。
Q. 毎日同じ献立が出ないようにできますか?
A. はい。前日の結果をスプレッドシートの別セルに書き出し、 filter 関数や includes を利用して「前日と同じ料理を除外する」ロジックを追加すれば可能です。
Q. 家族の好みと合いません。 A. レシピシートに「タグ」列を追加し、特定のタグ(例:「子供向け」)を持つレシピのみを抽出するようにスクリプトを改修してください。
まとめ
毎日の献立という「意思決定」は、自動化することで脳のメモリを驚くほど節約できます。まずはスプレッドシートの準備から始めてみましょう。小さな自動化が、あなたの生活の質を大きく向上させるはずです。