基礎から学ぶPython入門 90日コース | 実践開発 - Day 83:要件定義

Python 90日で身につけるPython
スポンサーリンク
スポンサーリンク

Day 83:要件定義 ― 「何を作るかを決める時間は、いちばんワクワクする」

Day 83は、いよいよ 最終プロジェクトを決める日 です。

ここまで学んできたPythonの知識を、 ひとつの「作品」にまとめていくためのスタートラインですね。

おすすめのプロジェクトは、次の3つです。

  • A:業務自動化システム
  • B:Web API
  • C:データ処理システム

どれも、実務でもよく使われるテーマで、 「学び」と「実用」がちょうどいいバランスになっています。

この日は、コードを書く前に、 「何を作るのか」「どう動いてほしいのか」 を 言葉で整理していきましょう。

要件定義とは ― 「作る前に、ゴールを言葉で描いておくこと」

要件定義の役割

要件定義は、一言で言うと、

「このシステムは、誰のために、何を、どうやって実現するのかを決める作業」

です。

いきなりコードを書き始めると、

  • 途中で「何を作っているんだっけ?」となる
  • 機能が増えすぎて、収拾がつかなくなる
  • 大事な機能が抜け落ちる

ということが起きがちです。

そこでまず、

  • 目的
  • ユーザー
  • 機能一覧
  • 入力と出力
  • 使う技術

を、ざっくりでもいいので言葉にしておきます。

「コードを書く前に、頭の中のイメージを外に出しておく」

これが、要件定義のいちばん大事な意味です。

A:業務自動化システム ― 「手作業をPythonに置き換えるプロジェクト」

Aのテーマとイメージ

Aのテーマは、

ExcelやCSV、ファイル操作、データベース、レポート作成を組み合わせた業務自動化システム

です。

例えば、こんなイメージが考えられます。

  • 毎日届くCSVファイルを読み込む
  • データを整形して、集計する
  • 結果をExcelやPDFのレポートにまとめる
  • 必要ならSQLiteに保存して履歴管理する

「人がやっている定型作業を、Pythonに任せる」 そんなプロジェクトです。

Aの要件定義のステップ

1. 目的を決める

  • 例:「売上データの集計レポートを自動で作る」
  • 例:「顧客リストCSVを整形して、きれいなExcelに変換する」

2. 入力と出力を決める

  • 入力:
    • CSVファイル(例:sales_2024_01.csv)
    • Excelファイル(元データ)
  • 出力:
    • 集計済みExcel(例:sales_report_2024_01.xlsx)
    • 必要ならSQLiteに保存した履歴

3. 機能一覧をざっくり書く

  • ファイル読み込み機能(CSV / Excel)
  • データ整形機能(不要列削除、型変換など)
  • 集計機能(合計・平均・グループ集計)
  • レポート出力機能(ExcelやCSVに書き出し)
  • 履歴保存機能(SQLiteに保存)

4. 簡単なコードイメージ

# main.py
import csv

def read_csv(path: str) -> list[dict[str, str]]:
    """
    CSVファイルを読み込み、1行ごとに辞書として返します。
    """
    rows: list[dict[str, str]] = []
    with open(path, encoding="utf-8") as f:
        reader = csv.DictReader(f)
        for row in reader:
            rows.append(row)
    return rows


def main() -> None:
    """
    業務自動化システムのメイン処理。
    ここでは、まずCSVを読み込むところから始めます。
    """
    data = read_csv("sales_2024_01.csv")
    print(f"読み込んだ行数: {len(data)}")


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

B:Web API ― 「FastAPI × SQLiteで“サービス”を作るプロジェクト」

Bのテーマとイメージ

Bのテーマは、

FastAPI + SQLiteでCRUD+認証+テストを備えたWeb APIを作る

です。

例えば、こんなAPIを想像できます。

  • ユーザーがログインする
  • タスク(ToDo)を作成・取得・更新・削除する
  • SQLiteに保存する
  • pytestでAPIのテストを書く

「自分だけの小さなWebサービス」を作るイメージですね。

Bの要件定義のステップ

1. 目的を決める

  • 例:「ユーザーごとのToDo管理APIを作る」
  • 例:「簡単なメモ管理APIを作る」

2. エンドポイントを決める

  • POST /auth/login:ログイン(トークン発行)
  • GET /tasks:タスク一覧取得
  • POST /tasks:タスク作成
  • PUT /tasks/{id}:タスク更新
  • DELETE /tasks/{id}:タスク削除

3. データ構造を決める(models)

  • Taskモデル:
    • id: int
    • title: str
    • done: bool
  • Userモデル:
    • id: int
    • username: str
    • password_hash: str

