「Magento」を使って1,400万商品を取り扱えるように越境ECサイトをパワーアップした話

モノタロウで海外向けのECサイト開発を担当している山田です。Tech Blogでは、これまでに国内サイトの開発・運用を効率化する様々な取り組みを紹介してきましたが、今回はモノタロウの海外事業に関する取り組みについて、特に、Magentoを活用したモノタロウの越境ECサイト開発と運用にスポットを当てて紹介します。

MonotaROの海外事業

モノタロウは、2000年に親会社であるGrainger社と住友商事の合資により国内事業者向けの間接資材の販売事業をスタートし、2001年に国内向けのサイトをリリースしました。その後、日本以外のアジア地域へも事業を拡大するため、2013年に東南アジア向け越境ECサイトの開設と、韓国子会社「Navimro」の設立という二つの海外事業をスタートさせます。これを皮切りに、2016年にはインドネシア子会社「MonotaRO Indonesia」、さらに2020年にはインド子会社「IB MONOTARO PRIVATE LIMITED」を設立しアジア各国で間接資材販売の事業を展開しています。

MonotaROの東南アジア向け越境ECビジネスについて

ここで、もう少し詳しくモノタロウの越境ECビジネスについて説明します。そもそも越境EC(The Cross-Border Electronic Commerce)とは、通販サイトを活用し国内から海外へ向けて商品を販売する電子商取引のことを指します。国内事業者向けのサイトであるmonotaro.comでは、約1,800万の商品を販売しています。モノタロウの越境ECサイトでは、国内向けに販売している1,800万商品の中から東南アジア向けに出荷できる約1,400万の商品を掲載しており、各国の事業者に国内から商品を配送しています。越境ECサイトは全部で6サイトあり、シンガポールマレーシアタイベトナムフィリピン、および台湾向けにサイトを公開しています。

モノタロウでは、これらのサイトをMagentoというEコマースのためのフレームワークを使って運用しています。

Magentoとは

Magentoは、世界的に利用されているECサイトを開発・運用するためのフレームワークです1。2021年のシェアで見ると、Eコマース運用に利用されるフレームワークの中ではWooCommerce、Shopifyに次いで3番目に利用されているフレームワークとなっています。また、オープンソースに限定すると、WooCommerceについで2番目のシェアとなります。(WooCommerceがWordPressのプラグインであることを考慮すると実質的には一位かと思います)。

f:id:yutayamada:20220221152445p:plain
Eコマースで利用されるフレームワークのシェア(2021年)2

Magentoは、多言語、多通貨、マルチドメイン・サイト運用など、越境ECの運用に必要な機能がデフォルトで用意されているため、越境EC運用においてよく利用されるフレームワークとなっています。

また、オープンソースであり自由に拡張できるという点もMagentoの大きなメリットの一つです。Magentoは開発者コミュニティが非常に活発で、世界中にいる約30万人の有志のMagento開発者が開発に協力しています。Magentoは現在Adobe社の所有物となっていますが、Magentoのアップグレードの際は有志開発者による修正内容がシステムに多く取り入れられています。

さらに、Magentoはエクステンションによる機能拡張が可能なシステムとなっており、多くの無償・有償のエクステンションを利用することでコードを書かずに機能の追加ができます。

Magentoを利用するメリット

  • 越境ECサイトのための機能が充実
    • 多言語
    • 多通貨
    • 多くの配送方法をサポート
    • マルチドメイン・サイトの運用機能
  • オープンソースで高い拡張性
  • エクステンションを活用した機能拡張

Magentoで越境ECサイトをリプレイスした背景

モノタロウの越境ECサイトはMagentoで運用しているという説明をしましたが、実は開設した当初、サイトのシステムはMagentoではありませんでした。当時の越境ECサイトは、国内向けサイトと同様にPythonを利用したモノタロウ独自の内製フレームワークで構築していました。しかし、サイトを運用していく中で、いくつかの問題が見えてくると同時に、システムをリプレイスする必要性がでてきました。具体的には、以下のような問題です。

