PR

Pythonで1週間の献立を自動作成する方法!初心者向けコード解説

本ページにはプロモーションが含まれます。

python-weekly-meal-planner 生活の知恵
スポンサーリンク

毎日の食事で悩みやすいことのひとつが、献立を考えることではないでしょうか。

「今日の夕食は何にしよう?」
「1週間分の献立をまとめて決めたい」
「買い物に行く前に、必要な食材を整理しておきたい」

このような悩みを解決する方法のひとつが、Pythonを使った献立の自動作成です。

Pythonを使えば、あらかじめ登録した料理の候補から、朝食・昼食・夕食のメニューを自動的に選び、1週間分の献立表を作成できます。

さらに、作成した献立をCSVファイルに保存すれば、Excelで確認したり、買い物リストの作成に活用したりすることも可能です。

この記事では、Python初心者の方に向けて、1週間の献立を自動作成するプログラムの作り方を基礎から解説します。

実際に動かせるPythonコードや実行結果、CSVファイルへの保存方法、さらに便利に使うための応用例も紹介します。

プログラミングを学びながら、毎日の家事を少しでも効率化したい方は、ぜひ参考にしてください。

Pythonで1週間の献立を自動作成するメリット

Pythonで献立を自動作成すると、毎日の食事計画を効率よく立てられるようになります。

まずは、どのようなメリットがあるのかを確認しましょう。

毎日の献立を考える時間を減らせる

毎日料理をする方にとって、献立を考える作業は意外と時間がかかるものです。

料理を作る時間だけでなく、何を食べるか考える時間も必要になります。

Pythonで献立作成を自動化すれば、登録した料理の候補からメニューを選べるため、献立を考える手間を減らせます。

例えば、次のような料理をあらかじめ登録しておきます。

  • 朝食:トースト、納豆ごはん、おにぎり
  • 昼食:親子丼、焼きそば、うどん
  • 夕食:カレーライス、焼き魚、野菜炒め

プログラムを実行すれば、これらの候補を使って献立を自動的に組み立てられます。

1週間分の食事計画をまとめて立てられる

毎日その場で献立を考える代わりに、月曜日から日曜日までの食事をまとめて決めることもできます。

1週間分の献立が分かっていれば、食材の購入計画も立てやすくなります。

また、外食する日や忙しい日を考慮して、あらかじめ料理の候補を変更しておくことも可能です。

献立をまとめて考える習慣を作れば、食事の準備を計画的に進めやすくなります。

自分好みの料理や食材に対応できる

今回作るプログラムでは、料理の候補を自分で自由に変更できます。

例えば、次のようなカスタマイズが可能です。

  • 好きな料理を追加する
  • 苦手な料理を削除する
  • 和食や洋食など、料理の種類を分ける
  • 朝食・昼食・夕食で異なる候補を登録する

Pythonの基本的なリストや辞書を使うだけなので、初心者でも比較的簡単に変更できます。

今回作る献立自動作成プログラムの機能

この記事では、次の機能を持つプログラムを作成します。

  • 月曜日から日曜日までの7日分の献立を作る
  • 朝食・昼食・夕食のメニューを自動的に選ぶ
  • 同じ食事区分で料理が重複しないようにする
  • 作成した献立を画面に表示する
  • 献立表をCSVファイルに保存する

料理の候補は、朝食・昼食・夕食ごとに7種類ずつ用意します。

各食事区分の候補を7種類用意して順番をランダムに変更するため、同じ区分では7日間に同じ料理が重複しません。

ただし、朝食と昼食など、異なる食事区分で同じ料理が登場する可能性はあります。

また、今回のプログラムは料理をランダムに並べ替える仕組みです。栄養バランスや食費、食材の使い回しまで自動的に最適化するものではありません。

Pythonで献立を自動作成するための準備

プログラムを作る前に、Pythonを実行できる環境を準備しましょう。

Pythonの実行環境を準備する

Pythonがまだインストールされていない場合は、公式サイトからダウンロードできます。

インストールが完了したら、ターミナルやコマンドプロンプトで次のコマンドを実行します。

python --version

環境によっては、次のコマンドを使用します。

python3 --version

Pythonのバージョンが表示されれば、基本的な準備は完了です。

すでにPythonを使える環境がある場合は、そのまま次の手順に進んでください。

今回使用するPythonの機能

今回のプログラムでは、Pythonの標準ライブラリを使用します。

標準ライブラリとは、Pythonにあらかじめ用意されている便利な機能の集まりです。

今回使用するのは、次の2つです。

  • random:料理の順番をランダムに変更する
  • csv:献立表をCSVファイルに保存する

どちらもPythonに標準搭載されているため、追加のライブラリをインストールする必要はありません。

