Python | 1 日 60 分 × 7 日アプリ学習:Python文法を学ぶアプリ 日報管理編

Web APP Python
スポンサーリンク
スポンサーリンク

日報管理アプリ 1日目のゴール

1日目のテーマは 「日報(業務日報)を“記録・保存”できる最小のアプリを作りながら、変数・条件分岐・繰り返し・関数・ファイル操作・JSON の基礎を体験すること」 です。

日報管理は初心者にとって非常に学びやすい題材です。 理由はシンプルで、

  • テキスト(文章)を扱うため、データ構造が理解しやすい
  • JSON を使うことで「辞書のリスト」を自然に学べる
  • 記録 → 保存 → 表示 の流れが明確
  • 後日「検索」「編集」「削除」「集計」などに発展できる

というメリットがあります。

日報管理アプリ 1日目で作る機能

  • 日付
  • タイトル
  • 本文(今日やったこと)
  • 明日の予定

これらを入力し、 JSONファイルに保存して一覧表示できるアプリ を作ります。

この流れで、 変数・条件分岐・繰り返し・関数・ファイル操作・JSON をすべて体験できます。

JSONとは何か(初心者向けにかみ砕いて)

JSON は 「辞書やリストをそのまま保存できるファイル形式」 です。

日報データは次のような形になります。

{
  "date": "2026-08-11",
  "title": "新機能のテスト",
  "body": "午前はテスト、午後は修正対応。",
  "next": "明日はレビュー準備"
}

Python の辞書とほぼ同じ形なので、 読み込むとそのまま辞書として使える という大きなメリットがあります。

JSONファイルを扱うための基本関数

JSONを読み込む関数

import json

def load_report):
    """
    日報データを JSON から読み込む
    """
    try:
        with open("reports.json", "r", encoding="utf-8") as f:
            return json.load(f)
    except FileNotFoundError:
        return []  # 初回はファイルがないので空リスト
Python

JSONに保存する関数

def save_reports(reports):
    """
    日報データ(辞書のリスト)を JSON に保存する
    """
    with open("reports.json", "w", encoding="utf-8") as f:
        json.dump(reports, f, ensure_ascii=False, indent=2)
Python

深掘りポイント

  • JSON は辞書のリストをそのまま保存できる
  • ensure_ascii=False → 日本語をそのまま保存
  • indent=2 → 読みやすい整形済みJSON

日報を登録する機能(最重要)

from datetime import datetime

def add_report():
    """
    日報を登録する
    """
    date_str = datetime.now().strftime("%Y-%m-%d")
    title = input("今日のタイトル: ")
    body = input("今日やったこと: ")
    next_plan = input("明日の予定: ")

    reports = load_reports()

    new_report = {
        "date": date_str,
        "title": title,
        "body": body,
        "next": next_plan
    }

    reports.append(new_report)
    save_reports(reports)

    print("日報を登録しました。")
Python

深掘りポイント

  • 日付は自動で取得
  • 辞書としてまとめることで扱いやすい
  • JSON保存でデータが壊れにくい

日報一覧を表示する機能

def show_reports():
    """
    日報一覧を表示する
    """
    reports = load_reports()

    if not reports:
        print("まだ日報がありません。")
        return

    print("=== 日報一覧 ===")
    for r in reports:
        print(f"日付: {r['date']}")
        print(f"タイトル: {r['title']}")
        print(f"今日やったこと: {r['body']}")
        print(f"明日の予定: {r['next']}")
        print("------------------------------")
Python

深掘りポイント

  • 辞書のリストを繰り返し処理で表示
  • JSON → Python辞書 → 表示 の流れが自然に理解できる

メニューを表示する関数

def show_menu():
    print("------------------------------")
    print("日報管理アプリ 1日目 メニュー")
    print("1: 日報を登録する")
    print("2: 日報一覧を表示する")
    print("3: 終了する")
    print("------------------------------")
Python

main(アプリ全体の流れ)

def main():
    print("Python 日報管理アプリ 1日目")
    print("JSON形式で日報を記録する最小のアプリを作ります。")

    while True:
        show_menu()
        choice = input("番号を入力してください(1〜3): ")

        if choice == "1":
            add_report()
        elif choice == "2":
            show_reports()
        elif choice == "3":
            print("アプリを終了します。")
            break
        else:
            print("1〜3 の番号を入力してください。")
Python

1日目の完成コード(まとめ)

import json
from datetime import datetime

def load_reports():
    try:
        with open("reports.json", "r", encoding="utf-8") as f:
            return json.load(f)
    except FileNotFoundError:
        return []

def save_reports(reports):
    with open("reports.json", "w", encoding="utf-8") as f:
        json.dump(reports, f, ensure_ascii=False, indent=2)

def add_report():
    date_str = datetime.now().strftime("%Y-%m-%d")
    title = input("今日のタイトル: ")
    body = input("今日やったこと: ")
    next_plan = input("明日の予定: ")

    reports = load_reports()

    new_report = {
        "date": date_str,
        "title": title,
        "body": body,
        "next": next_plan
    }

    reports.append(new_report)
    save_reports(reports)

    print("日報を登録しました。")

def show_reports():
    reports = load_reports()

    if not reports:
        print("まだ日報がありません。")
        return

    print("=== 日報一覧 ===")
    for r in reports:
        print(f"日付: {r['date']}")
        print(f"タイトル: {r['title']}")
        print(f"今日やったこと: {r['body']}")
        print(f"明日の予定: {r['next']}")
        print("------------------------------")

def show_menu():
    print("------------------------------")
    print("日報管理アプリ 1日目 メニュー")
    print("1: 日報を登録する")
    print("2: 日報一覧を表示する")
    print("3: 終了する")
    print("------------------------------")

def main():
    print("Python 日報管理アプリ 1日目")
    print("JSON形式で日報を記録する最小のアプリを作ります。")

    while True:
        show_menu()
        choice = input("番号を入力してください(1〜3): ")

        if choice == "1":
            add_report()
        elif choice == "2":
            show_reports()
        elif choice == "3":
            print("アプリを終了します。")
            break
        else:
            print("1〜3 の番号を入力してください。")

if __name__ == "__main__":
    main()
Python

1日目で本当に掴んでほしいこと

● JSONは「辞書とリストをそのまま保存できる魔法の箱」

日報のような文章データでも扱いやすい。

● 関数を分けることでアプリが整理される

登録・表示・保存・読み込みが明確に分かれる。

● ファイル操作は「アプリに記憶を持たせる技術」

日報が残ることで、アプリが“道具”として使えるようになる。

次のステップ(2日目の予告)

2日目では日報管理アプリをさらに育てて、

  • 日付検索
  • タイトル検索
  • 部分一致検索
  • 日報の編集

という「日報管理の基本形」を完成させます。

タイトルとURLをコピーしました