はじめに
ECサイトを構築しようとすると、まず候補に上がるのがShopifyだと思います。確かに手軽で便利なんですが、カスタマイズしようとすると途端に壁にぶつかる。月額費用もバカにならないし、独自の要件を実現しようとするとサードパーティアプリに課金していくことになって、気づいたら結構な金額になっていた、なんて経験ありませんか。
そんな中で最近注目を集めているのが、MedusaというオープンソースのECプラットフォームです。GitHubスター数は31,000を超えており、「Shopifyのオープンソース代替」として着実に支持を集めています。
個人的には、エンジニアが関わるECプロジェクトなら、これ一択じゃないかと思っています。
Medusaとは
Medusaは、MITライセンスで提供されているオープンソースのヘッドレスコマースプラットフォームです。TypeScriptで書かれており、Node.js上で動作します。
「ヘッドレス」というのは、バックエンド(商品管理、注文処理、決済など)とフロントエンド(お客さんが見る画面)が分離されている設計のこと。つまり、フロントエンドは好きな技術で自由に構築できるんですよね。Next.jsでもNuxtでも、なんならネイティブアプリでもOK。
特徴・メリット
1. 圧倒的なカスタマイズ性
Medusaの最大の強みは、その柔軟性です。コアのECロジック(カート、注文、決済など)は提供されつつ、ビジネス固有の要件は自由に拡張できる設計になっています。
- データモデルのカスタマイズ
- 独自のワークフロー構築
- 管理画面のUI拡張
- APIエンドポイントの追加
SaaSだと「そのカスタマイズは無理です」と言われがちな要件も、オープンソースなら実現できる。これ、意外と大きいです。
2. モジュラーアーキテクチャ
すべての機能がモジュール化されているので、必要なものだけを使えます。決済モジュール、在庫管理モジュール、配送モジュールなど、それぞれ独立しているので、段階的な導入や既存システムとの統合がしやすい。
3. 多様なビジネスモデルに対応
B2C、B2B、マーケットプレイス、サブスクリプション、POSなど、様々なビジネスモデルに対応しています。複数地域対応、多通貨・多言語サポートも標準装備。グローバル展開を視野に入れている場合は特に心強いです。
4. MITライセンス
商用利用も完全に無料。Shopifyのような月額費用は一切かかりません。もちろん、インフラ費用は別途必要ですが、それでもトータルコストは大幅に抑えられます。
5. 充実したエコシステム
410名以上のコントリビューター、14,000名以上のDiscordコミュニティ。ドキュメントも充実していて、困ったときに情報が見つかりやすいのは正直ありがたいです。
インストール方法
前提条件
- Node.js v20以上(LTS版)
- Git
- PostgreSQL(起動済み)
セットアップ
npx create-medusa-app@latest my-medusa-store
このコマンド一発で、プロジェクトの作成からデータベースのセットアップまで完了します。
インストールが終わると、以下のURLでアクセスできます:
- バックエンドAPI:
http://localhost:9000 - 管理ダッシュボード:
http://localhost:9000/app - ストアフロント(選択時):
http://localhost:8000
基本的な使い方
開発サーバーの起動
cd my-medusa-store
npm run dev
srcディレクトリへの変更が自動で反映されるので、開発体験は快適です。
APIの利用例
Medusaは全機能をREST APIで提供しています。例えば、商品一覧を取得する場合:
// 商品一覧の取得
const response = await fetch('http://localhost:9000/store/products')
const { products } = await response.json()
console.log(products)
カートの作成と商品追加:
// カートの作成
const cartResponse = await fetch('http://localhost:9000/store/carts', {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
})
const { cart } = await cartResponse.json()
// 商品をカートに追加
await fetch(`http://localhost:9000/store/carts/${cart.id}/line-items`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
variant_id: 'variant_xxx',
quantity: 1
})
})
カスタムAPIエンドポイントの追加
独自のAPIエンドポイントを追加するのも簡単です:
// src/api/store/custom/route.ts
import type { MedusaRequest, MedusaResponse } from "@medusajs/medusa"
export async function GET(req: MedusaRequest, res: MedusaResponse) {
res.json({
message: "カスタムエンドポイントです"
})
}
管理画面の拡張
管理ダッシュボードもReactベースで、UIの拡張が可能です:
// src/admin/widgets/custom-widget.tsx
import { defineWidgetConfig } from "@medusajs/admin-shared"
const CustomWidget = () => {
return (
<div>
<h2>カスタムウィジェット</h2>
<p>独自の管理機能を追加できます</p>
</div>
)
}
export const config = defineWidgetConfig({
zone: "product.details.after",
})
export default CustomWidget
実践的なユースケース
1. D2Cブランドのオンラインストア
自社ブランドの世界観を完全にコントロールしたいD2C企業には最適。フロントエンドを自由にデザインできるので、ブランディングを妥協する必要がありません。
2. B2Bの卸売プラットフォーム
顧客グループごとの価格設定、承認フロー付きの注文、請求書払いなど、B2B特有の要件もカスタマイズで対応可能。
3. マルチベンダーマーケットプレイス
複数の出店者を管理するマーケットプレイス型ECも構築できます。売上の分配処理なども自前で実装可能。
4. サブスクリプションコマース
定期購入、会員制ECなど、継続課金が必要なビジネスモデルにも対応。Stripeなどの決済サービスとの連携もスムーズです。
5. オムニチャネル展開
Web、モバイルアプリ、実店舗のPOSを統合した在庫・顧客管理。APIファーストな設計だからこそ実現できるユースケースです。
まとめ
Medusaは、「ECサイトを作りたいけど、Shopifyの制約が気になる」というエンジニアやビジネスオーナーにとって、非常に魅力的な選択肢です。
正直なところ、学習コストはShopifyより高いです。でも、30代になって思うのは、初期の手間を惜しんで後で苦労するより、最初にちゃんと基盤を作っておく方が結局コスパがいいということ。
特に以下のようなケースでは、Medusa一択だと思います:
- 独自のUI/UXでブランド体験を作り込みたい
- 複雑なビジネスロジックを実装する必要がある
- 月額費用を抑えたい
- 将来的な拡張性を担保しておきたい
GitHubスター数31,000超、コミュニティも活発で、ドキュメントも充実している。エンタープライズでの採用実績もあり、日次5,000件以上の注文を処理している事例もあるとのこと。
ECプロジェクトを検討しているなら、一度触ってみる価値はあると思います。