Pythonで1週間の献立を自動作成するコード

それでは、実際にプログラムを作ってみましょう。

今回は、曜日と料理の候補を用意し、それぞれの料理をランダムに並べ替えて献立表を作成します。

1週間分の献立を作成するプログラム

次のコードをコピーし、weekly_meal_planner.py という名前で保存してください。

import random

# 曜日を用意する
days = [
    "月曜日",
    "火曜日",
    "水曜日",
    "木曜日",
    "金曜日",
    "土曜日",
    "日曜日"
]

# 食事ごとの料理候補を用意する
menus = {
    "朝食": [
        "トースト・卵・サラダ",
        "納豆ごはん・みそ汁",
        "ヨーグルト・バナナ・シリアル",
        "おにぎり・ゆで卵",
        "オートミール・果物",
        "チーズトースト・スープ",
        "卵かけごはん・みそ汁"
    ],
    "昼食": [
        "ツナサンド・スープ",
        "鮭おにぎり・野菜スープ",
        "焼きそば",
        "親子丼",
        "きつねうどん",
        "チャーハン・スープ",
        "そぼろ丼"
    ],
    "夕食": [
        "鶏の照り焼き・サラダ・ごはん",
        "鮭の塩焼き・ほうれん草のおひたし",
        "豚肉と野菜の炒め物・ごはん",
        "豆腐ハンバーグ・温野菜",
        "カレーライス・サラダ",
        "さばのみそ煮・みそ汁",
        "麻婆豆腐・ごはん"
    ]
}

# 食事ごとにメニューの順番をランダムに変更する
for meal in menus:
    random.shuffle(menus[meal])

# 1週間分の献立を表示する
print("=== 1週間の献立表 ===")

for i, day in enumerate(days):
    print(f"\n【{day}】")
    print(f"朝食:{menus['朝食'][i]}")
    print(f"昼食:{menus['昼食'][i]}")
    print(f"夕食:{menus['夕食'][i]}")

このプログラムを実行すると、曜日ごとに朝食・昼食・夕食のメニューが表示されます。

料理の候補を変更したい場合は、menus の中にある料理名を書き換えるだけです。

プログラムを実行する

ファイルを保存したフォルダで、次のコマンドを実行します。

python weekly_meal_planner.py

環境によっては、次のコマンドを使用してください。

python3 weekly_meal_planner.py

正常に実行できれば、1週間分の献立表が表示されます。

実行結果の例

料理の順番はランダムに決まるため、実行するたびに結果が変わります。

以下は、出力形式を示すための実行結果の例です。

=== 1週間の献立表 ===

【月曜日】
朝食:チーズトースト・スープ
昼食:親子丼
夕食:豚肉と野菜の炒め物・ごはん

【火曜日】
朝食:卵かけごはん・みそ汁
昼食:そぼろ丼
夕食:さばのみそ煮・みそ汁

【水曜日】
朝食:オートミール・果物
昼食:チャーハン・スープ
夕食:カレーライス・サラダ

【木曜日】
朝食:トースト・卵・サラダ
昼食:鮭おにぎり・野菜スープ
夕食:鮭の塩焼き・ほうれん草のおひたし

【金曜日】
朝食:おにぎり・ゆで卵
昼食:ツナサンド・スープ
夕食:鶏の照り焼き・サラダ・ごはん

【土曜日】
朝食:納豆ごはん・みそ汁
昼食:きつねうどん
夕食:麻婆豆腐・ごはん

【日曜日】
朝食:ヨーグルト・バナナ・シリアル
昼食:焼きそば
夕食:豆腐ハンバーグ・温野菜

実際の出力順は実行ごとに変わるため、上記と同じ結果になるとは限りません。

これで、Pythonを使った基本的な献立自動作成プログラムが完成です。

献立作成プログラムのコードを初心者向けに解説

ここからは、先ほどのコードで使用したPythonの仕組みを順番に説明します。

リストで曜日を管理する

まず、次の部分を見てみましょう。

days = [
    "月曜日",
    "火曜日",
    "水曜日",
    "木曜日",
    "金曜日",
    "土曜日",
    "日曜日"
]

このように、複数のデータをまとめて管理する仕組みをリストと呼びます。

リストは角括弧 [] で囲み、各データをカンマで区切って記述します。

曜日を1つずつ別の変数に保存する必要がないため、7日分のデータを簡単に管理できます。

辞書で料理を分類する

次に、料理の候補を管理する部分です。

menus = {
    "朝食": ["トースト", "納豆ごはん"],
    "昼食": ["親子丼", "焼きそば"],
    "夕食": ["カレーライス", "焼き魚"]
}

このように、名前とデータを組み合わせて管理する仕組みを辞書と呼びます。

