【授業レポート】システム開発(3年) 第51週目
〜最終プロジェクト実装開始:設計を“動くシステム”へ〜
第51週目は、前回決定した最終プロジェクトの設計をもとに、
いよいよ実装フェーズがスタートしました。
ここからは、設計書に基づき
- API連携
- 生成AI機能
- エラーハンドリング
- ログ設計
を実際のコードとして組み上げていきます。
■ 先生の導入:「設計を信じて実装する」
田中先生:「実装が始まると、設計を無視して書きたくなることがあります。
でも、迷ったら必ず設計に戻ること。設計は“開発の地図”です。」
先生は、実装中に起きやすい問題として
- 設計と違うコードを書く
- 途中で構造が崩れる
- UIからAPIを直接呼び始める
などを挙げ、責務分離を守ることを強調しました。
■ 今日のゴール
- プロジェクトの基本構造をコードとして作る
- APIクライアントの骨組みを実装する
- AIクライアントの呼び出し部分を用意する
- ログと例外処理の基盤を整える
■ 実習①:プロジェクト構造の作成
まずは班ごとにプロジェクトのフォルダ構成を作成しました。
例:
project/
├─ app/
│ ├─ ui/
│ ├─ service/
│ ├─ api_clients/
│ ├─ ai_clients/
│ └─ models/
├─ logs/
├─ tests/
└─ README.md
ポイント:
- UI / Service / API を分離
- AI機能は専用クライアントにまとめる
- ログフォルダを最初から用意
生徒A:「構造を作るだけで“プロジェクト感”が出る!」
■ 実習②:APIクライアント実装
次に、外部APIを呼び出すクラスを作成。
学習用イメージ
class WeatherApiClient:
def fetch(self, city):
response = requests.get(
"https://api.example.com/weather",
params={"city": city},
timeout=5
)
response.raise_for_status()
return response.json()
重要ポイント:
- timeout設定
- HTTPエラー処理
- JSON変換
先生:「APIは必ず失敗する前提で書く。」
■ 実習③:AIクライアント骨組み作成
生成AI呼び出し部分も同様に整理。
Service
↓
AiClient
↓
AI API
例(概念)
class AiClient:
def generate(self, prompt):
response = ai_api_call(prompt)
return response
この段階では
- プロンプト生成
- 出力検証
はService側に置く設計にしました。
生徒B:「AIも“外部サービス”として扱うと整理しやすい」
■ 実習④:ログと例外処理の基盤
プロジェクト全体で共通のログ設定を追加。
例:
import logging
logging.basicConfig(
filename="logs/app.log",
level=logging.INFO
)
記録するログ:
- API呼び出し
- AI出力
- エラー
- フォールバック発動
生徒C:「ログがあると安心して実装できる」
■ 実習⑤:最初の動作確認
最後に、
- API呼び出し
- AI呼び出し(ダミー)
の基本動作を確認。
まだ機能は未完成ですが、
**プロジェクト全体が動く“土台”**ができました。
■ クラス全体の気づき
- 設計どおりに書くと迷いが少ない
- APIクライアントとService分離が重要
- ログは最初に入れておくべき
- AI機能も普通のAPIと同じ構造で扱える
■ 先生のまとめのひとこと
「今日の作業は、建物で言えば基礎工事です。
この基礎が弱いと、
後からどんな機能を追加しても崩れます。
逆に、
構造がしっかりしていれば
機能はいくらでも追加できます。」
■ 宿題(次週まで)
- API連携の基本機能を完成させる
- AIプロンプト生成部分をServiceに追加
- エラー発生時のフォールバック処理を書く
■ 来週の予告:機能実装フェーズ
次週は、
- AI機能実装
- APIデータ加工
- UI表示
を進め、
システムの主要機能を完成させる段階に入ります。
第51週目は、
最終プロジェクトの実装が本格的に動き始めた週でした。
生徒たちは設計を実際のコードに変換しながら、
3年間の学びを一つのシステムとして形にし始めています。