ビジネスの拡大にシステムが対応できない

越境ECサイトの現在の取扱商品点数は約1,400万ですが、ビジネスがスタートした時点での商品点数は約300万でした。これは、当時の商品情報を扱うサードパーティのシステムの制限に依るものでした。この制約については当初から理解していましたが、当時はビジネスがまだそこまで拡大することが予測できなかったこともあり、このサードパーティのシステムの導入の容易さや機能性を考慮した上で採用したという経緯がありました。そして、東南アジアで需要の高い商品を分析し、掲載する商品300万点を決めていました。しかし、サイトを数年運用していくに連れて売上が増加し、サイトで掲載できる商品点数を増やしたいという要望が高まってきました。

内製フレームワークの運用コスト、学習コストの増大

社内の独自フレームワークは、運用の初期段階では「機能拡張が容易」「システムをビジネスに合わせていける」といったメリットが得られますが、時間がたちシステムの規模が大きくなるに連れデメリットの側面も見えてきます。越境ECサイト運用でも以下のような問題が顕著になりました。

  • システムの全てに精通した人が減り、開発・運用が非効率になる。
  • ドキュメントの整備が疎かになる。それに伴い、新しくチームに入ったエンジニアの学習コストが高くなる。

このような問題を解決するため、目を付けたのがMagentoでした。Magentoを活用することで以下の様な恩恵が受けられると考えたからです。

  • Magentoのシステムには、ソフトウェア開発の最新技術や、分かりやすいデザインパターンが数多く採用されている。そのため、ソフトウェア開発の知識があれば、システムへの理解が容易になる。
  • Magentoはオープンソースであり、有志の開発者によって日々進化している。そのため、質の高いシステムを使い続けることができる。
  • Magentoはドキュメントが充実している。
    • 世界中の有志の開発者がドキュメントのメンテナンスに携わっているため、内容が常に最新化されている。
    • 英語で書かれている。(海外事業のチームメンバーは外国の方も多いため非常にメリット)

また、越境ECサイトのリプレイスを検討していた時期、インドネシア子会社のMonotaRO Indonesiaは既にMagentoでのサイト運用を実現しており、韓国子会社のNavimroもJavaのオープンソース・フレームワークを利用したシステムへのリプレイスに成功していました。こうした事例も相まって、越境ECサイトについてもオープンソースのソフトウェアでシステムをリプレイスしたいという機運が高まっていました。

このような背景があり、越境ECサイトをMagentoでリプレイスし、2020年9月に新しいシステムでの運用を開始しました。

Magentoによるサイト開発・運用の効率化事例

ここからは、越境ECサイトをMagentoでリプレイスしたことにより、サイトの開発・運用がどのように効率化されたか、具体的な事例を挙げて紹介していきます。

結論からお話すると、以下のような良い事がありました。

  • エクステンション導入による開発の高速化
    • コードを書かずに、機能の拡張が出来ます。
  • ベスト・プラクティスに沿った開発手法の提供
    • 開発を合理的・効率的に行うための様々な手法が提供されています。
  • 公式ドキュメントの活用によるMagentoの学習
    • 設計理念や開発手法を学ぶためのドキュメントがとても充実しています。
  • MonotaROグループ会社間での機能の共同開発
    • MonotaRO IndonesiaもMagentoを利用しているので、両社で共通して利用する機能はGlobal Moduleとして開発・共有し、開発工数を削減できます。
    • お互いのサイト運用を通して得た知見を共有できます。

エクステンション導入による開発の高速化

最初の方でも紹介したように、Magentoはエクステンションによって機能を拡張できます。エクステンションの入手先として最も有名なものはAdobe公式の販売サイトであるMagento Marketplaceですが、他にもMagentoには約1,250社のパートナー企業が存在し、それぞれの企業が提供する無償・有償のエクステンションを利用できます。

