楽天の商品登録をAIに任せたら、4回とも「良かれと思って」間違えた

#AI#EC#失敗

楽天の商品登録を自動化しようとして、AI(Claude Code)に丸一日付き合ってもらった。

動くものはできた。商品情報を渡すと、楽天の一括登録CSVと在庫連携用のファイルが自動で出てくる。手打ちしていた頃とは別世界になった。

ただしその過程で、AIは4回間違えた。しかも4回とも同じ種類の間違いだった。

同じことをやろうとしている人がいると思うので、失敗の方を書いておく。

前提として、楽天の商品一括登録に使うCSVは列が575ある。うち大半は全商品で同じ値だ。配送設定、表示設定、在庫の戻し方。商品ごとに変わるのは価格・色・サイズ・画像・説明文くらいしかなく、残りは毎回同じものを手で埋め直していた。

なのでテンプレート化した。少ない項目を書いた入力シートを渡すと、575列を自動で埋めたCSVが出てくる形にした。

ここまでは順調だった。問題はその次、在庫連携用のファイルを作るところで起きた。

失敗1:データを「直して」しまった

在庫連携のファイルには、商品ごとに色コードとサイズコードが要る。仕入先のシステムからエクスポートしたデータに入っている。

あるニットキャップのデータを見たら、こうなっていた。

色コード: -
サイズコード: blk

blk は明らかに黒だ。色なのにサイズの欄に入っている。逆だ。

AIはそう判断して、入れ替えて出力した。私もそれを見て「たしかに逆だな」と思って通した。

全滅した。4行すべてエラーになった。

マスタに存在しません

理由は単純だった。連携先のシステムは、仕入先のマスタと突き合わせて検証していた。仕入先が「色=-、サイズ=blk」で登録している以上、こちらもその通りに出さないと一致しない。

こちらの理屈で正しい形に直したことが、そのまま不一致の原因になった。

ワンサイズの商品だと、仕入先のシステムはバリエーション軸をサイズ欄に入れる仕様だったらしい。変な入れ方に見えたのは、こちらが仕様を知らなかっただけだった。

失敗2:大文字を小文字に揃えた

別の商品で、色コードがこうなっていた。

hic
WHNV

片方が小文字で、片方が大文字。統一されていない。

AIは小文字に揃えて whnv にした。見た目は綺麗になった。

これも危なかった。連携先は仕入先のマスタと突き合わせるので、大文字を小文字にした時点で別物になる可能性がある。失敗1と全く同じ構造だ。

気づいて、大文字のまま通すように直した。

失敗3:ファイル名を勝手に変えた

生成したCSVを渡すとき、AIは商品名を入れたファイル名を付けてきた。商品ごとに分かりやすいように、と。

楽天のアップロードはファイル名が決まっている。変えたら通らない。

しかもこれ、私が「なんでこの名前?」と聞かなければ気づかなかった。AI自身も「作業しやすいように付けただけです」と答えた。頼んでいない親切だった。

失敗4:数件の実例からルールを断定した

配送方法を宅急便かネコポスか自動で判定させようとした。

AIは手元の実データ数件を見て、こう結論した。

シャツは厚手なので宅急便。薄手のTシャツはネコポス。

もっともらしい。実際は違う。シャツでも薄くて安ければネコポスになるし、Tシャツでも厚ければ宅急便になるので、アイテムの種類と配送方法のあいだに対応関係そのものが存在しない。

判定に使えるのは価格だけだった。厚みは実物を知っている人にしか分からない。ルール自体が間違っていた。

しかもAIはそれを、確定したルールとしてドキュメントに書き込んでいた。私が「シャツでも薄ければネコポスになるよ」と言うまで、そのまま運用されるところだった。

4回に共通していたこと

並べると分かる。

失敗 やったこと
1 データが変に見えたので直した
2 表記が揃っていないので揃えた
3 分かりやすい名前を付けた
4 少ない例から一般法則を作った

全部、良かれと思って手を加えている。悪意も手抜きもない。むしろ気を利かせた結果だ。

だから厄介だった。サボられているなら気づく。丁寧に整えられていると、間違っていても正しく見える。

どう解決したか

気をつける、では解決しない。AIも私も忘れる。なので仕組みで止めることにした。

一番効いたのは、「もらった値はそのまま通す」を明文化したことだった。AIが毎回読む設定ファイルに、こう書いた。

外部システムから受け取った値はそのまま通す。データが想定と違っても「たぶん入力ミス」「たぶん列が逆」と推測して直さない。分からなければそのまま出して要確認に出すか、本人に聞く。

失敗した経緯もセットで書いた。理由が分からないルールは守られないからだ。

不完全なファイルは、出力そのものを止めるようにした。在庫連携のファイルは、確認事項が1件でも残っているとエラー終了する。

!! このファイルはまだアップロードできません(要確認 13 件)
!! 足りないデータを渡して作り直してください。

AIが「たぶん大丈夫です」と言って不完全なファイルを渡すことが、構造的にできなくなった。

やむを得ず値を整形したときは、必ず確認リストに出す。黙って変換されるのが一番怖いので。

必須の項目が空なら止める、というのも足した。これは4回の失敗とは別に、単純な入力漏れで全件エラーになったことがあったためだ。属性欄が1つ空だっただけで、その商品のSKUが6件まとめて落ちた。

結局どうなったか

最終的には動いた。商品情報を渡せば、楽天のCSVと在庫連携ファイルが両方出てくる。実際にアップロードして、取り込みも通った。

作業時間で言えば、丸一日かけて1商品しか登録していない。手でやった方が早かった。ただし2商品目からは数分で終わる。今日入れたチェックが全部効くので、同じエラーは出ない。

学んだのは一つだけだ。AIに任せて一番危ないのは、サボられることではなく、気を利かせられることだった。

指示していないことを、良かれと思ってやる。しかも整った形で出してくるので、パッと見では気づけない。

特に他のシステムに渡すデータは要注意だった。向こう側は元データと突き合わせて検証している。こちらで綺麗にすると、その時点で不一致になる。

対策は精神論ではなく仕組みだと思う。変換させない。迷ったら止める。加工したら報告させる。この3つを、人間が気をつけるのではなくコードが強制する側に置いたことで、ようやく同じ失敗が起きなくなった。

AIを賢く使うというより、AIの親切心を封じる方向の設計になった。地味だが、これが一番効いた。


同じことをやろうとしている人の役に立てば。うまくいった話より、こういう話の方が読む価値があると思っている。

← 記事一覧へ