• 2018.10.03
  • [最終更新日]2018.10.04
  • EC-cube

【EC-cube2.13】特定の商品だけCSVでダウンロードできなくなった

【EC-cube2.13】特定の商品だけCSVでダウンロードできなくなったのイメージ画像

クライアントより下記のような相談が・・

「特定のカテゴリの商品だけCSVでダウンロードできなくなった」とのこと。

今回は、EC-cube2.13系で商品CSVダウンロードができなくなった件の調査を記事にさせていただきます。

クライアントの証言:規格を変更したら・・・

今回の状況は厳密にいえば「ダウンロードはできるけど、商品の情報が取得できていない」というものです。

何かヒントにならないかとクライアントにヒアリング調査をしたところ次のことがわかりました。

範囲
特定のカテゴリ「A」と、その下層のカテゴリに属する商品だけ取得できない。
タイミング
規格「B」で設定していた商品を、規格1「B」×規格2「C」に変更したタイミングだと思われる。

テスト環境での調査

今回のクライアントにはテスト環境が構築されていました。残念なことにミラーサイトではなく、同じ条件というわけではないのですが、「公開されている本番環境はなるべく触って欲しくない」というクライアントの意向もあり、取り敢えずテスト環境での調査を始めました。

ヒアリングしたクライアントの行動を沿ってみましたが、テスト環境ではエラーが発生することはありませんでした。

(他にやれることがなくて)DBを確認

エラーが再現できないことには前に進むことができません。
もしかしたら管理画面からはわからないところで、何か起こっているのではないかと、DBの中身も確認しました。

商品IDや商品規格IDあたりに変な値が入ってるんじゃないか、とか気にしてみましたが、目立った異常は確認できませんでした。

本番環境での調査

テスト環境での再現が上手くいかなかったので、なんとかクライアントに本番環境での調査許可をもらいました。

CSVは商品を「非公開」にしても取得できるみたいなので、「非公開」データで検証することにしました。

エラーの起きない商品の複製「非公開」データと、エラーの起きる商品の複製「非公開」データを用意して、 カテゴリや規格まわりを重点的に調査しましたが、手掛かりがつかめませんでした。

結論つまり解決

結論からいうと「商品名などに機種依存文字が含まれていたから」でした。

原因となった文字は「☐」(←機種依存)でした!「□」に変更したら無事CSVで取得することができました!
まさか、「☐」だったとは・・・

実は、商品名にローマ数字が入っていたので、機種依存の可能性は早い段階で感じていたのですが、外してみても特に改善されることもなく、原因の候補から一旦外してしまっていたのです。
ホント遠回りをしてしまいました。

機種依存文字(環境依存文字)についてはこちら

原因がわかってみれば「結局そこかい!」といった感じなんですが、
手間取ってしまった理由(言い訳)としては下記です。

  1. 1.テスト環境でエラーを再現できず、調査が進まなかった。
  2. 2.システムに関わる会社が別で絡んでおり、現在の状況を把握できていなかった。
  3. 3.1回正解を通り過ぎていたw

ちなみに今回クライアントは、商品情報の編集の際にはCSVは使用しなかったようで、(CSVを使用していれば登録時にエラーが出たと思います。)気づかないうちに機種依存文字を使用してしまっていたんですね。

機種依存文字(環境依存文字)とは?

機種依存文字(環境依存文字)とは、WindowsやMacなどのOSやフォントの種類などに依存し、特定の環境上でしか正常に表示されない文字のことです。
代表的なものでいうと下記のような文字です。

丸囲みの数字 ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳
ローマ数字 ⅠⅡⅢⅣⅤⅥ Ⅶ Ⅷ Ⅸ Ⅹ

なぜCSVで取得できなかったのか

EC-cubeでは「UTF-8」という文字コードで情報を扱っているのに、CSVでは「Shift-JIS」という文字コードで情報を扱っています。
「UTF-8」では扱っていても「Shift-JIS」では扱っていない文字があるため、エラーが起こるみたいです。