また、サードパーティのサービス会社がMagentoのエクステンションを開発し提供しているケースも多くあります。

ここで、モノタロウの越境ECサイトの事例を一つ取り上げてご紹介します。越境ECサイトでは、カード決済にAdyenという会社の決済サービスを利用しています。実は、AdyenはMagento上でカード決済を行うためのエクステンションを提供しています。Adyenのサービス利用者は、このエクステンションを自分たちの運用するサイトに導入することで簡単にカード決済を実現できます。越境ECサイトでは、このAdyenが提供するエクステンションを導入し、本来であれば長い時間を掛けて開発・テストを行う必要のある決済処理を、ほとんどコードを書かずに実現しています。

私たちのグループでは、他にも多くのエクステンションを利用していて、開発に掛かる時間を短縮しています。

f:id:yutayamada:20220221152848p:plain
越境ECサイトの決済画面

ベスト・プラクティスに沿った開発手法の提供

Magentoは、Laminas Project(Zend Frameworkの後継)というPHPで実装されたオブジェクト指向Webフレームワークをベースに開発されたフレームワークです。Magentoは、ソフトウェア開発のベスト・プラクティスを数多く採用しており、開発を効率的にすすめる様々な手段が提供されています。ここでは、代表的なものを紹介します。

カスタマイズに対して堅牢性の高いアーキテクチャを提供

Magentoは、機能のカスタマイズを自由に行う事ができるシステムですが、カスタマイズによってシステム全体が壊れないよう堅牢な設計がされています。Magentoのアーキテクチャは、MVCモデルを基礎とする以下のような四つのレイヤーによって設計されていて、コア・プログラムもこのアーキテクチャに沿って実装されています。

Magentoを構成する四つのレイヤー

Domain layer

ビジネス・ロジック(モデル)を定義するレイヤーです。もう少し具体的にいうと、顧客情報、カテゴリ情報、商品情報、注文情報といったECサイトのシステムで利用されるオブジェクトや、そのオブジェクトに対する操作を定義します。

Persistence layer

データに対するCRUDを担うレイヤーです。Magentoでは、通常はDomainレイヤーで定義されたオブジェクトにデータベース名やテーブル名などのPersistenceレイヤーへの参照情報を持たせ、Domainレイヤーからの指示によってCRUDを実行します。

Presentation layer

フロントエンドにあたるレイヤーです。MVCモデルでのビューとコントローラーを定義します。

Service layer

PresentationレイヤーとDomainレイヤーの間に設けられたレイヤーで、二つのレイヤーの情報の橋渡しをします。Magentoでは、フロントエンドにあたるPresentationレイヤーから、商品情報や顧客情報などのビジネスロジックを定義したDomainレイヤーのオブジェクトを直接的に参照・操作する、という実装は非推奨とされています。PresentationレイヤーからDomainレイヤーを参照する場合は、Service Contractと呼ばれるMagentoが定義するAPIを介して参照することが推奨されています。これは、ビジネスロジックの変更がシステム全体に波及してシステムを汚染しないようにするための工夫です。

f:id:yutayamada:20220221152947p:plain
Magentoのアーキテクチャ3

このように、Magentoはカスタマイズに柔軟でありながらも、堅牢性も保持できるようなアーキテクチャを採用しています。もし、新しい機能の追加やエクステンションの導入によってシステムに不具合が多く発生してしまう場合、それはMagentoの御作法に沿って開発が行えていない可能性を示唆しています。

もちろん、モノタロウの越境ECサイトのDeveloperは、Magentoのアーキテクチャに沿って開発することを心がけています。

効率的に開発が行えるコーディング手法の提供