今回のプログラムでは、朝食・昼食・夕食という名前を使って、それぞれの料理候補を管理しています。

例えば、朝食の候補を取り出すには次のように記述します。

menus["朝食"]

料理を追加したい場合は、対応するリストに料理名を追加すればよいため、管理しやすい構造です。

random.shuffle() で順番をランダムに変更する

今回のプログラムで重要なのが、次の部分です。

import random

random.shuffle(menus["朝食"])

random は、乱数などを扱うためのPython標準ライブラリです。

shuffle() は、リストの要素をランダムな順番に並べ替える関数です。

例えば、朝食の候補が次の順番だったとします。

トースト
納豆ごはん
おにぎり

random.shuffle() を実行すると、次のように順番が変わる場合があります。

おにぎり
トースト
納豆ごはん

並べ替えた結果を利用することで、毎回異なる献立を作成できます。

なお、shuffle() は元のリスト自体を書き換える関数です。別のリストを新しく作るわけではありません。

for文で曜日ごとの献立を表示する

次に、曜日ごとに献立を表示する部分です。

for i, day in enumerate(days):
    print(day)
    print(menus["朝食"][i])

for 文は、リストなどのデータを順番に取り出して処理するための仕組みです。

また、enumerate() を使うと、データとその番号を同時に取り出せます。

例えば、月曜日の番号は 0、火曜日の番号は 1 です。

Pythonではリストの最初の要素を 0 番目として扱います。

そのため、次のように番号を使って料理を取り出せます。

menus["朝食"][0]

このコードは、朝食のリストにある最初の料理を取得します。

曜日と料理の番号を対応させることで、7日分の献立を順番に表示できる仕組みです。

献立をCSVファイルに保存する方法

画面に献立を表示できるようになったら、次はファイルとして保存する機能を追加してみましょう。

CSV形式で保存すれば、Excelなどの表計算ソフトで献立表を確認できます。

CSV保存のコードを追加する

先ほどのプログラムの最後に、次のコードを追加してください。

import csv

with open(
    "weekly_meal_plan.csv",
    "w",
    newline="",
    encoding="utf-8-sig"
) as file:
    writer = csv.writer(file)

    # 見出し行を保存する
    writer.writerow(["曜日", "朝食", "昼食", "夕食"])

    # 1週間分の献立を保存する
    for i, day in enumerate(days):
        writer.writerow([
            day,
            menus["朝食"][i],
            menus["昼食"][i],
            menus["夕食"][i]
        ])

print("献立表をCSVファイルに保存しました。")

このコードは、基本プログラムで作成した days と menus をそのまま利用します。

そのため、先ほどのプログラムと同じファイル内に追加して実行してください。

CSVファイルとは?

CSVは、データをカンマなどで区切って保存するファイル形式です。

例えば、献立表をCSV形式で保存すると、次のようなデータになります。

曜日,朝食,昼食,夕食
月曜日,トースト,親子丼,カレーライス
火曜日,納豆ごはん,焼きそば,焼き魚

実際のデータは、プログラムで選ばれた料理に応じて変わります。

CSVファイルは、表計算ソフトで開いたり、別のプログラムで読み込んだりできるため、データを活用しやすいのが特徴です。

CSV保存で使用するコードの意味

今回使用した主な命令を確認しておきましょう。

  • import csv:CSVファイルを扱う機能を読み込む
  • open():ファイルを開く
  • "w":書き込みモードでファイルを開く
  • newline="":CSVファイルの改行を適切に扱う
  • encoding="utf-8-sig":日本語を含むCSVをExcelで開く際の文字化けを軽減する
  • csv.writer():CSV形式でデータを書き込む
  • writer.writerow():1行分のデータを書き込む

プログラムを実行すると、通常はPythonファイルを実行したときの作業フォルダに weekly_meal_plan.csv が作成されます。

同名のファイルがすでにある場合、今回の "w" モードでは既存の内容が上書きされるため注意してください。

Pythonの献立自動作成を応用する方法

基本的な献立作成ができたら、さらに便利な機能を追加してみましょう。

料理の重複を減らす

今回のプログラムでは、朝食・昼食・夕食それぞれの候補を7種類ずつ用意しています。

そのため、同じ食事区分では7日間に同じ料理が重複しません。

ただし、料理の候補が7種類より少ない場合や、同じ料理名を複数登録した場合は、別の工夫が必要になります。

例えば、候補が少ない場合は、料理の種類を増やしたり、主菜と副菜を別々に管理したりする方法が考えられます。

また、朝食と夕食で同じ料理を使いたくない場合は、全食事で使用した料理を記録し、重複を避ける条件を追加することもできます。

食材リストから買い物リストを作る

献立を自動作成できるようになったら、次は買い物リストの自動作成に挑戦してみましょう。

