AI

OSS ECサイト比較:Medusa vs WooCommerce vs Saleor でECサイトをセルフホスト

オープンソースラボ編集部2026年6月14日

OSSECサイト比較:Medusa vs WooCommerce vs Saleor でECサイトをセルフホスト

ShopifyはBASICプランで月$39(年払い$29)・Plusプランで月$2,300〜と、成長するにつれてコストが増大します。Medusa(Node.js製モダンECバックエンド)・WooCommerce(WordPress統合・世界シェアNo.1 OSS EC)・Saleor(GraphQL APIファーストのEC基盤)はShopify代替として注目されるOSSのECプラットフォームです。

OSSでECサイトを構築する理由

  • コスト: Shopify PLUSの月$2,300が毎月のサーバー代数千円に
  • 手数料ゼロ: Shopifyは決済ごとに0.5〜2.0%の取引手数料(外部決済の場合)
  • 完全なカスタマイズ: テーマ・チェックアウト・バックオフィス全てを自由に改修
  • データ所有権: 顧客データ・注文データが自社サーバーに
  • API統合: 独自のERP・在庫管理・CRMシステムとの直接連携

主要ツールの概要

Medusa

2021年にデンマークで創業したMedusa, Inc.が開発するオープンソースのECバックエンドです。GitHubスター27k+。Node.js(TypeScript)製でヘッドレスECアーキテクチャを採用し、フロントエンドはNext.jsやRemixで自由に構築できます。商品管理・在庫・注文・支払い(Stripe・PayPal等)・配送・返品・プロモーションコードをAPIで提供します。Medusa v2(2024年)からモジュール型アーキテクチャになり拡張性が大幅向上しました。

# Medusaプロジェクトの作成
npx create-medusa-app@latest my-store
# PostgreSQL + Stripeが必要(セットアップウィザードが案内)

cd my-store

# 管理画面バックエンドを起動
npx medusa develop

# 別ターミナルで管理UIを起動(Next.js)
cd admin
npm run dev

# 管理画面: http://localhost:7001
# バックエンドAPI: http://localhost:9000
// カスタム商品エンドポイントの追加(src/api/store/custom-products/route.ts)
import type { MedusaRequest, MedusaResponse } from "@medusajs/framework";

export const GET = async (req: MedusaRequest, res: MedusaResponse) => {
  // Medusaのサービスコンテナからクエリサービスを取得
  const query = req.scope.resolve("query");

  // 商品一覧をカテゴリー別に取得
  const { data: products } = await query.graph({
    entity: "product",
    fields: ["id", "title", "description", "thumbnail", "variants.*", "categories.*"],
    filters: {
      status: "published",
      categories: { handle: req.query.category as string || "all" },
    },
  });

  return res.json({ products, count: products.length });
};
// Stripe決済の統合(src/modules/payment/stripe.ts)
import Stripe from "stripe";

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {
  apiVersion: "2024-12-18.acacia",
});

// 支払いインテント作成
export async function createPaymentIntent(amount: number, currency: string) {
  const paymentIntent = await stripe.paymentIntents.create({
    amount: amount * 100,  // Stripeはセント単位
    currency,
    automatic_payment_methods: { enabled: true },
  });
  return paymentIntent;
}

// Webhookでの支払い確認
export async function handleStripeWebhook(rawBody: Buffer, signature: string) {
  const event = stripe.webhooks.constructEvent(
    rawBody,
    signature,
    process.env.STRIPE_WEBHOOK_SECRET!
  );

  if (event.type === "payment_intent.succeeded") {
    const paymentIntent = event.data.object;
    console.log(`Payment succeeded: ${paymentIntent.id}`);
    // Medusaの注文を確定する処理
  }
}

WooCommerce

2011年にWooThemesが開発し、現在はAutomatticが管理するWordPress用ECプラグインです。世界のEC市場シェア39%(2024年)を誇る最大のOSS ECプラットフォームです。WordPress管理画面からGUIで商品管理・在庫・注文・顧客を管理できます。拡張プラグインが数千種類あり、追加機能の導入が容易です。WordPressのエコシステム(テーマ・SEOプラグイン等)をそのまま活用できます。

