📖 テーマ設定
🔊 音声設定
1.2
1.0
1.0
▶️ 再生コントロール
🎵 BGM設定
0.3
🔔 効果音設定
0.3

実装の進め方 分離の設計図

概要

  • 日程: Day 4 / セッション 1
  • 時間: [9:00-9:30]
  • 形式: 座学
  • ゴール: 「情報の設計とシステムの設計の分離」「プレゼンテーションと機能の分離」を、今日の実装構成(モックAPI+UI)に対応づけて説明できる。今日使うツール(APIモック、GitHub等)の役割をそれぞれ一言で言える
  • 学習形式: 対話型解説+デモンストレーション

導入(5分)

いよいよ最終日です。今日はこれまでの3日間で作った成果物を「動くソフトウェア」にします。

ここで少し考えてみてください。Day 1 から Day 3 まで、あなたはコードを1行も書かずに設計を積み上げてきました。情報定義書、ペルソナ、情報モデル、状態遷移図、機能一覧、ワイヤーフレーム、API設計書。これらは無駄な回り道だったでしょうか?

答えは今日の夕方に出ます。設計が正しくできていれば、実装は「設計図を翻訳する作業」になります。逆に、設計なしで書き始めると、コードを書きながら設計をやり直すことになります。

このセッションは、研修全体の「ホール・パート・ホール」の最後のホールの入り口です。まず全体の地図を確認してから、手を動かし始めましょう。

本編(20分)

1. Day 1〜3 の成果物は実装のどこになるのか

3日間の成果物と、今日作るものの対応関係を地図にします。

flowchart LR subgraph D1["Day 1 情報の設計"] A1["情報定義書"] A2["ペルソナ"] A3["整理分類済み情報定義書"] end subgraph D2["Day 2 モデルと画面"] B1["情報モデル・状態遷移図"] B2["機能一覧"] B3["ワイヤーフレーム"] end subgraph D3["Day 3 システムの設計"] C1["RESTful API設計書"] C2["テーブル設計"] end subgraph D4["Day 4 実装"] E1["モックAPI (db.json / API Blueprint)"] E2["UI (index.html + app.js)"] end A1 --> B1 A3 --> B1 A2 --> B3 B1 --> C1 B2 --> C1 B1 --> C2 C1 --> E1 B3 --> E2 E2 -->|"HTTP + JSON"| E1

読み方は単純です。

  • 情報の設計(Day 1〜2 前半)は、モックAPIが返す「データの形」になる
  • システムの設計(Day 3)は、モックAPIの「エンドポイント」になる
  • プレゼンテーション(ワイヤーフレーム)は、UI のコードになる
  • 機能とプレゼンテーションの間は、HTTP と JSON の通信でつなぐ

たとえるなら、Day 1〜3 は建築の設計図で、今日は施工です。設計図があるので、今日のあなたは「何を作るか」で迷いません。迷ってよいのは「どう作るか」だけです。

コード例・実例

家計簿システムなら、対応はこうなります。

Day 1〜3 の成果物 Day 4 での姿
情報「支出」(日付・金額・カテゴリ・メモ) db.jsonexpenses 配列の1要素
状態遷移の CRUD GET/POST/PUT/DELETE /expenses
機能「一覧表示」 GET /expenses + 一覧画面の描画処理
ワイヤーフレーム「支出一覧画面」 index.html のテーブルと app.js の描画

ここがポイント

  • 実装で迷ったら、必ず Day 1〜3 の成果物に戻る。「この画面に出す情報は情報定義書のどれか」「このAPIは機能一覧のどれか」と辿れる状態を保つ
  • 逆に、成果物にない情報や機能を実装したくなったら、それは設計の変更。先に成果物側を直してから実装する

コラム

「アーキテクト(architect)」の語源はギリシャ語の archi(頭領)+ tekton(大工)、つまり「大工の棟梁」です。ソフトウェアの世界がこの言葉を借りたのは、建築と同じく「作り始める前に構造を決める人」が必要だったから。ちなみに建築界からは「ソフトウェアは建築ほど簡単に壊してやり直せないはずなのに、気軽にアーキテクチャと呼ぶな」と言われることもあります。今日のあなたは棟梁と大工の一人二役です。

2. 2つの分離はコードの構成にこう現れる

この研修で繰り返してきた2つの分離を、今日のディレクトリ構成に対応づけます。

  • 情報の設計とシステムの設計の分離
    • 情報の設計: db.json のデータ構造(何を、どんな属性で持つか)はペルソナの価値から決まる
    • システムの設計: エンドポイントの形式や通信方式(REST/JSON)はコンピュータの都合から決まる
    • 分離できている状態: データ構造を変えずに、API の実装ツールを apiary から JSON Server に差し替えられる
  • プレゼンテーションと機能の分離
    • プレゼンテーション: ui/ フォルダ(HTML と描画用 JavaScript)
    • 機能: api/ フォルダ(モックAPIの定義)
    • 分離できている状態: UI を作り直しても API は1文字も変わらない。API を本物に差し替えても UI は(接続先以外)変わらない
kakeibo/
├── api/
│   └── db.json          ← 機能側(情報モデル由来のデータと CRUD)
└── ui/
    ├── index.html       ← プレゼンテーション(構造)
    ├── app.js           ← プレゼンテーション(描画・イベント)
    └── api.js           ← 通信の窓口(fetch をここに集約)

ここで少し考えてみてください。もし app.js の中に「合計金額の計算ルール」を書いたら、それはどちら側の仕事でしょうか? 計算は機能です。UI に書くと分離が崩れます。今日は何度もこの問いを自分に投げかけることになります。