Magentoに限った話ではありませんが、何らかのフレームワークを利用している時、既存の機能に変更を加えたい(または機能を追加したい)、ということは多々あると思います。こういった場合、一番簡単で手っ取り早い方法は、その機能を実現しているクラスのメソッドをオーバーライドするなどし、別の処理で上書きしてしまうという方法です。もちろん、Magentoでもコアプログラムを別のプログラムで完全に上書きするというカスタマイズ方法は用意されていますが、あまり推奨されていません。フレームワークのコアプログラムをカスタマイズの過程で完全に書き変えてしまった場合、例えば

  • 利用しているフレームワークをバージョンアップした際に、コアプログラムの変更が反映されない。
  • エクステンションなどの別のプログラムが上書きしたコアプログラムを利用していた場合、正しく動作することが保証できない。

という問題が発生します。

Magentoには、コアプログラムに手を加えることなく、既存機能を変更できる便利なコーディング手法が幾つか用意されています。以下に、代表的なものを挙げます。

Observer(イベントベースの機能追加)

Observerと呼ばれるコーディング手法は、Magentoをカスタマイズするうえで最もよく利用される手法の一つです。一般的にはPublish - Subscribeパターンとして知られているデザインパターンの一つですが、もう少し噛み砕いて言うとフック処理に相当します。Magentoには、コアプログラムの中に沢山のフックポイントが埋め込まれています。このObserverと呼ばれるコーディング手法によって、開発者はフックポイントに対して任意の処理を追加することが可能になり、コアプログラムを書き変えることなく機能の変更・追加ができます。例えば、カート処理や決済処理に対して処理を追加したいという場合も、それらの処理を担っているプログラムを上書きするということはせずに、それぞれの処理を担当しているプログラムに埋め込まれたフックポイントを活用して処理を追加できます。

Plugins(Interceptor)

PluginsもMagentoでは非常によく利用されるコーディング手法です。Interceptorパターンとして知られるデザインパターンの一つですが、Magentoでは、あるメソッドの処理を直接的に変更することなく、メソッドに対して事前処理 / 事後処理の追加が可能になっています。例えば、あるメソッドに渡される引数や戻り値を少し変更したい、という場合によく利用されます。こちらの手法も直接的にコアプログラムに変更を加えることなく機能の変更・追加ができます。

Magentoには、ここで取り上げた以外にも便利なコーディング手法が用意されています。もちろん、機能変更の内容によってはどうしてもコアプログラムを上書きする必要性がでてくる場合もありますが、越境ECサイト開発では変更内容に応じて最適なカスタマイズ手法を選択するよう心がけ、Magento全体のシステムを壊さないように開発に取り組んでいます。

品質保証のための枠組みをデフォルトで提供

Magentoは、テストのための枠組みも充実しています。Magentoでどのようなテストが可能であるかは公式ドキュメントのTest Frameworkでまとめられていますが、PHPのユニットテストJavaScriptのユニットテストWeb APIのテストインテグレーションテストの環境がデフォルトで提供されています。ページのパフォーマンス測定のためのツールも用意されており、バックエンド側の処理のボトルネックを簡単に特定できます。

また、MagentoのDev Docsでは、Magentoの開発者が遵守すべきコーディング規約が細かく定義されています。Magentoのコーディング規約は、特に製品化されるエクステンションなどで厳しくチェックされ、例えば、Adobe公式のエクステンション販売サイトであるMagento Marketplaceに製品を投稿する際にコーディング規約に従っていない製品は却下されます。

モノタロウの越境ECサイトの開発においても、Magnetoの開発標準を遵守しコードの品質を保つよう努めています。例えば、サイト開発では開発ブランチのテスト環境へのデプロイをJenkinsで自動化していますが、デプロイの際にはユニットテストとコーディング・スタンダードのチェックを自動実行しており、品質に問題のあるコードを検知しています。

公式ドキュメントの活用によるMagentoの効率的な学習

Magentoには二つの公式ドキュメントが存在します。一つはMagentoコマース版の利用者・管理者向けドキュメントです。Magentoコマース版はAdobeが提供する有償のサービスで、フリー版では利用できない機能が提供されていたり手厚いサポートが受けられます。この利用者・管理者向けドキュメントには、主にMagentoの導入手順からデフォルトで利用できる機能の説明、および管理画面の操作方法などが詳しく書かれています。

