この記事は「Magentoで大量の商品URL書換データを再作成するには〜その1」の続きです。前回の記事からお読みいただくことをおすすめします。

前回のまとめ

前回の内容をまとめると以下のようになります。
詳しくは「Magentoで大量の商品URL書換データを再作成するには〜その1」をお読みください。

  • MagentoにはURLを人間が読んでわかりやすいものに書き換える「URL書き換え」という機能がある
  • Magento2系では「URL書き換え」が使用するデータはインデックスではなくなった
  • インデックスではないので、Magento2では自動的に再作成されることはなくなった
  • 1件ずつであれば管理画面から作り直すことは可能

今回の内容

今回の内容は、「一括処理で失われたURL書き換えデータを再作成する」です。
失われたデータの範囲がはっきりしない場合や、対象データが多い場合は一括処理での再作成を選ばざるをえなくなりますが、その場合の方法について紹介します。

一括でURL書き換えを再作成する際の方法

一括処理を行う場合、いくつかやり方があります。代表的な方法としては以下の3つではないかと思います。

  1. Magentoのエクステンションから実行する
  2. 1件ずつのSQL文を作成し、実行する
  3. MySQLのストアドプロシージャを使う

それぞれ長所と短所があります。整理してみましょう。

  長所 短所
Magentoエクステンションから実行 難しい実装は不要(インストールすればOK)。 処理性能があまり高くない。
1件ずつのSQL実行 それなりに速い。 SQLとMagentoのデータ構造を知らないとできない。
データ作成が面倒。
ストアドプロシージャで実行 かなり速い。 SQLとMagentoのデータ構造を知らないとできない。
ストアドプロシージャ作成・実行権限が必要。

このように、Magentoのエクステンションを使う場合は処理性能はあまり高くないものの、簡単に再作成作業に取り掛かることができます。
反対に、1件ずつのSQL実行やストアドプロシージャの場合は一定レベル以上の知識と経験が必要になるため、難易度が跳ね上がります。

今回は「Magentoのエクステンションから実行する」方法について取り上げたいと思います。

Magentoのエクステンションから実行する

GithubやMarketplaceで検索すると、いくつかそれらしいエクステンションが出てきます。
すべてを試せているわけではないのですが、総じて以下のような機能が実装されています。

  • 商品管理機能やカテゴリ管理機能から実行できる
  • 一括処理でも実行できる
  • CLIからも再作成処理を実行できる

ただし、以下の処理を実行している関係上、あまり処理性能は高くありません。

  1. Magentoの処理でURL書き換えのもとになるデータを読み込む
  2. 既存のURL書き換えデータがあるかをチェックする
  3. 既存データを削除する
  4. 新しいデータを登録する

これらをPHPとSQLを併用して行うため、データ量が1万件程度までであればそれなりに使い物になります。
弊社の経験上、商品が10万件を超えるような環境の場合は使い物にならないように思います。

エクステンションの例

「Magento2 URL rewrite regenerate」というようなキーワードで検索をすると、多くのエクステンションがヒットします。
(それだけこの事態に直面する人が多いのでしょう)
その中で弊社がこれまで実際に試したのは以下の2つです。

どちらも似たような機能が実装されています。
基本的にはCLIから使うツールですが、後者のみMagentoの管理画面から商品のURL書き換えデータを再作成する機能が実装されています。

ただ、パフォーマンスはどちらも似たようなものです。対象データ量が多いと処理完了までに気の遠くなるような時間がかかります。
とはいえ、どちらのエクステンションもインストールするだけですぐ利用できます。

対象データ量が少ないときには有効な方法でしょう。