大量の商品を扱うネットショップの場合、商品画像が数万件をFTPでアップしたいなんてことありませんか?さすがに画像が数万件もあると、FTPが途中でタイムアウトしてしまい、どこまでアップできたかも分からず最初からやりなおしたいけど、また途中で切れてしまうだろうから永遠にFTPが終わらないなんてことが起こります。全選択するのもメモリが枯渇して動作が重くなります。WIndowsのFFFTPやMacのCyberduckなどGUI環境のFTPで、数万件などの大量画像をアップロードするのは現実的に手作業では難しいでしょう。
こんな作業がある時、SEは自作のFTPプログラムを自作して自動アップロードします。この記事ではそんな秘伝のレシピを公開します。ECを運用するに際して、不毛な作業や手間のかかる単純作業はプログラムでできるかぎり自動化するのが鉄則です。FTPを自動化してしまえば楽天やShopify、カラーミーなどの運用が格段に楽になります。
FTPを自動化すれば画像アップロードのこんな苦労はもうしないで済む
- 商品画像が多い場合どこまで選択したか分からない
- ファイルが多すぎてどこまでアップロードできたか目視できない
- 不毛なマウス操作
- FTPの途中でタイムアウトしてしまい、やり直し
- 大量のファイルを選択してパソコンが重くなったり、最悪フリーズする
FTPの自動化の手順
FTP自動化はこんな考え方に基づいています。大量画像のアップロードには時間がかかり、途中でタイムアウトしてしまう。だから、一定数の画像をアップロードしたら意図的に切断して、もう一度接続する。これを繰り返していけば、GUIの操作が一切不要な手間をかけないFTPを実現できます。また、以下の点にも配慮します。
アップロードした画像を記録
アップロードした画像をCSVなどに記録して、同じ画像を再度アップロードするという手間を防ぎます。
FTPサーバーのLISTを取得しない
どんなコンピュータであれ、大量のデータを扱うと処理が重くなります。したがって処理が重くなるFTPサーバーのLISTの取得は敢えてしません。
以上の点に配慮したPythonのソースコードです。いまどきChatGPTに指示すればこれくらいすぐ用意してくれます。とはいえ、プログラムの知識がない人がコードをツールとして使えるように落とし込むのは難しいでしょう。
upload_img_list = [] #アップロードする画像のファイルリスト
user_name = ''
pass_word = ''
#FTP接続
ftp = FTP_TLS()
ftp.connect(host, 21) # ホストとポート(省略時は21)
ftp.login(user_name, pass_word) # ログイン
ftp.prot_p()
ftp.set_pasv(True)
done_path = 'done_list.csv' #アップロードしたファイルを記録していくcsv
# アップロード
for i,file_name in enumerate(upload_img_list):
if file_name in done_list:
continue
#winサーバーに保存された画像をread
tmp_path = os.path.join(base, images_reserve_dir, file_name)
with open(tmp_path, 'rb') as f:
ftp.storbinary(f'STOR {file_name}', f)
#アップロード済みを記録していく
with open(done_path, 'a') as f:
writer = csv.writer(f)
writer.writerow([file_name])
#とりあえず3000ファイルをアップロードしたらいったん切る
if i % 3000 == 0:
ftp.quit() #タイムアウトするのでいったん切る
time.sleep(10)
#再接続
ftp = FTP_TLS()
ftp.connect(host, 21) # ホストとポート(省略時は21)
ftp.login(user_name, pass_word) # ログイン
ftp.prot_p()
このFTP用のPythonをツールとして実際に使ってみたいという方はお問い合わせフォームよりお知らせください。
初心者がやりがちなFTPの注意点
パソコンに詳しくない人が、FTPで画像アップロードする際の注意点がいくつかありますが、その中でも特に大きな問題の2点を挙げます。
- デジカメやiPhoneなでで撮影した写真を高解像度のままアップロードしてしまう
- ファイル名を全角にしてしまう
iPhoneなでで撮影した写真を高解像度のままアップロードしてしまう
これは致命的です。重い画像をアップロードすると時間はかかるし、サーバーの容量をくうし、表示にも時間がかかります。絶対にPhotoShopなど画像加工ソフトで圧縮してからアップロードしましょう。
ファイル名を全角にしてしまう
これもNGです。FTPのアップロード先によっては不具合の原因となります。ファイル名かならず半角英数字にしましょう。
FTP自動化のメリット
例えば楽天スーパーセールの前後に商品画像に加工をして、FTPが必要な場合などがあるでしょう。そしてセールが終わったら、またそれを戻さないといけない。こんな手間のかかる運用をネットショップ運営者が手作業でしていては、いくら人手があっても足りません。プログラムで自動化してしまいましょう。ちなにみ簡単な画像の加工もプログラムで自動化できます。「半額」とか「セール中」のような表示を商品画像に追加するような場合を想定してみましょう。きまりきった画像加工なら、ファイルがどんなに多くても、プログラムで自動処理できます。
商品画像の加工やFTPなど、こういった手間のかかる業務の自動化を進めていくと、それまで手作業でやっていたのがバカみたいに感じられます。そして、ネットショップ運営の大事なことに専念できるのです。参考までに、プログラムで一括で処理できる画像加工の例を紹介しましょう。
一括処理できる画像加工の例
- 画像の一括圧縮
- 画像に一括で白背景を追加する
- 異なる画サイズの複数のファイルを調整
大量の商品画像を簡単でいいので加工したいなどの時にもPythonは有効です。ご自身の要望に応じてChatGPTにプロンプトを入力すれば、ソースコードを用意してくれます。他店も同じものを扱っている地方の小売店や、メーカーや卸先から商品を仕入れている店舗などは、こういった画像加工の自動化は必須でしょう。単純作業は可能な限り自動化して、有限な経営資源を人にしかできないことに集中しましょう。




