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ファイル(元データ)
- CSVファイル(例:
- 出力:
- 集計済みExcel(例:
sales_report_2024_01.xlsx) - 必要ならSQLiteに保存した履歴
- 集計済みExcel(例:
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()
PythonB: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: inttitle: strdone: bool
- Userモデル:
id: intusername: strpassword_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日コースの集大成になります。
どのテーマを選んでも、 そこにはちゃんと「学び」と「誇り」が宿ります。
自分がいちばんワクワクするものを、 静かに、でも確かに、選んでみてください。
