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

apiaryでAPIモック作成

概要

  • 日程: Day 4 / セッション 02
  • 時間: 9:30-10:00
  • 形式: 実習
  • ゴール: 自チームの主要情報モデル1つに対するREST APIモック(GET/POST/PUT/DELETE)をapiaryで作成し、curl またはブラウザで実際に応答を取得できる
  • 学習形式: ハンズオン実習(AIペアプログラミング)

導入(5分)

前のセッションで「APIとUIを分離する」「API仕様を先に固める」という方針を確認しました。では具体的にどう「先に固める」のか。仕様書をWord文書で書く?それともいきなりサーバコードを書く?

答えはどちらでもありません。仕様書を書くと同時にモックサーバが立ち上がるツールを使います。それがapiaryです。

apiaryでは「API Blueprint」というMarkdown風の記法でAPIを書きます。すると同じ内容から、

  • 見やすい仕様書ページ
  • リクエストすれば応答を返すモックサーバURL

の2つが自動生成されます。UI担当はそのURLを叩けば、APIの実装を待たずに開発を進められます。Day 1で習った「動いた!」の小さな成功体験を、APIで再現する時間です。

本編(10分)

1. API Blueprint の基本構文

API Blueprintは、Markdownを拡張した記法です。次の構造を覚えれば最初は十分です。

FORMAT: 1A
HOST: https://example.com/

# レシピ管理API

レシピ情報を管理するシンプルなREST API。

## レシピ一覧 [/recipes]

### 一覧取得 [GET]
+ Response 200 (application/json)
    + Body
            [
              { "id": 1, "title": "カレーライス", "time": 30 },
              { "id": 2, "title": "オムライス", "time": 20 }
            ]

### 新規作成 [POST]
+ Request (application/json)
    + Body
            { "title": "肉じゃが", "time": 40 }
+ Response 201 (application/json)
    + Body
            { "id": 3, "title": "肉じゃが", "time": 40 }

## レシピ詳細 [/recipes/{id}]
+ Parameters
    + id: 1 (number) - レシピのID

### 1件取得 [GET]
+ Response 200 (application/json)
    + Body
            { "id": 1, "title": "カレーライス", "time": 30, "ingredients": ["肉","じゃがいも"] }

### 更新 [PUT]
+ Request (application/json)
    + Body
            { "title": "ビーフカレー", "time": 35 }
+ Response 200 (application/json)
    + Body
            { "id": 1, "title": "ビーフカレー", "time": 35 }

### 削除 [DELETE]
+ Response 204

ここがポイント

  • # 見出し がAPI全体の名前
  • ## リソース [/path] でURLを宣言
  • ### メソッド [GET] でHTTPメソッドを宣言
  • + Response + Request でリクエスト/レスポンスを書く
  • インデント(半角スペース4つ)が崩れると認識されません

コラム:仕様 = 実行可能

昔は「仕様書」は紙のドキュメントでした。書いた仕様と実装が乖離しても、誰も気付かない(誰も読まない)のが日常茶飯事。API Blueprintのように「書いたら即モックが動く」「テストツールに食わせれば仕様準拠を自動チェックできる」仕組みは、仕様を実行可能にした革命です。同じ思想を持つツールにOpenAPI(旧Swagger)、RAMLなどがあります。

2. apiaryでモックサーバを動かす流れ

flowchart LR W["Blueprint記述"] --> A["apiary保存"] A --> S["仕様書ページ自動生成"] A --> M["モックURL自動生成"] M --> R["JSON応答"]

