冷蔵庫の中に何があるのか分からなくなったり、気づいたら賞味期限が切れていたりした経験はありませんか?
食材を管理するアプリやサービスはたくさんありますが、Pythonを使えば、自分で簡単な食材管理プログラムを作ることができます。
この記事では、Python初心者の方でも理解できるように、冷蔵庫の食材を管理するプログラムを基礎から順番に作っていきます。
最終的には、次のようなことができるプログラムを目指します。
- 食材を登録する
- 食材を一覧表示する
- カテゴリを管理する
- 数量を登録する
- 賞味期限を管理する
- CSVファイルに保存する
- 保存した食材データを読み込む
- 賞味期限が近い食材を確認する
Pythonのリストや辞書、CSVファイル、datetimeなどを実際に使いながら学べるため、Pythonの基礎を勉強した後の実践練習にもおすすめです。
- この記事で作る冷蔵庫食材管理プログラム
- Pythonで冷蔵庫の食材管理はできる?
- Pythonの実行環境を準備する
- まずは食材をPythonのリストで管理する
- 辞書を使って食材の情報を管理する
- 複数の食材を管理する
- 食材の一覧を表示する
- input()を使って食材を登録する
- 食材の情報をまとめて入力する
- 食材をリストに追加する
- CSVファイルとは?
- PythonでCSVファイルに食材を保存する
- CSVファイルから食材データを読み込む
- datetimeを使って賞味期限を管理する
- 賞味期限までの日数を計算する
- 賞味期限が近い食材を表示する
- 期限切れ・期限が近い食材を分けてチェックする
- 冷蔵庫食材管理プログラムの完成版
- 完成版プログラムの実行結果
- 初心者が知っておきたい完成版コードのポイント
- さらに便利にする応用アイデア
- Pythonで冷蔵庫の食材管理をする際によくある質問
- まとめ
この記事で作る冷蔵庫食材管理プログラム
今回作るのは、冷蔵庫にある食材の情報を登録して管理するシンプルなプログラムです。
例えば、次のようなデータを管理します。
- 食材名:牛乳
- カテゴリ:乳製品
- 数量:1本
- 賞味期限:2026-11-05
Pythonを使うことで、これらの情報をまとめて管理できます。
最初から複雑なプログラムを作る必要はありません。
まずはPythonのリストを使って食材を管理し、その後に入力機能、CSVへの保存、賞味期限チェックを追加していきましょう。
Pythonで冷蔵庫の食材管理はできる?
Pythonを使えば、冷蔵庫の食材管理は十分にできます。
例えば、Pythonでは次のような処理を作ることができます。
- 食材を追加する
- 食材を削除する
- 食材の一覧を表示する
- データをファイルに保存する
- 保存したデータを読み込む
- 今日の日付と賞味期限を比較する
- 期限が近い食材を自動で表示する
Pythonは、日常生活のちょっとした作業を自動化するのにも便利なプログラミング言語です。
今回のような食材管理プログラムは、Python初心者が実際にプログラムを作る練習としても適しています。
Pythonの実行環境を準備する
まずはPythonを実行できる環境を準備しましょう。
すでにPythonがインストールされている場合は、そのまま次へ進んで大丈夫です。
Windowsの場合は、コマンドプロンプトやPowerShellで次のコマンドを入力して確認できます。
python --versionPythonのバージョンが表示されれば、Pythonを実行できる状態です。
例えば、次のように表示されます。
Python 3.13.0コードを書くエディタには、Visual Studio Codeなどを使うと便利です。
初心者の方は、次のような流れで作業すると分かりやすいでしょう。
- Pythonをインストールする
- コードを書くファイルを作成する
- food_management.pyとして保存する
- Pythonで実行する
まずは食材をPythonのリストで管理する
最初は、Pythonのリストを使って食材を管理してみましょう。
複数の食材を管理する場合、リストが便利です。
foods = [
"牛乳",
"卵",
"納豆",
"キャベツ"
]
print(foods)実行すると、次のように表示されます。
['牛乳', '卵', '納豆', 'キャベツ']この方法でも食材を管理できますが、食材名しか保存できません。
例えば、
- 賞味期限
- 数量
- カテゴリ
なども管理したい場合は、もう少し便利な方法が必要です。
辞書を使って食材の情報を管理する
複数の情報をまとめて管理する場合は、辞書を使うと便利です。
次のように、食材名やカテゴリ、数量、賞味期限をまとめることができます。
food = {
"name": "牛乳",
"category": "乳製品",
"quantity": 1,
"expiry": "2026-11-05"
}
print(food)実行結果は次のようになります。
{'name': '牛乳', 'category': '乳製品', 'quantity': 1, 'expiry': '2026-11-05'}辞書では、それぞれのデータに名前を付けて管理できます。
例えば、食材名だけを表示したい場合は次のように書きます。
print(food["name"])実行結果です。
牛乳複数の食材を管理する
複数の食材を管理する場合は、辞書をリストの中に入れる方法が便利です。
foods = [
{
"name": "牛乳",
"category": "乳製品",
"quantity": 1,
"expiry": "2026-11-05"
},
{
"name": "卵",
"category": "卵",
"quantity": 10,
"expiry": "2026-11-10"
},
{
"name": "納豆",
"category": "大豆製品",
"quantity": 3,
"expiry": "2026-11-03"
}
]これで、複数の食材をまとめて管理できるようになりました。
食材の一覧を表示する
次に、登録した食材を見やすく表示してみましょう。
for文を使って、食材を1つずつ取り出します。
for food in foods:
print("食材名:", food["name"])
print("カテゴリ:", food["category"])
print("数量:", food["quantity"])
print("賞味期限:", food["expiry"])
print()実行すると、次のように表示されます。
食材名: 牛乳
カテゴリ: 乳製品
数量: 1
賞味期限: 2026-11-05
食材名: 卵
カテゴリ: 卵
数量: 10
賞味期限: 2026-11-10
食材名: 納豆
カテゴリ: 大豆製品
数量: 3
賞味期限: 2026-11-03このように、for文を使うことで、登録されている食材をまとめて確認できます。
input()を使って食材を登録する
ここまでは、コードの中に食材を直接書いていました。
しかし、実際に使うプログラムでは、キーボードから食材を入力できると便利です。
そこで、input()を使います。
name = input("食材名を入力してください:")
print("登録する食材:", name)実行すると、次のように入力できます。
食材名を入力してください:牛乳
登録する食材: 牛乳食材の情報をまとめて入力する
食材名だけではなく、カテゴリや数量、賞味期限も入力できるようにしてみましょう。
name = input("食材名:")
category = input("カテゴリ:")
quantity = int(input("数量:"))
expiry = input("賞味期限(YYYY-MM-DD):")
food = {
"name": name,
"category": category,
"quantity": quantity,
"expiry": expiry
}
print(food)例えば、次のように入力します。
食材名:牛乳
カテゴリ:乳製品
数量:1
賞味期限(YYYY-MM-DD):2026-11-05入力した情報を辞書としてまとめることができます。
ここで注意したいのが数量です。
input()で入力したデータは文字列として扱われます。
そのため、数量を数字として扱いたい場合はint()を使います。
quantity = int(input("数量:"))これにより、「1」という入力を文字列ではなく整数として扱えるようになります。
食材をリストに追加する
作成した食材データを、食材リストに追加してみましょう。
foods = []
name = input("食材名:")
category = input("カテゴリ:")
quantity = int(input("数量:"))
expiry = input("賞味期限(YYYY-MM-DD):")
food = {
"name": name,
"category": category,
"quantity": quantity,
"expiry": expiry
}
foods.append(food)
print(foods)append()を使うことで、新しい食材をリストに追加できます。
複数の食材を追加したい場合は、この処理を繰り返す仕組みを作ることもできます。
CSVファイルとは?
ここまでのプログラムには、大きな問題があります。
プログラムを終了すると、登録した食材のデータが消えてしまうことです。
そこで、CSVファイルを使ってデータを保存します。
CSVとは、表形式のデータを保存できるファイル形式です。
例えば、次のようなデータを保存できます。
name,category,quantity,expiry
牛乳,乳製品,1,2026-11-05
卵,卵,10,2026-11-10
納豆,大豆製品,3,2026-11-03Excelなどの表計算ソフトでも開けるため、初心者にも扱いやすいファイル形式です。
PythonでCSVファイルに食材を保存する
PythonにはCSVファイルを扱うためのcsvモジュールがあります。
次のコードでは、食材データをCSVファイルに保存します。
import csv
foods = [
{
"name": "牛乳",
"category": "乳製品",
"quantity": 1,
"expiry": "2026-11-05"
},
{
"name": "卵",
"category": "卵",
"quantity": 10,
"expiry": "2026-11-10"
}
]
with open("foods.csv", "w", newline="", encoding="utf-8-sig") as file:
fieldnames = ["name", "category", "quantity", "expiry"]
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(foods)
print("CSVファイルに保存しました。")実行すると、コードを保存しているフォルダにfoods.csvというファイルが作成されます。
ポイントは、csv.DictWriterを使っている部分です。
今回は、食材の情報を辞書として管理しているため、DictWriterを使うと辞書のデータをCSVに保存できます。
また、encoding=”utf-8-sig”を指定することで、日本語を含むCSVファイルをExcelで開きやすくなります。
CSVファイルから食材データを読み込む
次に、保存したCSVファイルを読み込んでみましょう。
import csv
foods = []
with open("foods.csv", "r", encoding="utf-8-sig") as file:
reader = csv.DictReader(file)
for row in reader:
foods.append(row)
for food in foods:
print(
food["name"],
food["category"],
food["quantity"],
food["expiry"]
)実行結果の例です。
牛乳 乳製品 1 2026-11-05
卵 卵 10 2026-11-10これで、プログラムを終了しても食材データを保存できるようになりました。
datetimeを使って賞味期限を管理する
次は、賞味期限をチェックする機能を作ります。
Pythonで日付を扱う場合は、datetimeモジュールが便利です。
まず、今日の日付を取得してみましょう。
from datetime import datetime
today = datetime.today()
print(today)実行すると、現在の日付と時間が表示されます。
日付だけを表示したい場合は、次のようにできます。
from datetime import datetime
today = datetime.today().date()
print(today)賞味期限までの日数を計算する
登録した賞味期限と今日の日付を比較すれば、期限まで何日あるのかを計算できます。
from datetime import datetime
expiry = datetime.strptime(
"2026-11-05",
"%Y-%m-%d"
).date()
today = datetime.today().date()
days_left = (expiry - today).days
print("賞味期限まで", days_left, "日です。")datetime.strptime()は、文字列の日付をPythonで扱える日付データに変換するための機能です。
今回の日付は、
2026-11-05という形式なので、
"%Y-%m-%d"を指定しています。
- %Y:年
- %m:月
- %d:日
という意味です。
賞味期限が近い食材を表示する
ここまでの知識を使って、期限が近い食材を自動で表示してみましょう。
今回は、賞味期限まで3日以内の食材を表示します。
from datetime import datetime
foods = [
{
"name": "牛乳",
"expiry": "2026-11-05"
},
{
"name": "卵",
"expiry": "2026-11-10"
},
{
"name": "納豆",
"expiry": "2026-11-03"
}
]
today = datetime.today().date()
for food in foods:
expiry = datetime.strptime(
food["expiry"],
"%Y-%m-%d"
).date()
days_left = (expiry - today).days
if days_left <= 3:
print(
food["name"],
"の賞味期限が近づいています。"
)ただし、このコードには少し注意点があります。
期限がすでに過ぎている食材もdays_leftが3以下になるため、「期限が近い」と表示されます。
そのため、期限切れと期限が近い食材を分けて表示するようにすると、さらに便利です。
期限切れ・期限が近い食材を分けてチェックする
次のコードでは、
- 期限切れ
- 今日が期限
- 期限まで3日以内
- まだ余裕がある
という形で分けて表示します。
from datetime import datetime
foods = [
{
"name": "牛乳",
"expiry": "2026-11-05"
},
{
"name": "卵",
"expiry": "2026-11-10"
},
{
"name": "納豆",
"expiry": "2026-11-03"
}
]
today = datetime.today().date()
for food in foods:
expiry = datetime.strptime(
food["expiry"],
"%Y-%m-%d"
).date()
days_left = (expiry - today).days
if days_left < 0:
print(food["name"], "は期限切れです。")
elif days_left == 0:
print(food["name"], "は今日が期限です。")
elif days_left <= 3:
print(
food["name"],
"は期限まであと",
days_left,
"日です。"
)
else:
print(
food["name"],
"はまだ期限まで",
days_left,
"日あります。"
)このようにif文を使うことで、日付の状況に応じて処理を変えることができます。
冷蔵庫食材管理プログラムの完成版
ここまで学んだ内容を組み合わせて、簡単な冷蔵庫食材管理プログラムを作ってみましょう。
このプログラムでは、
- CSVファイルから食材を読み込む
- 食材を一覧表示する
- 新しい食材を追加する
- 期限が近い食材をチェックする
- データをCSVファイルに保存する
という処理を行います。
import csv
from datetime import datetime
FILE_NAME = "foods.csv"
def load_foods():
foods = []
try:
with open(
FILE_NAME,
"r",
encoding="utf-8-sig"
) as file:
reader = csv.DictReader(file)
for row in reader:
row["quantity"] = int(row["quantity"])
foods.append(row)
except FileNotFoundError:
pass
return foods
def save_foods(foods):
fieldnames = [
"name",
"category",
"quantity",
"expiry"
]
with open(
FILE_NAME,
"w",
newline="",
encoding="utf-8-sig"
) as file:
writer = csv.DictWriter(
file,
fieldnames=fieldnames
)
writer.writeheader()
writer.writerows(foods)
def show_foods(foods):
if not foods:
print("登録されている食材はありません。")
return
print("\n冷蔵庫の食材一覧")
for index, food in enumerate(foods, start=1):
print(
f"{index}. "
f"{food['name']} / "
f"{food['category']} / "
f"{food['quantity']}個 / "
f"期限:{food['expiry']}"
)
def add_food(foods):
print("\n食材を追加します。")
name = input("食材名:")
category = input("カテゴリ:")
quantity = int(input("数量:"))
expiry = input("賞味期限(YYYY-MM-DD):")
food = {
"name": name,
"category": category,
"quantity": quantity,
"expiry": expiry
}
foods.append(food)
print(name, "を追加しました。")
def check_expiry(foods):
today = datetime.today().date()
print("\n賞味期限をチェックします。")
for food in foods:
expiry = datetime.strptime(
food["expiry"],
"%Y-%m-%d"
).date()
days_left = (expiry - today).days
if days_left < 0:
print(
food["name"],
"は期限切れです。"
)
elif days_left == 0:
print(
food["name"],
"は今日が期限です。"
)
elif days_left <= 3:
print(
food["name"],
"は期限まであと",
days_left,
"日です。"
)
def main():
foods = load_foods()
while True:
print("\n--- 冷蔵庫食材管理 ---")
print("1. 食材一覧")
print("2. 食材を追加")
print("3. 賞味期限をチェック")
print("4. 保存して終了")
choice = input("番号を選択してください:")
if choice == "1":
show_foods(foods)
elif choice == "2":
add_food(foods)
elif choice == "3":
check_expiry(foods)
elif choice == "4":
save_foods(foods)
print("データを保存しました。")
print("プログラムを終了します。")
break
else:
print("1〜4の番号を入力してください。")
main()完成版プログラムの実行結果
プログラムを実行すると、次のようなメニューが表示されます。
--- 冷蔵庫食材管理 ---
1. 食材一覧
2. 食材を追加
3. 賞味期限をチェック
4. 保存して終了
番号を選択してください:例えば「2」を入力すると、新しい食材を登録できます。
番号を選択してください:2
食材を追加します。
食材名:牛乳
カテゴリ:乳製品
数量:1
賞味期限(YYYY-MM-DD):2026-11-05
牛乳 を追加しました。その後、「1」を選択すると食材一覧を確認できます。
冷蔵庫の食材一覧
1. 牛乳 / 乳製品 / 1個 / 期限:2026-11-05最後に「4」を選択すると、foods.csvにデータが保存されます。
次回プログラムを起動したときも、CSVファイルからデータを読み込めます。
初心者が知っておきたい完成版コードのポイント
完成版では、Pythonの基本的な機能がたくさん使われています。
関数を使って処理を分けている
例えば、
def load_foods():は、CSVファイルから食材を読み込む処理です。
ほかにも、
- load_foods():食材を読み込む
- save_foods():食材を保存する
- show_foods():食材一覧を表示する
- add_food():食材を追加する
- check_expiry():賞味期限を確認する
というように、役割ごとに処理を分けています。
このようにすると、コードが長くなっても管理しやすくなります。
while Trueでメニューを繰り返している
while True:を使うことで、プログラムのメニューを繰り返し表示しています。
「4. 保存して終了」が選ばれた場合だけ、
breakを使ってループを終了します。
tryとexceptでエラーを防いでいる
最初はfoods.csvがまだ存在していない場合があります。
そのままファイルを読み込もうとするとエラーになるため、
try:と、
except FileNotFoundError:を使っています。
これにより、CSVファイルが存在しない最初の起動でもプログラムを実行できます。
さらに便利にする応用アイデア
ここまででも基本的な食材管理はできますが、Pythonを使えばさらに便利にできます。
カテゴリ別に食材を表示する
例えば、
- 野菜
- 肉
- 魚
- 乳製品
- 冷凍食品
- 飲み物
など、カテゴリごとに食材を表示できます。
カテゴリを指定して検索する機能を作れば、冷蔵庫の中身を確認しやすくなります。
数量が少ない食材をチェックする
数量が少なくなった食材を表示する機能も便利です。
例えば、
if food["quantity"] <= 1:
print(food["name"], "の在庫が少なくなっています。")と書くことで、在庫が少ない食材を確認できます。
食材を削除する
使い切った食材を削除できるようにすると、より実用的になります。
例えば、食材一覧に番号を付けて、削除したい番号を選択する仕組みを作ることができます。
del foods[index]を使えば、指定した食材をリストから削除できます。
期限切れの食材を自動で警告する
プログラムを起動したときに、自動で期限切れの食材を確認する機能も作れます。
食品ロスを減らすためにも便利な機能です。
例えば、プログラムの開始時に、
check_expiry(foods)を実行すれば、毎回賞味期限を確認できます。
食材から献立を考える
さらに発展させると、冷蔵庫にある食材をもとに献立を考えるプログラムも作れます。
例えば、
- 卵
- キャベツ
- 豚肉
がある場合に、
「豚肉とキャベツの炒め物」
のような料理候補を表示する仕組みです。
食材管理の記事から「Pythonで1週間の献立を自動作成する方法」へ内部リンクを設置すると、関連性の高い記事同士をつなげることができます。
Pythonで冷蔵庫の食材管理をする際によくある質問
Python初心者でも作れますか?
はい、作れます。
最初から完成版のコードを理解する必要はありません。
この記事のように、
- リスト
- 辞書
- for文
- if文
- input()
- 関数
- CSV
- datetime
の順番で学んでいけば、初心者でも少しずつ作れるようになります。
CSVファイルはExcelで開けますか?
基本的にExcelで開くことができます。
今回のコードでは、
encoding="utf-8-sig"を指定しているため、日本語を含むCSVファイルをExcelで扱いやすくしています。
データベースを使った方がいいですか?
今回のような少量の食材管理であれば、CSVファイルでも十分です。
ただし、食材の数が増えたり、検索機能や複数のテーブルを使いたくなったりした場合は、SQLiteなどのデータベースを使う方法もあります。
初心者のうちは、まずCSVファイルを使ってデータ保存の基本を理解するのがおすすめです。
スマホから使えるようにできますか?
できます。
例えば、PythonでWebアプリを作れば、スマートフォンのブラウザから食材を管理することも可能です。
その場合は、FlaskやDjangoなどのフレームワークを使う方法があります。
まずは今回のような基本的なプログラムを作り、その後にWebアプリ化へ挑戦すると理解しやすいでしょう。
まとめ
今回は、Pythonを使って冷蔵庫の食材を管理する方法を紹介しました。
今回の記事で学んだポイントは次のとおりです。
- Pythonのリストで複数の食材を管理できる
- 辞書を使うと食材の詳細情報をまとめられる
- input()を使うと食材を入力できる
- CSVファイルを使うとデータを保存できる
- datetimeを使うと賞味期限を計算できる
- if文を使うと期限切れや期限が近い食材を判定できる
- 関数を使うとプログラムを整理できる
Pythonを学び始めたばかりの方にとって、「実際に生活で使えるプログラム」を作ることは、学習を続けるモチベーションにもつながります。
最初はシンプルな食材管理プログラムでも、少しずつ機能を追加することで、自分だけの便利な冷蔵庫管理システムに発展させることができます。
次は、食材の削除機能やカテゴリ検索機能を追加したり、登録されている食材を使って献立を考えたりするプログラムにも挑戦してみましょう。
Pythonを使って、毎日の生活を少しずつ便利にしていくことができます。