もう一つは、開発者向けのドキュメントです。こちらのドキュメントには、利用者・管理者向けドキュメントの内容に加え、Magentoの設計理念、アーキテクチャ、および利用しているデザインパターン等も丁寧に説明されています。私の経験では、MagentoのDev Docsでの学習を通して、ソフトウェア開発のベストプラクティスが大いに身に付けられるのではないかと思います。

また、内容以外にもMagentoのドキュメントにはメリットがあります。一つ目は、常に最新の状態に更新されることです。Magentoのドキュメントは、Adobe社や有志開発者によって継続的にメンテナンスされているためです。二つ目は、英語で書かれていることです。モノタロウの越境EC開発の担当者には海外出身の方もいますので、英語でドキュメントを読めることは大きなメリットです。

ただ、MagentoのDev Docsはかなりの分量があるため、Magentoの初学者には少しハードな側面もあります。そのため私たちのチームでは、新しくチームに加わるメンバーがスムーズに学習できるよう、DevDocsの内容を要約した学習用ページを別途作成したり、Magentoの開発手順が一通り理解できるような練習問題を作成するなどの工夫をしています。

Magentoの公式ドキュメント

MonotaROグループ会社間でのグローバルな機能の共同開発

モノタロウには現在三つの海外子会社が存在しますが、国内サイトや越境ECサイトで成果のあった施策を子会社でも試してもらうという機会が度々あります(または、その逆も)。その際に厄介なのが、子会社で利用しているシステムに応じて開発を一から行う必要があることです。有効な施策も、開発に時間が掛かりなかなか始められない、ということはよくあります。

幸い、越境ECとインドネシア子会社であるMonotaRO IndonesiaはどちらもMagentoを利用していますので、同じ施策を開始するためにシステムを再開発するという手間が省けます。越境ECとMonotaRO Indonesiaでは、両サイトで共通して利用する機能を共同開発し、開発を効率化する取り組みを行っています。

例えば、越境ECサイトとMonotaRO Indonesiaサイトの商品詳細ページには、どちらも「この商品を見たお客さんはこんな商品も見ています」といった商品レコメンドがカルーセル形式4で表示されています。この両サイトの商品レコメンドは、同じロジック、同じプログラムを利用して表示しています。レコメンドを表示するためのコアとなるプログラムを共同開発して共有し、見た目などデザインに関する部分だけを各サイトで個別にカスタマイズすることで、開発工数を削減できます。

両サイトでは、他にも共有開発している機能が多く存在します。

f:id:yutayamada:20220224170116p:plain
越境EC(左)とインドネシア子会社(右)の商品詳細ページの商品レコメンド

Magentoで1,400万商品のサイトを実現するための工夫

越境ECサイトでは現在1,400万の商品を扱っていますが、Magentoの機能をそのまま利用しただけでは、これだけの商品点数を扱えるサイトは実現できません。

Magentoは、顧客情報、カテゴリ情報、および商品情報の管理にEAV(Entity–attribute–value model)と呼ばれるモデルを採用しています。属性と属性値を別々のテーブルで管理するデータ管理のモデルで、属性の追加のためにテーブルの列数を増やす必要がないため、動的な属性の追加に比較的柔軟に対応できます。Magentoは、ユーザー側でカテゴリや商品などの属性を自由にカスタマイズできるようにするため、このEAVモデルを採用しています。

しかし、モノタロウのようなサイトを実現する場合は問題が発生します。まず、モノタロウの越境ECサイトは取扱点数が1,400万と非常に多いです。そのうえ、取り扱っている商品が多種多様なため、商品属性5も自ずと多くなります。このようなケースにおいて商品情報をEAVモデルで管理すると、テーブルの行数が膨大になりデータベースのパフォーマンスを悪化させます。

