【コード全公開】メルカリ滞留在庫を5軸診断→タイトル修正はAIに丸投げ
Shown | AI自動化
日曜の夜、メルカリの出品一覧を上から下までスクロールする。
同じ商品がまた目に入る。
出品してから10日、いいねは3件、閲覧数は40件。売れる気配がない。
「また値下げするか」
そう思いながら、先週も同じことを考えていたのを思い出す。
これ、覚えがある人は多いはずだ。
## 僕がいま自動化で回している数字
僕は普段、AIと自作コードで会社の業務を回している人間だ。
請求書処理、日次レポート、SNS運用、監視botなんかを自分で書いたコードで動かしている。
最近作ったのは、ネットを巡回して稼げそうなネタを拾ってくるボットだった。
追加の月額課金を一切発生させずに動かすことにこだわって、契約済みのAIプランの認証だけで完結する構成にした。
初回実行でいきなりニュースサイトから56件、開発者コミュニティから30件を収集し、そこから確度70・62・60の候補を3件報告してきたときは、狙い通りに動いたことに一番驚いた。
こういう「ルールで拾って、AIで整えて、通知する」という型は、業種を選ばない。
今回はそれをメルカリの滞留在庫問題に当てはめてみる、という話だ。
## 「売れ残りループ」に見覚えはないか
- 出品してから1週間経つと、いいねの数だけ増えて閲覧数が伸びなくなる
- とりあえず100円だけ値下げして満足してしまう
- タイトルも写真も出品したときのまま、何が悪いのか分からない
- 「もう少し待てば売れるかも」と放置して、気づいたら1ヶ月経っている
- 何かを直そうにも、どこから手をつければいいか判断基準がない
このどれか1つでも刺さったなら、この先は読む価値がある。
## 解決の正体は「5軸診断」というだけの話
作るのは、価格・写真・タイトル・説明文・出品タイミングの5つの軸で滞留在庫を機械的に採点する仕組みだ。
名前をつけるなら「在庫再生5軸診断」。
完成した後の生活はシンプルになる。
出品一覧を眺めて「なんとなく直すか」と悩む代わりに、スコアの低い軸だけをAIに書き直させて、決まったサイクルで再出品するだけになる。
作り方はまだ見せない。ここから先が本題だ。
## この記事で手に入るもの
- 5軸診断のスコアリングロジック(コピペで動くPythonコード)
- ChatGPT/Claude用のタイトル・説明文リライトプロンプト全文
- 再出品サイクルの型(何日目に何をするかの一覧表)
- 詰まりやすいポイントと回避策
- そのまま使える再現チェックリスト
## 先に言っておきたいこと
対象になるのは、メルカリで副業・せどりをしていて、出品から1週間以上動かない商品が常に数点ある人だ。
対象外なのは、出品数がまだ数点しかない人と、すでに独自の在庫管理システムを持っている人。
正直に書くと、これは出品を自動操作したり売上を保証したりするツールじゃない。
メルカリには個人が使える公式APIが無いので、相場データや在庫情報を自動で取得することもできない。
やることは「自分で持っているデータを診断して、直す作業をAIに手伝わせる」という地味な仕組みだ。
過大な期待をして買うと損をするので、先に書いておく。
## 価格について
外注でタイトル・説明文のリライトを頼めば1商品あたり数百円〜が相場になる。せどりで在庫が10点20点あれば、それだけで軽く数千円は飛ぶ。
この記事は980円で、診断ロジックとプロンプト全文を丸ごと持ち帰れる。
部数が増えたら値上げする予定なので、迷っているなら今のうちに読んでおいたほうがいい。
## この記事で手に入るもの(有料部分)
難易度: ★☆☆(初級。Pythonが動く環境があれば十分)
- 5軸診断スコアリングスクリプト(コピペで実行可能)
- タイトル・説明文リライト用プロンプト全文
- 再出品サイクルの運用ルール表
- 詰まりポイントの回避策
- 再現チェックリスト10項目
## 全体構成:使うツールと流れ
```
[メルカリアプリの出品一覧]
│ 手作業でCSVに書き出す(商品名/経過日数/価格/閲覧数/いいね数/写真枚数/説明文文字数)
▼
[診断スクリプト(Python)] ← 5軸でスコアリング
│ 弱い軸を特定
▼
[ChatGPT/Claudeにプロンプトを投げる] ← タイトル・説明文の書き直し案をもらう
│
▼
[人間が最終チェックして再出品]
```
月額コストの目安(試算)は以下の通り。
| ツール | 用途 | 月額目安(試算) |
|---|---|---|
| スプレッドシートまたはCSV | 出品データの手入力 | 無料 |
| Python(ローカル実行) | 診断スクリプト | 無料 |
| ChatGPT/Claude API | タイトル・説明文リライト | 数百円程度(試算・使用量による。2026年7月時点の正確な料金は各社公式ページで要確認) |
自動でメルカリからデータを吸い上げる仕組みは組み込んでいない。公式APIが個人に開放されていないからだ。
そのぶん、規約に触れる心配をせずに使える構成になっている。
## 実装ステップ
### ステップ1: 出品データをCSVに書き出す
このステップで、診断に必要な材料が揃う。
出品一覧を見ながら、以下の列を持つCSVを作る。列名は英語にしておくと後工程が楽になる。
```csv
item_name,days_listed,price,market_price,views,likes,photos,desc_length
折りたたみ傘 未使用,10,1200,1500,42,3,3,80
ワイヤレスイヤホン,21,3500,3200,120,15,5,220
```
`market_price`(相場価格)は、同カテゴリの「売り切れ」表示がついている商品を5件ほど手で見て、中央値をざっくり入れる。ここは自動化できない部分だ。
実際、最初にこのCSVを作ったとき、全角半角が混ざったせいで価格列が文字列として読み込まれてハマった。数値列は必ずカンマ区切りの半角で統一しておいたほうがいい。
### ステップ2: 5軸診断スクリプトを動かす
このステップで、各商品がどの軸で弱いか数値で分かるようになる。
```python
import csv
def score_price(price, market_price):
ratio = price / market_price
if ratio > 1.1:
return 0
elif ratio > 0.95:
return 1
return 2
def score_photos(photos):
if photos >= 4:
return 2
elif photos >= 2:
return 1
return 0
def score_desc(desc_length):
if desc_length >= 150:
return 2
elif desc_length >= 50:
return 1
return 0
def score_engagement(views, likes, days_listed):
if views == 0:
return 0
rate = likes / views
if rate >= 0.15:
return 2
elif rate >= 0.05:
return 1
return 0
def score_timing(days_listed):
if days_listed >= 14:
return 0
elif days_listed >= 7:
return 1
return 2
def diagnose(row):
scores = {
"price": score_price(float(row["price"]), float(row["market_price"])),
"photos": score_photos(int(row["photos"])),
"desc": score_desc(int(row["desc_length"])),
"engagement": score_engagement(int(row["views"]), int(row["likes"]), int(row["days_listed"])),
"timing": score_timing(int(row["days_listed"])),
}
total = sum(scores.values())
weak_axes = [k for k, v in scores.items() if v == 0]
return total, weak_axes
with open("listings.csv", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
total, weak = diagnose(row)
print(f"{row['item_name']}: スコア{total}/10, 弱い軸={weak}")
```
実行結果はこんな感じになる。
```
折りたたみ傘 未使用: スコア6/10, 弱い軸=['engagement']
ワイヤレスイヤホン: スコア5/10, 弱い軸=['timing', 'photos']
```
### ステップ3: 弱い軸をAIに書き直させる
このステップで、直すべき箇所だけをピンポイントでAIに投げられるようになる。
タイトルか説明文が弱いと出た場合、以下のプロンプトをそのままChatGPTかClaudeに貼る。
```
あなたはメルカリ出品のプロです。
以下の商品情報をもとに、検索されやすく購入されやすいタイトルと説明文を3案ずつ作ってください。
商品名: {item_name}
現在のタイトル: {current_title}
現在の説明文: {current_desc}
価格: {price}円
カテゴリ: {category}
経過日数: {days_listed}日
条件:
- タイトルは全角40文字以内
- 説明文には状態・付属品・発送方法を必ず含める
- 誇大表現や虚偽の記載はしない
- メルカリの規約に反する絵文字の乱用はしない
```
生成された案をそのまま貼らず、自分の目で事実と違う部分がないか確認してから使う。ここは省略できない一手間だ。
### ステップ4: 再出品サイクルを回す
このステップで、いつ何をするかを毎回考えずに済むようになる。
| 経過日数 | やること |
|---|---|
| 3日目 | 反応がなければ写真を1枚差し替え |
| 7日目 | 価格を相場と比較して見直し |
| 14日目 | タイトル・説明文を全面書き直し |
| 21日目 | 一旦削除して再出品(せどり界隈でよく言われる、出品を新しくすると露出が変わるという経験則にもとづく) |
これはメルカリの公式アルゴリズムを確認したものではなく、あくまでせどり実践者の間で語られている運用の型として書いている。
## どこで詰まりやすいのか?
相場価格をどう決めるかで詰まる
自動で相場を取ってくる仕組みが無いので、最初は「これ、毎回手で調べるの面倒じゃないか」と感じるはずだ。
回避策は、カテゴリごとに5件だけ売り切れ商品を見て中央値を取る、というルールに固定してしまうこと。厳密さを求めず、判断の起点があるだけで十分に効く。
CSVの文字コードで詰まる
Excelで保存したCSVがShift-JISになっていて、Pythonの`encoding="utf-8"`で読めずにエラーになることがある。
これは`encoding="cp932"`に変えるか、保存時に「CSV UTF-8」形式を選ぶことで解決できる。地味だが最初につまずきやすいポイントだ。
## コピペ素材集
### 5軸診断チェックリスト(手動版)
```
■価格軸
□ 同カテゴリの売り切れ相場と比べて1割以上高くないか
□ 直近の値下げから7日以上経っていないか
□ 送料込み表示にしているか
■写真軸
□ 写真が4枚以上あるか
□ 1枚目が商品全体の状態がひと目でわかる構図か
□ 傷や汚れがある場合、正直に写しているか
■タイトル軸
□ 商品名・ブランド名・型番が入っているか
□ 全角40文字前後で検索されやすいキーワードが入っているか
□ 絵文字や記号を乱用していないか
■説明文軸
□ 状態・付属品・発送方法が明記されているか
□ 150文字以上の説明があるか
□ 購入を迷う理由への回答(サイズ感・使用回数など)があるか
■出品タイミング軸
□ 出品してから7日以上経っていないか
□ 直近で写真かタイトルを更新したか
□ 再出品サイクルの表に沿って動けているか
```
### config設定例(スクリプトのしきい値をまとめておく)
```yaml
thresholds:
price_ratio_high: 1.1
price_ratio_ok: 0.95
photos_good: 4
photos_ok: 2
desc_length_good: 150
desc_length_ok: 50
engagement_good: 0.15
engagement_ok: 0.05
days_listed_warning: 7
days_listed_critical: 14
```
## 応用:自分の状況に合わせる3つの方向
- ラクマやPayPayフリマなど別プラットフォームに使う場合、CSVの列とプロンプトのカテゴリ名だけ差し替えれば流用できる
- アパレル・家電・コレクティブルなどジャンルごとに軸の重みを変えたい場合、`config.yaml`のしきい値を調整すればいい
- 出品数が多い人は、診断結果をCSVに吐き出して「動かない在庫ランキング」として横断的に眺める使い方もできる
## 今日からのアクション3つ
1. 出品一覧から経過7日以上の商品を3つ選んで、チェックリストで手診断してみる
2. 一番古い1商品だけ、リライトプロンプトでタイトルを書き直して出品し直す
3. 再出品サイクルの表をメモアプリに貼って、次に動く日を決めておく
## 再現チェックリスト
- [ ] CSVに8列(商品名/経過日数/価格/相場価格/閲覧数/いいね数/写真枚数/説明文文字数)を用意した
- [ ] 相場価格を同カテゴリの売り切れ商品5件から手で調べた
- [ ] CSVの文字コードをUTF-8で保存した
- [ ] 診断スクリプトを自分の環境で実行できた
- [ ] スコアが低い軸を1つ以上特定できた
- [ ] リライトプロンプトをChatGPTかClaudeに貼って案を出した
- [ ] 生成されたタイトル・説明文を自分の目で事実確認した
- [ ] 再出品サイクルの表を自分の出品数に合わせて調整した
- [ ] config.yamlのしきい値を自分のジャンルに合わせて変えた
- [ ] 1商品でも実際に再出品まで完了させた
このチェックリストを実際に試して感想をレビューに書いてくれた人には、応用編(ジャンル別しきい値プリセット集)を後日追加で共有する予定にしている。
同じ仕組みを自分の業務に組み込みたい場合は、プロフィール欄から相談できます。
## 用語集
- 滞留在庫: 出品してから一定期間売れずに残っている商品のこと
- CSV: 表データをカンマ区切りのテキストで保存するファイル形式
- API: 別のソフトウェアが機能を呼び出せるように公開された窓口のこと
- しきい値: 判定の基準を切り替える境目になる数値
- 相場価格: 同じ商品カテゴリで実際に売れた価格帯の目安
- せどり: 安く仕入れて高く売る転売系の副業のこと
- 文字エンコーディング: 文字をコンピュータが扱うためのデータ形式の規格
- エンゲージメント率: 閲覧数に対していいねがついた割合
