【授業レポート】システム開発(3年) 第45週目
〜複数API連携と非同期設計:待ち時間と失敗を“設計で制御”する〜
第45週目は、前回までに組み込んだAPI連携を発展させ、複数APIを同時に扱う設計と、
非同期処理(待ち時間・部分失敗)を前提にした実装の考え方を学びました。
テーマは「速さ・安定性・分かりやすさの両立」です。
■ 先生の導入:「APIが増えるほど“待ち”と“失敗”は増える」
田中先生:「APIを2つ、3つと組み合わせると、
“どれかが遅い”“どれかが失敗する”が当たり前になります。
今日は、それを設計で吸収する方法を身につけましょう。」
先生は、同期処理でAPIを直列に呼ぶと遅くなる例を示し、
非同期・並列の発想が必要になる理由を説明しました。
■ 今日のゴール
- 複数API連携のユースケースを設計できる
- 同期/非同期の違いを理解する
- 並列実行で待ち時間を短縮する考え方を掴む
- 一部APIが失敗しても全体を止めない設計を実装する
■ 実習①:複数API連携のユースケース設計
まずは、どのAPIを組み合わせるかを明確化。
例(クラスで扱った案)
- 図書館システム
- 天気API:返却注意表示
- 祝日API:返却期限の延長判断
- 学習支援アプリ
- 翻訳API:英文補助
- 辞書API:単語の意味表示
生徒A:「1つは補助、1つは判断材料。役割を分けると整理しやすい」
■ 実習②:同期処理の問題点を体験する
まずは同期的(順番)にAPIを呼ぶコードで動作確認。
weather = weather_api.fetch(city)
holiday = holiday_api.fetch(date)
体感した問題:
- 合計時間が長くなる
- どちらかが失敗すると全体が止まる
- ユーザーが“待たされている感覚”になる
生徒B:「1つ遅いAPIがあるだけで、全部遅く感じる…」
■ 実習③:非同期・並列の考え方を学ぶ
次に、同時に呼び出す発想を導入。
(授業では概念理解を重視し、簡易的な非同期例を使用)
イメージ(概念)
weather_task = async_fetch_weather(city)
holiday_task = async_fetch_holiday(date)
weather, holiday = await gather(weather_task, holiday_task)
ポイント:
- 同時に待つことで、**待ち時間は“最も遅いAPI分”**になる
- 速さの体感が大きく改善する
生徒C:「裏で同時に動いてる感じがして、一気に“実務っぽい”」
■ 実習④:部分失敗を許容する設計
複数APIでは「全部成功」を前提にしないことが重要。
設計方針
- 重要度の低いAPIは失敗しても続行
- 成否を Result(成功/失敗) として扱う
- Service層で最終判断を行う
weather = safe_fetch_weather(city) # 失敗時は None
holiday = safe_fetch_holiday(date)
message = build_message(weather, holiday)
UI表示例:
- 「今日は祝日です。返却期限は延長されます」
- 「※天気情報は取得できませんでした」
生徒D:「“全部そろわないとダメ”じゃない設計が安心」
■ 実習⑤:優先度と表示タイミングの設計
最後に、どの情報を先に表示するかを検討。
- 主要機能はすぐ表示
- API補助情報は後から表示/更新
- ローディング表示で待ちを可視化
生徒E:「待たせるなら、待ってるって分かる方がいい」
先生からは
「UXは“速さ”だけでなく“納得感”」
という実務的な補足がありました。
■ クラス全体の気づき
- APIが増えるほど、設計の差が出る
- 非同期は“速くする技術”であり“壊れにくくする技術”
- Service層の責任がより重要になる
- UIは“全部揃うのを待たない”方が親切な場合がある
■ 先生のまとめのひとこと
「複数API連携は、
“便利さ”と“不安定さ”を同時に持ち込みます。
だからこそ、
並列・部分失敗・優先度を設計に組み込むことが大切です。
今日の考え方は、生成AIや大規模サービス連携でもそのまま使えます。」
■ 宿題(次週に向けて)
- 複数APIを使った ユースケース設計図(簡易シーケンス図) を作成
- 重要API/補助APIを分類し、その理由を書く
- APIが半分失敗した場合の UI表示案 を1つ考える
■ 来週の予告:生成AI連携の設計入門
次週はいよいよ、
生成AIをシステムに組み込むための設計に入ります。
「どう呼ぶか」よりも
「どう制御し、どう安全に使うか」がテーマです。
第45週目は、
API連携が“増えたときに壊れない設計”を学ぶ重要な節目でした。
生徒たちは、速度・安定性・UXを同時に考える
一段上のシステム設計力を身につけつつあります。