私たちは商品属性の情報を、MagentoがデフォルトでサポートするMySQL / MariaDBで管理するのではなく、ドキュメント指向型のデータベースであるMongoDBで管理する方法で問題を解決しました。MongoDBはスキーマレスなDBであるため、商品ごとに多種多様な商品属性をもつモノタロウのようなサイトに適合するのではないかと考えたためです。また、オンメモリで動作する特性上、大量のデータに対してもパフォーマンスの面で優れています。このような理由により、各商品の商品属性の情報を、EAVモデルで管理するのではなく、

MongoDBにJSON形式で保存できるようにシステムをカスタマイズしました。

このように私たちのグループでは、Magentoの仕組みを理解したうえで、さらに改良を施し1,400万商品を取り扱えるサイトをMagentoによって実現しています。

f:id:yutayamada:20220221153136p:plain
Magento標準の商品属性管理と、モノタロウの越境ECサイトの管理のイメージ

現状の課題

今回は、モノタロウの越境ECサイトをMagentoでリプレイスした経緯と、Magentoによってどのようにサイトの開発・運用が効率化されたかについて紹介しました。

これまで、Magentoを導入したことによる良い所ばかりを取り上げて説明しましたが、問題がない訳ではありません。Magentoを導入したことにより、以下のような問題もでてきています。

  • Magentoエンジニアの採用が大変。
    • Magentoは世界的に見るとシェアの高いフレームワークですが、残念ながら日本ではまだまだ普及していません。Magentoエンジニアという条件で採用募集を行っても、国内では人材を確保できない現状があります。
  • Magentoの更新頻度が早い。
    • Magentoはバージョンアップのペースが早く、3ヶ月に一度のペースで行われます。バージョンアップの度に有用な機能が追加されたりコアプログラムがリファクタリングされたりするため、出来る限りバージョンアップに追従していきたいのですが、なかなかそうもいきません。Magentoのバージョンアップ作業は非常に大変で、専用の検証環境を準備したうえで、サイトの主要な機能が全て問題なく動作することをテストする必要があります。また、社内のMagentoエンジニアがこの作業に多くの時間を取られ、他の開発案件を進めることができないという問題もおこります。こういった事情があり、現状では、セキュリティパッチがリリースされた場合や、特に利用したい機能が増えた場合に優先して対応するにとどめています。

将来展望

今後、越境ECはまだまだ事業を拡大していく余地があり、以下のような様々なチャレンジを計画しています。

  • Magento開発ベンダーの活用
    • Magentoの利点の一つは、技術力の高い開発ベンダーが世界中にあり、これらのベンダーにシステム開発を外注できる点です。Magentoのバージョンアップなど社内では負担の大きい開発案件を社外に委託することで、ユーザーへの価値提供にかける時間を増やし、開発をさらに効率化していきます。
  • PWA-Studioサービスの活用
    • Adobeから提供されているPWA-StudioというサービスとMagentoを連携させることで、PWAを実現することが可能になります。東南アジアのユーザーのUXをさらに高めるため、このサービスの導入を計画しています。
  • 現地通貨対応
    • 現在、フィリピンとタイについては既に現地通貨対応ができていますが、それ以外のサイトの通貨は全てシンガポール・ドルとなっています。現地通貨対応を進め、ユーザーの利便性を向上させていきます。

以上となります。最後に、Magentoでの開発経験がある方、オープンソース・ソフトウェアを活用した開発に興味がある方、海外事業に興味のあるエンジニアの方、ぜひ私たちと一緒に仕事をしましょう。越境ECサイトの開発責任者とのカジュアル面談へのご応募お待ちしております。


  1. Magentoの歴史: https://ja.wikipedia.org/wiki/Magento

  2. 出展: https://www.cloudways.com/blog/top-ecommerce-platforms/

  3. 出展: https://www.javatpoint.com/architecture-of-magento-2

  4. Webページに設置された画像などのコンテンツを左右にスライドさせて切り替えられるもの。

  5. 色、サイズ、重量、といった商品の性質の情報のこと。