料理と必要な食材を対応づけておけば、献立に登場する食材をまとめて一覧にできます。

例えば、次のような対応表を作ります。

ingredients = {
    "カレーライス": ["じゃがいも", "にんじん", "玉ねぎ"],
    "親子丼": ["鶏肉", "玉ねぎ", "卵"],
    "焼きそば": ["麺", "キャベツ", "豚肉"]
}

このデータを使えば、料理ごとに必要な食材を取り出せます。

shopping_list = set()

for recipe in ["カレーライス", "親子丼", "焼きそば"]:
    for ingredient in ingredients[recipe]:
        shopping_list.add(ingredient)

print("買い物リスト")

for ingredient in sorted(shopping_list):
    print(ingredient)

実行すると、次のような一覧が表示されます。

買い物リスト
キャベツ
じゃがいも
にんじん
玉ねぎ
卵
豚肉
鶏肉
麺

ここでは、set() を使って食材を管理しています。

集合と呼ばれるデータ型で、同じ値を重複して保持しない特徴があります。

そのため、複数の料理で玉ねぎを使う場合でも、買い物リストには玉ねぎを1回だけ表示できます。

ただし、この例では食材の必要量を計算していません。実際の買い物に活用する場合は、料理ごとの分量や家族の人数も管理すると、さらに便利になります。

予算や好みを考慮した献立に発展させる

料理の候補に価格や料理の種類を登録すれば、予算や好みに合わせて献立を作るプログラムにも発展させられます。

例えば、料理のデータに次のような情報を追加します。

  • 料理名
  • おおよその材料費
  • 和食・洋食などの分類
  • 調理にかかる時間
  • 使用する食材

これらの情報を使えば、1週間の食費の目安を計算したり、調理時間が短い料理を優先したりできます。

ただし、単純なランダム選択では予算内に収まる保証はありません。

予算を守るには、料理ごとの費用を合計し、上限を超えた場合に別の料理を選び直すなどの条件を追加する必要があります。

栄養バランスを考慮したい場合も、食材の分量や栄養成分のデータを用意し、適切な条件で判定する仕組みが必要です。

献立自動作成でよくある疑問とエラー対策

ここでは、プログラムを実行するときに起こりやすい問題と、その対処方法を紹介します。

同じ献立が何度も出てくる場合

同じ食事区分で料理が重複する場合は、料理候補の数と並べ替えの方法を確認しましょう。

今回のコードでは、7種類の候補を用意してから random.shuffle() で順番を変えています。

この方法では、同じリスト内の料理は重複しません。

ただし、同じ料理名をリストに2回登録している場合は、表示上は同じ料理が出てくる可能性があります。

また、朝食と昼食など、異なるリスト間の重複は今回のコードでは防いでいません。

CSVファイルが文字化けする場合

CSVファイルをExcelで開いたときに日本語が文字化けする場合は、ファイルの文字コードを確認してください。

今回のコードでは、次のように指定しています。

encoding="utf-8-sig"

これは、UTF-8にBOMを付けて保存する指定です。

Windows版Excelで日本語を含むCSVを開く際に、文字化けを軽減する方法のひとつです。

料理の候補を追加・変更する方法

料理を追加する場合は、menus の該当するリストに料理名を追加してください。

例えば、朝食に「フレンチトースト」を追加する場合は、次のように記述します。

menus["朝食"].append("フレンチトースト")

append() は、リストの末尾に新しい要素を追加するメソッドです。

ただし、今回のコードは7日分の献立を作るため、候補を8種類以上に増やしても、最初の7種類だけが表示対象になります。

候補を8種類以上に増やした場合は、表示する日数や選択方法も変更するとよいでしょう。

まとめ

今回は、Pythonを使って1週間分の献立を自動作成する方法を紹介しました。

この記事で解説した内容を振り返りましょう。

  • リストと辞書を使って曜日や料理を管理する
  • random.shuffle() で料理の順番をランダムに変更する
  • for文を使って7日分の献立を表示する
  • CSVファイルに保存してExcelなどで活用する
  • 食材リストや予算管理などの機能に発展させる

今回のプログラムは、Pythonの基本的な機能だけで作成できるため、初心者が実用的なプログラミングを学ぶ題材としても適しています。

最初は料理の候補を登録するだけでも十分です。

慣れてきたら、買い物リストの作成や予算管理など、自分の生活に合わせた機能を少しずつ追加してみてください。

Pythonは、データを整理したり、繰り返しの作業を自動化したりするのが得意なプログラミング言語です。

献立作成をきっかけに、日常生活のさまざまな作業を効率化するプログラムにも挑戦してみましょう。

スポンサーリンク
タイトルとURLをコピーしました