# WordPress + WooCommerceをDockerで起動
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
  wordpress:
    image: wordpress:latest
    restart: always
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: woouser
      WORDPRESS_DB_PASSWORD: woopassword
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp_data:/var/www/html

  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: woouser
      MYSQL_PASSWORD: woopassword
      MYSQL_ROOT_PASSWORD: rootpassword
    volumes:
      - db_data:/var/lib/mysql

volumes:
  wp_data:
  db_data:
EOF

docker compose up -d
# WordPress初期設定: http://localhost:8080
# その後プラグイン > WooCommerceをインストール・有効化
// WooCommerce REST APIで商品を追加(PHP/Guzzle)
require_once 'vendor/autoload.php';
use GuzzleHttp\Client;

$client = new Client();
$response = $client->post('https://yoursite.com/wp-json/wc/v3/products', [
    'auth' => ['consumer_key', 'consumer_secret'],
    'json' => [
        'name' => 'Organic Cotton T-Shirt',
        'type' => 'variable',
        'status' => 'publish',
        'description' => '100% organic cotton, sustainable production',
        'regular_price' => '3500',
        'stock_quantity' => 100,
        'manage_stock' => true,
        'categories' => [['id' => 9]],
        'attributes' => [
            ['name' => 'Size', 'options' => ['S', 'M', 'L', 'XL'], 'variation' => true],
            ['name' => 'Color', 'options' => ['White', 'Black', 'Navy'], 'variation' => true],
        ],
    ]
]);
$product = json_decode($response->getBody(), true);
echo "Product ID: " . $product['id'];

Saleor

2017年にMirumee Softwareが開発を開始したGraphQL APIファーストのECプラットフォームです。GitHubスター21k+。Django(Python)製のバックエンドとNext.js製のフロントエンドで構成されるヘッドレスECです。GraphQL APIを通じて全機能にアクセスでき、商品カタログ・在庫・注文・支払い・配送・税金計算・マルチチャンネル(実店舗・オンライン・マーケットプレイス統合)に対応します。

# Saleorをローカルで起動(Docker Compose)
git clone https://github.com/saleor/saleor-platform.git
cd saleor-platform

# 設定ファイルをコピー
cp .env.example .env

# 起動(初回は数分かかる)
docker compose up -d

# スーパーユーザーを作成
docker compose exec api python manage.py createsuperuser

