私自身がそうなのですが、OpenAPI仕様書を毎回手作業で書いていて「面倒だな」と思ったことはありませんか?
そんな(私と)あなたにぴったりのツールがあります。
レスポンスの例さえ用意すれば、OpenAPI 3.0 スキーマを自動生成してくれるとしたら?
それが、MockAPI-PHP です。
🧩 MockAPI-PHPとは?
MockAPI-PHPは、PHP 8.3+で動作する軽量ファイルベースのモックAPIサーバーです。
.jsonや.txtファイルだけでREST APIの挙動をシミュレートでき、サーバーやフレームワークは一切不要です。
主な特徴は以下の通りです:
- 単純なファイル構造で動的レスポンスを定義
- ポーリングや認証、エラー応答、遅延処理のシミュレーション
- OpenAPI 3.0 スキーマをレスポンス例から自動生成
- ブラウザまたはCLI経由でのモックAPI提供(CI/CD統合も可能)
🚀 主な機能
✅ JSON形式のレスポンス定義
✅ パスパラメータ対応(例:/users/{group}/{limit})
✅ クライアントごとのポーリング対応
✅ .envによる簡易認証設定
✅ opis/json-schemaによるスキーマバリデーション
✅ OpenAPIスキーマのYAML/JSON自動生成
✅ CLIツールとPHPビルトインサーバーに対応
🧪 使用例:モックエンドポイントの作成
次のようなエンドポイントをモックしたいとします:
GET /products→ 商品一覧を返すPOST /products→ 商品の新規作成PUT /products→ 商品の新規または更新PATCH /products/{id}→ 商品の一部更新DELETE /products/{id}→ 商品の削除- 各メソッドにおいて
?mock_response=errorを付与 → エラー応答を返す
必要なのは、以下のようなファイル構成です:
responses/
└── products/
├── get/
│ ├── default.json
│ └── error.json
├── post/
│ ├── default.json
│ └── error.json
├── put/
│ ├── default.json
│ └── error.json
├── patch/
│ └── default.json
└── delete/
└── default.json
たとえば、get用のJSONファイルの例:
[
{
"id": 1,
"name": "Product A",
"description": "Description of Product A",
"price": 19.99,
"category": "Electronics",
"stock": 100,
"created_at": "2025-04-01T12:00:00Z",
"updated_at": "2025-04-01T12:00:00Z"
},
...
]
次にサーバーを起動します:
php start_server.php
これで http://localhost:3030/api/products にアクセス可能になります。
GETメソッドなら、ブラウザから直接確認できます。
POSTやPATCHなどは以下のようにCLIからリクエストして確認します:
curl -X POST http://localhost:3030/api/products
📘 注目:OpenAPI 3.0 スキーマを自動生成
そして、これが本題の機能になります。
前項のモックレスポンスからOpenAPI仕様書を生成してみましょう!
次のコマンドで即座に生成できます:
php generate-schema.php yaml "My Awesome API" "1.0.0"
すると schema/openapi.yaml が生成され、SwaggerやStoplight、Postmanでそのまま読み込めます。
さらに、JSONレスポンスが長くなり過ぎないよう、配列データは最初の1件だけをサンプルとして埋め込む最適化もされています。
SwaggerUIで表示すると、以下のようなイメージになります:

🛠 活用シーン
- APIファースト開発(モック → 実装)
- バックエンド待ちなしでフロントエンド開発
- 成功・エラー・タイムアウトなど多様な応答テスト
- スキーマ構造の検証(コントラクトテスト)
🧩 今すぐ試してみよう!
- GitHub: https://github.com/ka215/MockAPI-PHP
- 要件: PHP 8.3以上、Composer
- ライセンス: MIT
ご覧いただきありがとうございました 🙌
役に立ったと思ったら、GitHubでスターを付けたり、チームにシェアしていただけると嬉しいです。