ここがポイント

  • 分離の判定基準はただ一つ。「片方だけを交換できるか」
  • 完成度より分離の維持を優先する。動く機能が少なくても、分離が保たれていれば今日は合格

コラム

「関心の分離(Separation of Concerns)」という言葉は、1974年に計算機科学者エドガー・ダイクストラが論文の中で使ったのが始まりとされます。彼は「一度にすべてを考えるのは人間には無理だ。だから関心ごとに切り分けて、一つずつ完全に考えるのだ」と述べました。構造化プログラミングの父の悩みは、50年後の私たちの悩みと同じだったわけです。

3. 今日の道具箱

今日使うツールの役割を確認します。

  • APIモック
    • apiary: API Blueprint という Markdown 風の記法で API 仕様を書くと、クラウド上にモックサーバが立つサービス。設計書がそのまま動く点が強み
    • JSON Server: db.json を置いて起動するだけで REST API が動く npm パッケージ。ローカルで完結し、POST や DELETE で実際にデータが変わる。本研修の主教材はこちら
  • UI 開発
    • 素の HTML + JavaScript(fetch API)を基本にする。Monaca や React などのフレームワークは、同じ構成の発展形として位置づける
  • GitHub
    • ソースコードの置き場と履歴管理。今日の成果物の提出先。git init から push までを Session 4 で行う

なぜモックなのか、も確認しておきます。本物のデータベースやサーバを作るには時間がかかります。モックなら「機能側の外形(API)」を数分で固定でき、UI 側の開発をすぐ始められます。分離ができているからこそ、片方をモックで代用できるのです。

ここがポイント

  • ツールは手段。今日の主役は「分離された構成」であって、JSON Server でも apiary でも本質は同じ
  • ツールの操作で詰まったら、エラーメッセージごと AI に貼り付ける。それも今日の練習項目の一つ

コラム

apiary は英語で「養蜂場」という意味です。API という文字が入っていることに気づいたでしょうか(api-ary)。働き蜂のように小さな API たちが巣箱に収まっている、という洒落の効いた名前です。2017年にオラクルに買収されましたが、API 設計書(API Blueprint)を先に書いてモックを自動生成する「デザインファースト」の文化を広めた立役者でした。

💬 AIに聞いてみよう

  • 「『プレゼンテーションと機能の分離』を、レストランの厨房とホールにたとえて説明して。そのたとえで API は何にあたる?」
  • 「モックAPIを使う利点と、モックのまま本番に出してしまった場合に起きる問題を教えて」
  • 「私の開発テーマは〇〇です。Day 3 で作った API 設計書(貼り付ける)は、今日 JSON Server で再現できる形になっている? 足りない情報があれば指摘して」

実習・演習

課題

座学の締めとして、5分で「自分の分離マップ」を作ります。上の Mermaid 図をまねて、自分の開発テーマの成果物名で対応表(成果物 → 今日作るもの)を3行以上書き出してください。

成果物

  • 分離マップ(メモで可。成果物 → 実装物の対応3行以上)

ヒント

  • 「情報モデル1つ → リソース1つ → 画面1〜2枚」の比率が目安
  • 対応先が思いつかない成果物(例: 非機能要件一覧書)は「今日は使わない」と明記してよい。使わない判断も設計

まとめ(5分)

今回学んだことを一言でまとめると「Day 1〜3 の成果物は、そのまま今日の実装の設計図になる」です。

  • 情報の設計 → モックAPIのデータ構造
  • システムの設計 → エンドポイントと通信方式
  • プレゼンテーション → UI のコード
  • 2つの分離は api/ui/ というフォルダの形で目に見える

次のセッションでは、いよいよ機能側=モックAPIを作って動かします。設計書が「curl で叩くと JSON が返ってくる」に変わる瞬間です。

🔄 振り返りチェック

  • 「情報の設計とシステムの設計の分離」は、今日の構成のどこに現れると説明できますか?
  • 分離できているかを判定する基準を一言で言えますか?
  • apiary・JSON Server・GitHub の役割をそれぞれ一言で言えますか?

補足資料

  • 参考リンク: JSON Server(npm)公式 README、apiary / API Blueprint 公式ドキュメント、GitHub Docs「Hello World」
  • 発展課題: 自分の開発テーマで「もしモバイルアプリ版 UI を追加するとしたら、どのファイルは変更不要か」を考え、AI と答え合わせする

学習ガイド

想定される質問と回答例

質問 ヒント
モックAPIと本物のAPIは何が違う? データの永続化と業務ロジックの有無。外形(URL・メソッド・JSONの形)は同じにするのがモックの価値
なぜ最初にUIから作らないの? 機能側の外形(API)を先に固定すると、UIは「決まった契約」に向かって作れる。逆だとAPIの形がUIの都合で歪みやすい
3日間の成果物が不完全なまま今日を迎えてしまった 完全である必要はない。実装しながら成果物側に戻って直す。それがPDCA

つまずきやすいポイント

つまずきポイント ヒント
「分離」が概念のままで、ファイル構成と結びつかない api/ui/ の2フォルダ構成を先に作ってしまう。置き場所に迷ったら「片方だけ交換できるか」で判定する
成果物と実装の対応づけができず、何から書くか迷う 分離マップ(成果物→実装物の対応3行)を書いてから着手する。情報モデル1つ→リソース1つ→画面1枚から始める
ツール名(apiary、JSON Server、GitHub)の役割が混ざる apiary/JSON Server=機能側のモック、GitHub=ソースの保管庫。「どこで動くか(クラウド/ローカル)」で区別する
読み上げを開始します...

AIに質問する