ヘッドレスEC比較:Medusa vs Saleor vs Commerce.js でECバックエンドを構築する
オープンソースラボ編集部 ・ 2026年6月17日
ヘッドレスEC比較:Medusa vs Saleor vs Commerce.js でECバックエンドを構築する
🛒 フロントエンドと分離したAPIファーストのEコマースバックエンド。Medusa・Saleor・Commerce.jsを比較してモダンなECを構築しましょう。
ヘッドレスEコマースとは
バックエンド(商品管理・注文処理・在庫)とフロントエンド(デザイン・UI)を完全に分離したアーキテクチャです。Next.js等好きなフロントエンドでECを構築できます。
主要ツール比較表
| 項目 | Medusa | Saleor | Commerce.js |
|---|---|---|---|
| ライセンス | MIT | BSD 3-Clause | SaaS(OSS有り) |
| 言語 | TypeScript/Node.js | Python(Django) | SaaS API |
| セルフホスト | ◎ | ◎ | × |
| GraphQL API | ○(オプション) | ◎ネイティブ | ○ |
| REST API | ◎ | △ | ◎ |
| プラグイン | ◎ | ◎ | ○ |
| ダッシュボード | ◎ | ◎ | ◎ |
| Stripe統合 | ◎ | ◎ | ◎ |
| セットアップ | ◎ | ○ | ◎ |
各ツールの特徴
Medusa
Node.js/TypeScript製の軽量ヘッドレスEコマースプラットフォーム。Next.jsとの統合が非常にシンプルで、スタートアップに最適です。
主な特徴:
- TypeScript製のモジュラーアーキテクチャ
- 公式Next.jsスターターで即座に構築開始
- Stripe・PayPal等の支払いプロバイダー統合
- マルチ通貨・マルチリージョン対応
# Medusa プロジェクト作成
npx create-medusa-app@latest my-store
# バックエンドサーバー起動
cd my-store
npx medusa develop
# Admin Dashboard
# http://localhost:7001
# Next.js フロントエンド
cd storefront
npm run dev
# http://localhost:8000
// カスタムAPIエンドポイント(src/api/store/products/route.ts)
import type { MedusaRequest, MedusaResponse } from "@medusajs/medusa"
export const GET = async (req: MedusaRequest, res: MedusaResponse) => {
const productService = req.scope.resolve("productService")
const [products, count] = await productService.listAndCount({
status: ["published"],
}, {
relations: ["variants", "images"],
take: 20,
skip: 0,
})
res.json({ products, count })
}
// フロントエンドからのAPI呼び出し
import Medusa from "@medusajs/medusa-js"
const medusa = new Medusa({ baseUrl: "http://localhost:9000", maxRetries: 3 })
// 商品一覧取得
const { products } = await medusa.products.list({ limit: 10 })
// カートに商品追加
const { cart } = await medusa.carts.create()
await medusa.carts.lineItems.create(cart.id, {
variant_id: "variant_01HXXXX",
quantity: 1,
})
向いているケース: TypeScript/Node.js・Next.js連携・スタートアップ
Saleor
Python(Django)製のGraphQLネイティブなEコマースプラットフォーム。豊富な機能と高い拡張性が特徴です。
主な特徴:
- GraphQL APIネイティブ(すべての操作がGraphQL)
- マルチチャンネル(ECサイト/アプリ/B2Bを同一バックエンドで管理)
- Saleor Cloud(マネージドSaaS)も提供
- Webhookによるイベント駆動アーキテクチャ
# Docker Composeでセルフホスト
git clone https://github.com/saleor/saleor-platform
cd saleor-platform
docker compose up -d
# Admin Panel: http://localhost:9000
# GraphQL Playground: http://localhost:8000/graphql/
# Saleor GraphQL - 商品一覧取得
query GetProducts($first: Int!) {
products(first: $first, channel: "default-channel") {
edges {
node {
id
name
slug
pricing {
priceRange {
start {
gross { amount currency }
}
}
}
thumbnail { url }
variants {
id
name
quantityAvailable
}
}
}
}
}
向いているケース: Python/Django環境・GraphQL優先・マルチチャンネル
Commerce.js
SaaS型のヘッドレスEコマースAPI。インフラ管理なしで最速でECを構築したい場合の選択肢です。
主な特徴:
- インフラ管理不要のSaaS
- REST APIとSDK(JavaScript/React)で即座に統合
- ダッシュボードでノーコードで商品管理
- Stripe・PayPal等の支払い統合
// Commerce.js SDK の使い方
import Commerce from "@chec/commerce.js"
const commerce = new Commerce(process.env.NEXT_PUBLIC_CHEC_PUBLIC_KEY)
// 商品一覧
const { data: products } = await commerce.products.list()
// カート操作
const cart = await commerce.cart.retrieve()
await commerce.cart.add(productId, 1)
// チェックアウト
const token = await commerce.checkout.generateToken(cart.id, { type: "cart" })
const order = await commerce.checkout.capture(token.id, {
customer: { firstname: "田中", lastname: "太郎", email: "tanaka@example.com" },
shipping: { name: "standard" },
payment: { gateway: "stripe", card: { token: stripeToken } }
})
向いているケース: 最速立ち上げ・インフラ管理不要・小〜中規模
選択ガイド
| 状況 | 推奨 |
|---|---|
| TypeScript・Next.js・セルフホスト | Medusa |
| Python・GraphQL・マルチチャンネル | Saleor |
| 最速・インフラなし・小規模 | Commerce.js |
内部リンク
外部リソース
FAQ
Q. ヘッドレスECと従来のEC(Shopify等)の違いは何ですか?
Shopify等はフロントエンドのデザインに制約があります。ヘッドレスECはバックエンドAPIだけを使い、フロントエンドを完全に自由に構築できます。
Q. MedusaはShopify Plusの代替になりますか?
基本的なEC機能はカバーできます。ただし、Shopifyのアプリストア(数千のプラグイン)相当の豊富さはまだありません。
Q. SEO対策はヘッドレスECでも問題なくできますか?
Next.jsのSSR/SSGと組み合わせることでShopifyと同等以上のSEO対応が可能です。
Q. B2BのECにはどれが向いていますか?
SaleorはB2Bチャンネルをネイティブにサポートしており、企業向け販売(見積もり・掛け払い等)に強いです。