# Saleor API: http://localhost:8000/graphql/
# Saleor Dashboard: http://localhost:9000
# Saleor GraphQL APIで商品一覧を取得
query GetProducts($first: Int!, $channel: String!) {
  products(first: $first, channel: $channel) {
    edges {
      node {
        id
        name
        description
        thumbnail {
          url
          alt
        }
        pricing {
          priceRange {
            start {
              gross {
                amount
                currency
              }
            }
          }
        }
        variants {
          id
          name
          sku
          quantityAvailable
          pricing {
            price {
              gross {
                amount
                currency
              }
            }
          }
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

機能比較表

比較項目MedusaWooCommerceSaleor
技術スタックNode.js/TypeScriptPHP/WordPressPython/Django
API形式RESTRESTGraphQL
ヘッドレス部分的
管理UI✅(React)✅(WordPress)✅(React)
マルチチャンネル拡張必要
B2B対応プラグイン
GitHub Stars27k+N/A(WordPress plugin)21k+

ECサイトのマーケティング自動化にはMarketingカテゴリ/categories/marketingのツールも参照してください。ECサイトのセキュリティ対策はSecurityカテゴリ/categories/securityのパスワード管理・VPN設定を参考にしてください。

FAQ

Q. Shopifyからのデータ移行(商品・顧客・注文履歴)はどうやりますか?

A. Shopifyはデータのエクスポートをサポートしています。移行手順:

# 1. ShopifyからCSVエクスポート
# Admin > Products > Export (CSV)
# Admin > Customers > Export (CSV)
# Admin > Orders > Export (CSV)

# 2. MedusaへのCSVインポート(Medusa v2)
# Admin UIから Products > Import でCSVをアップロード
# またはMedusa REST APIで一括インポート

# WooCommerceへのShopify移行(WP All Importプラグイン)
# 1. WooCommerceサイトにWP All Importをインストール
# 2. ShopifyのCSVをインポートしてフィールドマッピング

# Saleorへのデータ移行(Pythonスクリプト)
import requests
import csv

SALEOR_URL = "http://localhost:8000/graphql/"
AUTH_TOKEN = "your-auth-token"

def import_products_from_shopify_csv(csv_path):
    with open(csv_path, newline='', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        for row in reader:
            # GraphQL mutationで商品を作成
            mutation = '''
            mutation CreateProduct($input: ProductCreateInput!) {
              productCreate(input: $input) {
                product { id name }
                errors { field message }
              }
            }
            '''
            variables = {
                "input": {
                    "name": row["Title"],
                    "productType": "default-type-id",
                    "description": {"blocks": [{"type": "paragraph", "data": {"text": row["Body (HTML)"]}}]},
                }
            }
            resp = requests.post(
                SALEOR_URL,
                json={"query": mutation, "variables": variables},
                headers={"Authorization": f"Bearer {AUTH_TOKEN}"}
            )
            print(resp.json())

Q. WooCommerceとMedusaではどちらがSEOに強いですか?

A. WooCommerce + WordPressのSEOが圧倒的に優位です。理由: ①Yoast SEO・RankMathなど高機能SEOプラグインが使える②WordPressのコンテンツ管理機能でブログ記事・LP・商品説明を充実させやすい③長年のSSR実績でGoogleクローラーへの対応が成熟している。MedusaやSaleor(ヘッドレス)のSEO対策: Next.jsフロントエンドのSSR/SSGを適切に設定すれば高いSEOスコアを実現できます。generateMetadataでタイトル・説明・OGタグを商品ページごとに最適化し、構造化データ(Product schema)を実装することが必要です。小規模サイトはWooCommerce・大規模カタログや高速化を重視する場合はMedusa/Saleorが適しています。

Q. ECサイトのPCI DSS(クレジットカード情報の安全基準)への対応は必要ですか?

A. カード情報を**自社サーバーに保存しなければPCI DSS SA Q(最も簡易な版)**の対応で済みます。実務上は以下の構成で対応します: Stripe Elements / PayPal / Square: カード情報はStripe等の決済プロバイダーのサーバーにのみ保存されます。自社サーバーには決済トークン(カード情報ではない)のみ保存。この構成を採用すればPCI DSS SAQ A相当となり、自社での厳格なPCI DSS準拠作業は不要になります。Medusa・WooCommerce・SaleorいずれもStripeやPayPalの統合がサポートされているため、カード情報を自社で扱わない構成が標準です。

Q. Medusaのマルチベンダーマーケットプレイスはどのように構築しますか?

A. Medusa v2はマルチリージョン・マルチチャンネルをネイティブサポートし、マーケットプレイスの基盤に使えます。

// 出品者ごとの商品管理(カスタムモジュール)
// src/modules/vendor/service.ts
import { MedusaService } from "@medusajs/framework/utils";

class VendorModuleService extends MedusaService({
  Vendor: {},
}) {
  async listVendorProducts(vendorId: string) {
    const productService = this.container_.resolve("productModuleService");
    return productService.listProducts({
      metadata: { vendor_id: vendorId }
    });
  }

  async createVendorProduct(vendorId: string, productData: any) {
    const productService = this.container_.resolve("productModuleService");
    return productService.createProducts({
      ...productData,
      metadata: { vendor_id: vendorId }
    });
  }
}

export default VendorModuleService;

まとめ

ユースケース推奨ツール
WordPress統合・SEO重視WooCommerce
ヘッドレス・TypeScript開発Medusa
GraphQL・マルチチャンネルSaleor

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。