フリマ出品プロジェクト規約
概要
本規約は、Yahoo!フリマへの出品文章をAIエージェントが自律的に生成するためのルールセットです。2026年1月時点の最新プラットフォーム仕様に準拠しています。
1. METADATA
metadata:
version: "v2.1"
last_updated: "2026-01-11"
platform: "Yahoo!フリマ"
specification_reference: "2025年9月仕様変更対応版"
author: "AI Agent"
purpose: "フリマ出品文章の自律生成"
2. CRITICAL_RULES
2.1 文字数制限(2026年最新仕様)
【重要】2025年9月仕様変更:タイトル文字数制限が40文字→65文字に拡張されました。
character_limits:
title:
max_length: 65 # 2025年9月仕様変更: 40→65文字に拡張
min_length: 10
warning_threshold: 60
note: "旧仕様の40文字制限は廃止済み。必ず65文字を基準とすること"
description:
max_length: 1000
recommended_min: 200
optimal_range: [300, 800]
2.2 禁止表現リスト
prohibited_expressions:
# 取引ルール違反系
transaction_violations:
- "即購入OK"
- "即購入◯"
- "コメントなし購入OK"
- "購入前にコメント必須"
- "プロフ必読"
- "プロフィール確認必須"
- "取り置き可"
- "専用出品"
- "○○様専用"
# 誇大表現系
exaggerated_claims:
- "最安値"
- "業界最安"
- "どこよりも安い"
- "絶対"
- "100%"
- "完璧"
- "新品同様" # 実際に新品同様でない場合
# 外部誘導系
external_links:
- "LINE"
- "メルカリ"
- "ラクマ"
- "別サイト"
- "直接取引"
- "手渡し希望"
# 曖昧表現系
vague_expressions:
- "ノークレームノーリターン"
- "NC/NR"
- "3N"
- "神経質な方お断り"
- "完璧を求める方はご遠慮"
# 除外ロジック
exclusion_rule: |
生成された文章に上記の禁止表現が含まれる場合、
自動的に適切な代替表現に置換するか、当該フレーズを削除すること。
2.3 必須要素
mandatory_elements:
title:
- brand_or_category # ブランド名またはカテゴリ
- item_name # 商品名
- key_feature # 主要特徴(色、サイズ等)
description:
- item_condition # 商品状態の明記
- reason_for_sale # 出品理由(信頼性向上)
- size_or_spec # サイズ・仕様
- shipping_info # 発送に関する情報
3. INPUT_SCHEMA
input_schema:
type: object
required:
- item_name
- category
- condition
- price
properties:
item_name:
type: string
minLength: 2
maxLength: 100
description: "商品名"
brand:
type: string
nullable: true
description: "ブランド名(任意)"
category:
type: string
enum:
- "ファッション"
- "家電"
- "本・雑誌"
- "ゲーム"
- "おもちゃ"
- "スポーツ"
- "美容・健康"
- "インテリア"
- "その他"
description: "商品カテゴリ"
condition:
type: string
enum:
- "新品・未使用"
- "未使用に近い"
- "目立った傷や汚れなし"
- "やや傷や汚れあり"
- "傷や汚れあり"
- "全体的に状態が悪い"
description: "商品の状態"
price:
type: integer
minimum: 300
maximum: 9999999
description: "販売価格(円)"
color:
type: string
nullable: true
description: "色"
size:
type: string
nullable: true
description: "サイズ"
purchase_date:
type: string
format: date
nullable: true
description: "購入時期(YYYY-MM形式可)"
reason_for_sale:
type: string
nullable: true
examples:
- "サイズが合わなくなったため"
- "引っ越しに伴う整理"
- "使用機会がなくなったため"
- "買い替えのため"
description: "出品理由"
defects:
type: array
items:
type: string
default: []
description: "ダメージ・欠陥の詳細リスト"
shipping_speed:
type: string
enum:
- "24時間以内"
- "1-2日"
- "2-3日"
- "4-7日"
default: "1-2日"
description: "発送までの日数"
additional_features:
type: array
items:
type: string
default: []
description: "追加アピールポイント"
4. ALGORITHM
4.1 タイトル生成アルゴリズム
title_generation:
priority_order:
1: "{{ brand }}" # ブランド名(最優先)
2: "{{ item_name }}" # 商品名
3: "{{ color }}" # 色
4: "{{ size }}" # サイズ
5: "{{ key_feature }}" # 主要特徴
format_rules:
- separator: " " # 要素間はスペース区切り
- bracket_usage:
- "【】" # 強調したいキーワード
- "◆" # 特徴の列挙
- priority_keywords:
- "美品"
- "送料無料"
- "限定"
- "レア"
truncation_strategy: |
65文字を超える場合の優先削除順序:
1. 追加特徴(key_feature)を削除
2. サイズ情報を短縮
3. 色情報を短縮
※ブランド名と商品名は原則削除しない
4.2 説明文生成アルゴリズム
description_generation:
structure:
opening:
template: |
ご覧いただきありがとうございます。
{{ reason_for_sale }}出品いたします。
product_info:
template: |
■ 商品情報
・商品名: {{ item_name }}
{% if brand %}・ブランド: {{ brand }}{% endif %}
{% if color %}・カラー: {{ color }}{% endif %}
{% if size %}・サイズ: {{ size }}{% endif %}
condition_section:
template: |
■ 商品の状態
{{ condition }}
{% if defects %}
【ダメージ箇所】
{% for defect in defects %}
・{{ defect }}
{% endfor %}
{% endif %}
trust_elements:
template: |
■ 発送について
・{{ shipping_speed }}で発送いたします
・匿名配送対応
・丁寧に梱包してお届けします
closing:
template: |
ご不明点がございましたらお気軽にコメントください。
4.3 ハッシュタグ戦略
hashtag_strategy:
max_count: 10
# ⚠️ 【重要】出力形式の厳格な仕様(HASHTAG-FORMAT-001対応)
output_format:
separator: " " # 半角スペース区切り(必須)
terminator: "#" # 末尾に # を付加(必須)
line_break: false # 改行は一切使用しない(必須)
example: "#Shokz #骨伝導イヤホン #充電ケーブル #OpenRun #美品 #"
format_rules:
- "各ハッシュタグの間は必ず半角スペース1つで区切る"
- "最後のタグの後ろに半角スペース + # を付加する"
- "改行は一切使用しない(全タグを1行で出力)"
- "カンマ区切りは使用しない"
prohibited_formats:
- "改行区切り(1タグ1行)"
- "カンマ区切り"
- "末尾 # なし"
category_mapping:
ファッション:
- "#ファッション"
- "#メンズ" or "#レディース"
- "#{{ brand }}"
- "#おしゃれ"
家電:
- "#家電"
- "#{{ brand }}"
- "#便利グッズ"
本・雑誌:
- "#本"
- "#読書"
- "#{{ genre }}"
universal_tags:
- "#フリマ"
- "#送料無料" # 該当する場合のみ
- "#美品" # 該当する場合のみ
generation_rule: |
1. カテゴリ固有タグを優先的に選択
2. ブランド名をタグ化
3. 商品特性に応じたユニバーサルタグを追加
4. 合計10個以内に収める
5. 【必須】出力時はoutput_formatの仕様に厳格に従うこと
- 形式例: #タグ1 #タグ2 #タグ3 #
5. TEMPLATE_STRUCTURE
5.1 タイトルテンプレート(Jinja2形式)
{# タイトル生成テンプレート - 最大65文字 #}
{% set title_parts = [] %}
{% if brand %}
{% set _ = title_parts.append("【" ~ brand ~ "】") %}
{% endif %}
{% set _ = title_parts.append(item_name) %}
{% if condition == "新品・未使用" or condition == "未使用に近い" %}
{% set _ = title_parts.append("美品") %}
{% endif %}
{% if color %}
{% set _ = title_parts.append(color) %}
{% endif %}
{% if size %}
{% set _ = title_parts.append(size) %}
{% endif %}
{{ title_parts | join(" ") | truncate(65, True, "") }}
5.2 説明文テンプレート(Jinja2形式)
{# 説明文生成テンプレート - 最大1000文字 #}
ご覧いただきありがとうございます。
{% if reason_for_sale %}{{ reason_for_sale }}{% else %}整理のため{% endif %}出品いたします。
■ 商品情報
・商品名: {{ item_name }}
{% if brand %}・ブランド: {{ brand }}
{% endif %}
{% if color %}・カラー: {{ color }}
{% endif %}
{% if size %}・サイズ: {{ size }}
{% endif %}
{% if purchase_date %}・購入時期: {{ purchase_date }}
{% endif %}
■ 商品の状態
{{ condition }}
{% if defects | length > 0 %}
【ダメージ・使用感について】
{% for defect in defects %}
・{{ defect }}
{% endfor %}
{% endif %}
{% if additional_features | length > 0 %}
■ おすすめポイント
{% for feature in additional_features %}
・{{ feature }}
{% endfor %}
{% endif %}
■ 発送について
・{{ shipping_speed | default("1-2日", true) }}で発送いたします
・匿名配送対応
・丁寧に梱包してお届けします
ご不明点がございましたらお気軽にコメントください。
よろしくお願いいたします。
6. EXECUTION_FLOW
6.1 MCPツールを用いた自律実行手順
execution_flow:
description: "AIエージェントがMCPツールを使用して自律的に出品文章を生成する5ステップ"
steps:
step_1:
name: "入力データの取得と検証"
actions:
- tool: "read_file / user_input"
description: "商品情報をファイルまたはユーザー入力から取得"
- validation: |
INPUT_SCHEMA に基づき以下を検証:
- 必須フィールドの存在確認
- 型チェック(string, integer, enum等)
- 値の範囲チェック(price: 300-9999999)
error_handling: |
検証エラー時は具体的なエラー内容を返し、
修正を促すメッセージを生成
step_2:
name: "禁止表現スクリーニング"
actions:
- check: "CRITICAL_RULES.prohibited_expressions"
description: "入力データおよび生成候補に禁止表現が含まれていないか確認"
- replace_or_remove: |
禁止表現検出時の処理:
- "即購入OK" → 削除
- "プロフ必読" → 削除
- "ノークレームノーリターン" → 削除
- "新品同様" → 条件に応じて "美品" に置換
output: "クリーンな入力データ"
step_3:
name: "タイトル生成"
actions:
- apply_template: "TEMPLATE_STRUCTURE.title_template"
- apply_algorithm: "ALGORITHM.title_generation"
- validate_length: |
生成タイトルが65文字以下であることを確認
超過時は truncation_strategy に従い短縮
output: "65文字以内の最適化タイトル"
step_4:
name: "説明文生成"
actions:
- apply_template: "TEMPLATE_STRUCTURE.description_template"
- apply_algorithm: "ALGORITHM.description_generation"
- add_hashtags: "ALGORITHM.hashtag_strategy"
- validate_hashtag_format: |
⚠️ ハッシュタグ形式の必須チェック:
- 全タグが半角スペースで区切られているか
- 最後に # が付加されているか
- 改行が含まれていないか
- 正しい形式例: #タグ1 #タグ2 #タグ3 #
- validate_length: |
生成説明文が1000文字以下であることを確認
超過時は追加情報セクションから優先的に削減
output: "1000文字以内の説明文 + 正しい形式のハッシュタグ"
step_5:
name: "最終検証と出力"
actions:
- final_check:
- "禁止表現が含まれていないこと"
- "文字数制限を満たしていること"
- "必須要素が含まれていること"
- output_format:
title: "生成されたタイトル"
description: "生成された説明文"
hashtags: "ハッシュタグリスト"
validation_result: "検証結果サマリー"
tool: "write_file / display"
description: "結果をファイル出力または画面表示"
6.2 エラーハンドリング
error_handling:
validation_errors:
missing_required_field:
action: "エラーメッセージを返し、不足フィールドを明示"
example: "必須項目「condition」が入力されていません"
invalid_value:
action: "許容値を提示し、再入力を促す"
example: "conditionには以下の値を指定してください: 新品・未使用, 未使用に近い, ..."
generation_errors:
title_too_long:
action: "truncation_strategyに従い自動短縮"
log: "タイトルを65文字に短縮しました"
prohibited_word_detected:
action: "自動置換または削除"
log: "禁止表現「○○」を削除しました"
7. QUALITY_ASSURANCE
7.1 セルフチェックリスト
quality_checklist:
title:
- "65文字以内であること(必須)"
- "ブランド名または商品カテゴリが含まれていること"
- "商品名が含まれていること"
- "禁止表現が含まれていないこと"
description:
- "1000文字以内であること(必須)"
- "商品状態が明記されていること"
- "出品理由が含まれていること(信頼性向上)"
- "発送情報が含まれていること"
- "禁止表現が含まれていないこと"
- "匿名配送・迅速発送など信頼性要素が含まれていること"
hashtags: # v2.1追加: ハッシュタグ形式チェック
- "半角スペースで区切られていること(必須)"
- "最後に # が付加されていること(必須)"
- "改行が含まれていないこと(必須)"
- "形式例: #タグ1 #タグ2 #タグ3 #"
overall:
- "Jinja2変数が未解決のまま残っていないこと"
- "文法・誤字脱字がないこと"
- "購入者視点で魅力的な文章になっていること"
7.2 バリデーション結果テンプレート
validation_result_template:
format: |
## 生成結果バリデーション
### タイトル
- 文字数: {{ title_length }}/65文字 {{ "✅" if title_length <= 65 else "❌" }}
- 禁止表現チェック: {{ "✅ なし" if no_prohibited_in_title else "❌ 検出" }}
### 説明文
- 文字数: {{ desc_length }}/1000文字 {{ "✅" if desc_length <= 1000 else "❌" }}
- 禁止表現チェック: {{ "✅ なし" if no_prohibited_in_desc else "❌ 検出" }}
- 必須要素チェック: {{ "✅ 全て含む" if all_mandatory else "❌ 不足あり" }}
### ハッシュタグ(v2.1追加)
- 形式チェック(スペース区切り): {{ "✅ 正常" if space_separated else "❌ 形式エラー" }}
- 末尾 # チェック: {{ "✅ 付加済" if ends_with_hash else "❌ 未付加" }}
- 改行チェック: {{ "✅ なし" if no_linebreak else "❌ 改行あり" }}
- 形式例: #タグ1 #タグ2 #タグ3 #
### 総合判定
{{ "✅ 出品可能" if all_passed else "❌ 修正が必要" }}
8. CHANGELOG
changelog:
- version: "v2.1"
date: "2026-01-11"
incident_reference: "HASHTAG-FORMAT-001"
changes:
- "【重要】ハッシュタグ出力形式の仕様を厳格化(半角スペース区切り、末尾#付加、改行禁止)"
- "4.3 hashtag_strategyにoutput_formatセクションを追加し、具体的な形式例を明記"
- "6.1 step_4にハッシュタグ形式の必須チェックを追加"
- "7.1 quality_checklistにhashtagsセクションを新設"
- "7.2 validation_result_templateにハッシュタグ形式チェック項目を追加"
- version: "v2.0"
date: "2026-01-10"
changes:
- "タイトル文字数制限を40→65文字に更新(2025年9月仕様変更対応)"
- "変数記法をJinja2形式 {{ variable }} に統一"
- "禁止表現リストを拡充し、自動除外ロジックを追加"
- "INPUT_SCHEMAをJSON Schema形式で厳格化"
- "MCPツールによる自律実行フローを追加"
- "セールスライティング要素(出品理由、信頼性要素)を必須化"
- "QUALITY_ASSURANCEセクションを新設"
- version: "v1.0"
date: "2025-08-01"
changes:
- "初版作成"


コメント