モックURLは curlfetch で呼び出すと、Blueprintに書いたレスポンス(JSON)が返ります。

  1. apiary.io にサインアップしてプロジェクトを作る
  2. エディタにAPI Blueprintを貼り付ける
  3. 自動でモックURL(例:https://private-xxxx.apiary-mock.com/)が生成される
  4. curl やブラウザ、JavaScriptのfetchでそのURLを叩く

curlで試す例:

# 一覧取得
curl https://private-xxxx.apiary-mock.com/recipes

# 新規作成
curl -X POST -H "Content-Type: application/json" \
     -d '{"title":"肉じゃが","time":40}' \
     https://private-xxxx.apiary-mock.com/recipes

JavaScriptで試す例:

// 一覧取得
fetch('https://private-xxxx.apiary-mock.com/recipes')
  .then(res => res.json())
  .then(data => console.log(data));

// 新規作成
fetch('https://private-xxxx.apiary-mock.com/recipes', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ title: '肉じゃが', time: 40 })
})
  .then(res => res.json())
  .then(data => console.log(data));

ここがポイント

モックサーバはBlueprintに書いた応答をそのまま返すだけです。POSTしてもデータは保存されません。あくまで「形」を共有するための仮サーバです。本物の保存・更新は次のセッションで作ります。

💬 AIに聞いてみよう

ここまでの内容で疑問があれば、AIに質問してみましょう。たとえば:

  • 「API Blueprintの記法でインデントが上手くいかない、書き直してくれる?」
  • 「自分のチームの情報モデル『〇〇』のCRUDを、API Blueprintで書いて」
  • 「apiaryでなく無料の代替ツールはある?」

実習(15分)

課題

自チームの主要情報モデル1つを選び、そのCRUD全て(GET一覧 / GET詳細 / POST / PUT / DELETE)をAPI Blueprintで書き、apiaryに登録してください。書けたらcurl または ブラウザでモックURLを叩き、JSON応答が返ることを確認します。

成果物

  • API Blueprintのテキスト(.apibまたは.md形式でGitHubに置く)
  • apiaryのモックURL
  • curl実行結果のスクリーンショット または コンソール出力ログ

ヒント

  • 情報モデル名は複数形でURLにする(/recipes, /users, /orders
  • IDは1件取得・更新・削除のURLパスに入れる(/recipes/{id}
  • レスポンスのJSONは、Day 2で作った情報モデル定義の「属性」をそのまま使う
  • 詰まったら「私のチームのモデルは〇〇で、属性は△△です。Blueprintを書いて」とAIに頼む
  • インデントが崩れて読み込めない時は、AIに「インデント直して」と頼むのが速い

まとめ(5分)

API Blueprintを書けば、仕様書とモックサーバが同時に手に入ります。これでUI担当は、APIの本実装を待たずに画面開発を始められます。「仕様を先に固めて並行作業する」というDay 4の核心を、たった30分で体感したことになります。

次のセッションでは、いよいよAPI本体の実装に入ります。モックで決めた「形」を、本物のロジックで動かしていきます。

🔄 振り返りチェック

  • API Blueprintの「リソース」「メソッド」「リクエスト」「レスポンス」の構文を空で書けますか?
  • なぜモックサーバが「並行作業」を可能にするのか説明できますか?
  • 自分のチームのモデル1つについて、CRUD 5つのURL+メソッドを言えますか?

補足資料

  • 参考リンク: API Blueprint公式(apiblueprint.org)、apiary公式チュートリアル
  • 発展課題: 同じAPIをOpenAPI(YAML/JSON)形式でも書いて、書き味の違いを比較する

学習ガイド

想定される質問と回答例

質問 ヒント
POSTPUTの使い分けは? POST=新規作成(IDはサーバが採番)、PUT=既存リソースの更新(IDを指定)
モックは本当のデータを保存できる? できない。固定の応答を返すだけ。本実装で対応
ステータスコードは何を返すべき? GET/PUT=200、POST=201、DELETE=204 が定番

つまずきやすいポイント

つまずきポイント ヒント
インデントが崩れて認識されない 半角スペース4つを厳守。タブはNG
モックURLにアクセスしても404 リソースのパスとメソッドのスペル、/の有無を再確認
設計が完璧でないと進めない感覚 モックは何度でも修正OK。むしろ修正しながら固めるのが正しい使い方
読み上げを開始します...

AIに質問する