4. 簡単なFastAPIコードイメージ

# main.py
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Task(BaseModel):
    """
    タスクのデータモデル。
    """
    id: int
    title: str
    done: bool = False


# 仮のデータ(本番ではSQLiteを使う)
tasks: list[Task] = []


@app.get("/tasks")
def list_tasks() -> list[Task]:
    """
    タスク一覧を返すエンドポイント。
    """
    return tasks


@app.post("/tasks")
def create_task(title: str) -> Task:
    """
    タスクを作成するエンドポイント。
    """
    new_id = len(tasks) + 1
    task = Task(id=new_id, title=title)
    tasks.append(task)
    return task
Python

ここから、

  • SQLite接続
  • 認証(トークン)
  • テスト(pytest + httpxなど)

を少しずつ足していくイメージです。

C:データ処理システム ― 「API+pandasでレポートを自動生成するプロジェクト」

Cのテーマとイメージ

Cのテーマは、

APIからデータを取得し、pandasで処理して、CSVやExcelのレポートを自動生成するシステム

です。

例えば、こんな流れが考えられます。

  • 外部APIから売上データや天気データを取得する
  • pandasで整形・集計する
  • 結果をCSVやExcelに書き出す
  • 毎日自動でレポートを作る(将来的にはスケジューラと連携)

Cの要件定義のステップ

1. 目的を決める

  • 例:「APIから取得したデータを、毎日レポートにまとめる」
  • 例:「複数のCSVをまとめて、ひとつの集計レポートを作る」

2. データの流れを決める

  • 入力:
    • APIレスポンス(JSON)
    • CSVファイル
  • 処理:
    • pandasで整形・集計
  • 出力:
    • CSVレポート
    • Excelレポート

3. 簡単なpandasコードイメージ

# report.py
import pandas as pd

def create_report(csv_path: str, output_path: str) -> None:
    """
    CSVファイルを読み込み、簡単な集計レポートを作成して別のCSVに出力します。
    """
    # CSVを読み込む
    df = pd.read_csv(csv_path)

    # 例:列 "amount" の合計を計算する
    total = df["amount"].sum()
    print(f"合計金額: {total}")

    # 集計結果を新しいDataFrameにまとめる
    report_df = pd.DataFrame(
        [
            {"metric": "total_amount", "value": total},
        ]
    )

    # レポートをCSVとして保存
    report_df.to_csv(output_path, index=False)


def main() -> None:
    """
    データ処理システムのメイン処理。
    """
    create_report("sales.csv", "sales_report.csv")


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

ここから、

  • API呼び出し(requests や httpx)
  • 複数指標の集計
  • Excel出力(to_excel)

などを足していくイメージです。

Day 83ミニテンプレート ― 要件定義の書き方ひとまとめ

最後に、どのプロジェクトにも使える 「要件定義テンプレート」 を載せておきます。

1. プロジェクト名

  • 例:
    • 「業務自動化システム(売上レポート自動生成)」
    • 「ToDo管理Web API」
    • 「API連携データレポートシステム」

2. 目的

  • 誰のためのシステムか
  • 何を楽にしたいのか
  • どんな価値があるのか

3. 機能一覧

  • 入力(ファイル / API / フォーム)
  • 処理(集計 / CRUD / 認証)
  • 出力(CSV / Excel / JSON / Webレスポンス)

4. 使用技術

  • Python標準ライブラリ(csv, sqlite3, os など)
  • 外部ライブラリ(FastAPI, pandas, pytest など)

5. 簡単な画面・API・ファイルのイメージ

  • どんなURLがあるか(Web APIの場合)
  • どんなファイルを扱うか(業務自動化・データ処理の場合)

Day 83のまとめ ― 「何を作るかを決める時間は、作品の“始まりの物語”」

今日の主役は、

  • A:業務自動化システム
  • B:Web API
  • C:データ処理システム

そして、それらを形にしていくための 要件定義 でした。

要件定義は、

「コードを書く前に、作品の物語を言葉で描いておく時間」

でもあります。

  • 誰のために作るのか
  • 何を楽にしたいのか
  • どんなふうに動いてほしいのか

それを、少しずつ言葉にしていくことで、 プロジェクトは「ただの練習」から、 「自分の作品」 に変わっていきます。

Day 83で決めたこの最終プロジェクトが、 90日コースの集大成になります。

どのテーマを選んでも、 そこにはちゃんと「学び」と「誇り」が宿ります。

自分がいちばんワクワクするものを、 静かに、でも確かに、選んでみてください。

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