下書き 下書きの資料です。内容が変わることがあるため、検索エンジンには登録せず、ページ一覧(サイトマップ)にも載せません。内容はこのページでそのまま読めます。

商品検索・絞り込みの期待結果検証の実装資料

同じ条件で比べる。Shopify内の商品検索を対象に、架空の20商品と検索語ごとの期待結果を固定し、標準機能と追加機能を同じ検索語と同じ商品データで照合できるようにする。

下書きの資料です。架空データで作った例で、実店舗では未検証です。順位や売上の改善は保証しません。読むのに登録や問い合わせは要りません。

目次

要件

対象は、Shopifyの店の中にある商品だけにする。ブランド、シリーズ、型番、別名、状態の項目を持つ架空の商品で、検索語ごとに「何が出てほしいか」を先に決めて固定する。

できあがるもの
  • 商品の項目の決め方:ブランド、シリーズ、型番、別名、状態(登録項目名はbrand、series、reference、aliases、condition)
  • 検索語と、出てほしい結果の対応表
  • 変更したファイルの一覧と差分
  • 受け入れテストの実行結果
  • 導入手順と戻し方
先に確かめること
  • 対象の店の標準の検索と絞り込みの設定を先に確認する
  • 検索アプリを使う場合は、同じ検索語と同じ商品データで比べる
  • 架空の商品20件(synthetic)で手元の確認を先に済ませる
やらないこと・触らない範囲
  • 外部モールの在庫や相場エンジンを複製しない
  • 正式名称、別名、型番を別の項目として持つ
  • 絞り込みの組み合わせをANDとORのどちらで扱うかを仕様に書く
  • 標準検索の限界を実測なしに断定しない
どの資料でも約束しないこと
  • SEOの順位、AIによる引用、売上の改善は保証しない。
  • Timeseekの本番ストアへの接続や書き込みは含まない。
  • 紹介リンクを使うことを条件にしない。資料を読むにも使うにも、登録や紹介リンクは要らない。

進め方別の手順

進め方は4つあります。違うのは手順だけで、要件、受け入れテスト、戻し方は共通です。

最初は「Claude Codeで作る」の手順を開いています。記事で進め方を選んでいれば、その進め方の手順が開きます。ほかの進め方は見出しを押すと開きます。

社内・既存の開発先で作る

商品属性、検索語、期待結果の仕様をそのまま渡せる。
  1. 「要件」の目的と境界を依頼書に写し、検索対象の項目と絞り込みの組み合わせ方を先に合意する。
  2. 検索語と期待結果の対応表を納品物に含める。型番REF-003と別名R003のように、正式名称以外の入力も対象にする。
  3. 0件のときの表示と、絞り込みを解除して全件に戻る動きを仕様に書く。
  4. 受け入れテストの4項目を完了条件にし、同じ商品データでの実行ログを求める。
  5. 本番反映は、検証環境での照合と切り戻し手順の共有が済んでから承認する。

Claude Codeで作る

検索テスト付きの実装指示。紹介リンクや契約は要らない。
  1. 店舗のテーマを置いた作業フォルダでClaude Codeを開き、下の指示文を渡す。CLAUDE.mdと検索・絞り込みに関わるテーマファイルを読ませ、既存の未コミット変更は残す。
  2. 監査として、商品の正式名称、型番、別名がどの項目に入っているかを調べ、検索対象になっている項目とそうでない項目を書き出す。
  3. 最小変更にとどめる。型番と別名を検索対象の項目に加え、絞り込みの組み合わせ方をANDかORの一つに決めて実装する。
  4. 架空データの20商品を検証環境に入れ、受け入れテストの検索語ごとに結果を照合する。0件になる条件も含める。
  5. 差分を確認する。変更ファイルの一覧を作り、本番の商品データを書き換えていないことを確かめる。
  6. 進捗を更新する。変更一覧、実行したテスト、未検証の検索語、戻し方を報告に書く。

アプリ・サービスを入れる

標準の検索で足りるなら導入しない。不足があると確認できた場合だけ比べる。
  1. 先に標準の検索と絞り込みで足りるかを確認する。型番や別名を商品情報に含めるだけで見つかるなら、追加のアプリは要らない。
  2. 検索アプリを比べるときは、同じ検索語と同じ20商品で結果を並べ、差が出た検索語だけを記録する。
  3. 確認する点は、別名の扱い、絞り込みの組み合わせ方、0件時の表示、テーマからの取り外しやすさの4つ。
  4. 料金と契約条件は提供会社の公式ページで確認し、この資料には書かない。契約済みのサービスがあればそれを優先する。
  5. 導入後も受け入れテストの検索語で結果を照合する。

候補に挙がるサービスは公式サイトで料金と条件を確かめます。標準機能で足りるなら入れません。

Boost AI Search & Discoveryの公式サイトで料金と条件を確認する

確認する項目

適合
未確認
料金
未確認
解約条件
未確認
日本語サポート
未確認

運営者(Timeseek)に相談する(任意)

商品属性の整理と検索の実装を、範囲を区切って依頼できる。
  1. 相談フォームに、店舗の状態、商品の種類、見つからない検索語の例を引き継ぐ。顧客データや在庫の原票は送らない。
  2. 依頼範囲を決める。属性の整理、期待結果表の作成、検索の実装、テスト実施のどこまでを頼むかを分ける。
  3. 納品物と完了条件はこの資料の納品物と受け入れテストを基準にし、見積もりの前提として共有する。
  4. 本番反映と切り戻しの承認は店舗側で行う。

Claude Codeへの指示

下の文章を、店のテーマファイルを置いたフォルダで開いたClaude Codeに、そのまま貼り付けます。渡す資料はこれだけです。中身は次の5点です。

  • 目的と、守る範囲(上の要件と同じ内容)
  • 進め方の手順(「Claude Codeで作る」の6段階)
  • 受け入れテスト4件と、未実行・実環境待ちの記録ルール
  • 確認に使う架空データと、戻し方
  • 最後に変更一覧、実行したテスト、未検証の条件、戻し方を報告させる指示

# Claude Code実装指示:B5 商品検索・絞り込みの期待結果検証

この指示文だけで完結する。別に渡す資料はない。要件の境界を守ったまま、既存のコードへ最小の変更で次の実装を加える。
対象は、Shopifyの店の中にある商品だけにする。ブランド、シリーズ、型番、別名、状態の項目を持つ架空の商品で、検索語ごとに「何が出てほしいか」を先に決めて固定する。

先に既存コード、変更対象、認証経路を確認する。既存の変更は消さない。推測で埋めない。テストはローカルか検証環境で先に作り、実装が済んだら受け入れテストを実行して、結果を実行条件とログつきで残す。

## 進め方
1. 店舗のテーマを置いた作業フォルダでClaude Codeを開き、下の指示文を渡す。CLAUDE.mdと検索・絞り込みに関わるテーマファイルを読ませ、既存の未コミット変更は残す。
2. 監査として、商品の正式名称、型番、別名がどの項目に入っているかを調べ、検索対象になっている項目とそうでない項目を書き出す。
3. 最小変更にとどめる。型番と別名を検索対象の項目に加え、絞り込みの組み合わせ方をANDかORの一つに決めて実装する。
4. 架空データの20商品を検証環境に入れ、受け入れテストの検索語ごとに結果を照合する。0件になる条件も含める。
5. 差分を確認する。変更ファイルの一覧を作り、本番の商品データを書き換えていないことを確かめる。
6. 進捗を更新する。変更一覧、実行したテスト、未検証の検索語、戻し方を報告に書く。

## 守ること(対象外・境界)
- 外部モールの在庫や相場エンジンを複製しない
- 正式名称、別名、型番を別の項目として持つ
- 絞り込みの組み合わせをANDとORのどちらで扱うかを仕様に書く
- 標準検索の限界を実測なしに断定しない

## 納品物
- 商品の項目の決め方:ブランド、シリーズ、型番、別名、状態(登録項目名はbrand、series、reference、aliases、condition)
- 検索語と、出てほしい結果の対応表
- 変更したファイルの一覧と差分
- 受け入れテストの実行結果
- 導入手順と戻し方

## 前提
- 対象の店の標準の検索と絞り込みの設定を先に確認する
- 検索アプリを使う場合は、同じ検索語と同じ商品データで比べる
- 架空の商品20件(synthetic)で手元の確認を先に済ませる

## 受け入れテスト
1. B5-AT1 検索語「REF-003」でDEMO-003だけが一致する。(実行状態: 未実行/必要な環境: 検証用の店舗に架空の商品20件を入れた状態)
2. B5-AT2 別名「R003」で正式型番と同じ商品が出る。出ない場合は、別名が未対応であることを仕様に書く。(実行状態: 未実行/必要な環境: 検証用の店舗に架空の商品20件を入れた状態)
3. B5-AT3 ブランド「Demo A」とシリーズ「S2」で5件、状態「new」を加えると1件(DEMO-015)、該当のない組み合わせでは0件の案内が出る。(実行状態: 未実行/必要な環境: 検証用の店舗に架空の商品20件を入れた状態)
4. B5-AT4 絞り込みを解除すると20件すべてに戻る。(実行状態: 未実行/必要な環境: 検証用の店舗に架空の商品20件を入れた状態)

未実行の項目は「未実行」、実環境が要る項目は「実環境待ち」と記録し、実行条件とログを残す。記録上の区分はnot_runとblocked_external。

## 架空データ
実店舗のデータではない。下のJSONをそのまま検証用のデータにする。
```json
{
  "data_kind": "synthetic",
  "contains_real_customer_data": false,
  "note": "架空の商品20件と、検索語・絞り込みごとの期待結果。",
  "filter_logic": "AND",
  "queries": [
    {
      "id": "Q1",
      "query": "REF-003",
      "filters": {},
      "expected_ids": [
        "DEMO-003"
      ]
    },
    {
      "id": "Q2",
      "query": "R003",
      "filters": {},
      "expected_ids": [
        "DEMO-003"
      ],
      "note": "別名一致。標準検索で対応できるかは未確認"
    },
    {
      "id": "Q3",
      "query": "",
      "filters": {
        "brand": "Demo A",
        "series": "S2"
      },
      "expected_ids": [
        "DEMO-011",
        "DEMO-013",
        "DEMO-015",
        "DEMO-017",
        "DEMO-019"
      ]
    },
    {
      "id": "Q4",
      "query": "",
      "filters": {
        "brand": "Demo A",
        "series": "S2",
        "condition": "new"
      },
      "expected_ids": [
        "DEMO-015"
      ]
    },
    {
      "id": "Q5",
      "query": "",
      "filters": {
        "brand": "Demo C"
      },
      "expected_ids": []
    },
    {
      "id": "Q6",
      "query": "",
      "filters": {},
      "expected_count": 20
    }
  ],
  "items": [
    {
      "id": "DEMO-001",
      "brand": "Demo A",
      "series": "S1",
      "reference": "REF-001",
      "aliases": [
        "R001"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-002",
      "brand": "Demo B",
      "series": "S1",
      "reference": "REF-002",
      "aliases": [
        "R002"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-003",
      "brand": "Demo A",
      "series": "S1",
      "reference": "REF-003",
      "aliases": [
        "R003"
      ],
      "condition": "new"
    },
    {
      "id": "DEMO-004",
      "brand": "Demo B",
      "series": "S1",
      "reference": "REF-004",
      "aliases": [
        "R004"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-005",
      "brand": "Demo A",
      "series": "S1",
      "reference": "REF-005",
      "aliases": [
        "R005"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-006",
      "brand": "Demo B",
      "series": "S1",
      "reference": "REF-006",
      "aliases": [
        "R006"
      ],
      "condition": "new"
    },
    {
      "id": "DEMO-007",
      "brand": "Demo A",
      "series": "S1",
      "reference": "REF-007",
      "aliases": [
        "R007"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-008",
      "brand": "Demo B",
      "series": "S1",
      "reference": "REF-008",
      "aliases": [
        "R008"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-009",
      "brand": "Demo A",
      "series": "S1",
      "reference": "REF-009",
      "aliases": [
        "R009"
      ],
      "condition": "new"
    },
    {
      "id": "DEMO-010",
      "brand": "Demo B",
      "series": "S1",
      "reference": "REF-010",
      "aliases": [
        "R010"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-011",
      "brand": "Demo A",
      "series": "S2",
      "reference": "REF-011",
      "aliases": [
        "R011"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-012",
      "brand": "Demo B",
      "series": "S2",
      "reference": "REF-012",
      "aliases": [
        "R012"
      ],
      "condition": "new"
    },
    {
      "id": "DEMO-013",
      "brand": "Demo A",
      "series": "S2",
      "reference": "REF-013",
      "aliases": [
        "R013"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-014",
      "brand": "Demo B",
      "series": "S2",
      "reference": "REF-014",
      "aliases": [
        "R014"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-015",
      "brand": "Demo A",
      "series": "S2",
      "reference": "REF-015",
      "aliases": [
        "R015"
      ],
      "condition": "new"
    },
    {
      "id": "DEMO-016",
      "brand": "Demo B",
      "series": "S2",
      "reference": "REF-016",
      "aliases": [
        "R016"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-017",
      "brand": "Demo A",
      "series": "S2",
      "reference": "REF-017",
      "aliases": [
        "R017"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-018",
      "brand": "Demo B",
      "series": "S2",
      "reference": "REF-018",
      "aliases": [
        "R018"
      ],
      "condition": "new"
    },
    {
      "id": "DEMO-019",
      "brand": "Demo A",
      "series": "S2",
      "reference": "REF-019",
      "aliases": [
        "R019"
      ],
      "condition": "used"
    },
    {
      "id": "DEMO-020",
      "brand": "Demo B",
      "series": "S2",
      "reference": "REF-020",
      "aliases": [
        "R020"
      ],
      "condition": "used"
    }
  ]
}
```

## 戻し方
- 変更前に検索設定、テーマファイル、商品属性の変更範囲を記録する。
- コードは対象の差分だけを元に戻す。検索アプリを外した後に標準検索が動くことを確認する。
- 商品属性を書き換えた場合は、バックアップから戻し、件数と型番の一致を確認する。
- 本番の切り戻しを自動で実行しない。対象環境と影響を示して承認を得る。

## 資料全体の対象外
- SEOの順位、AIによる引用、売上の改善は保証しない。
- Timeseekの本番ストアへの接続や書き込みは含まない。
- 紹介リンクを使うことを条件にしない。資料を読むにも使うにも、登録や紹介リンクは要らない。

紹介先のツールを使う義務はない。契約済みなら新規契約を促さない。外部サービスへの接続、課金、本番反映、顧客データの送信は、店舗側の承認を得てからにする。

最後に、変更一覧、実行したテスト、未検証の条件、戻し方を提示する。「動くはず」は結果にしない。

Claude Codeを使う義務はありません。同じ要件とテストを社内や既存の開発先に渡しても、結果は同じ基準で確かめます。契約済みなら新しい契約は要りません。

受け入れテスト

実装が終わったら、この表の順に確かめます。どの進め方でも同じ4件です。

受け入れテストの一覧。「実行状態」は記録上の区分で、合否ではありません。未実行はまだ誰も実行していないこと、実環境待ちは店舗の実環境や契約がないと実行できないことを表します。
ID確認すること実行状態必要な環境
B5-AT1 検索語「REF-003」でDEMO-003だけが一致する。 未実行 検証用の店舗に架空の商品20件を入れた状態
B5-AT2 別名「R003」で正式型番と同じ商品が出る。出ない場合は、別名が未対応であることを仕様に書く。 未実行 検証用の店舗に架空の商品20件を入れた状態
B5-AT3 ブランド「Demo A」とシリーズ「S2」で5件、状態「new」を加えると1件(DEMO-015)、該当のない組み合わせでは0件の案内が出る。 未実行 検証用の店舗に架空の商品20件を入れた状態
B5-AT4 絞り込みを解除すると20件すべてに戻る。 未実行 検証用の店舗に架空の商品20件を入れた状態

戻し方

うまくいかなかったときに、変更前の状態へ戻す手順です。実装の前に読み、本番へ反映する前にもう一度確かめます。

  1. 変更前に検索設定、テーマファイル、商品属性の変更範囲を記録する。
  2. コードは対象の差分だけを元に戻す。検索アプリを外した後に標準検索が動くことを確認する。
  3. 商品属性を書き換えた場合は、バックアップから戻し、件数と型番の一致を確認する。
  4. 本番の切り戻しを自動で実行しない。対象環境と影響を示して承認を得る。

架空データ

確認のために作った例で、実店舗のデータではありません。Timeseekの商品、価格、顧客の情報も含みません。

注記
架空の商品20件と、検索語・絞り込みごとの期待結果。
filter_logic(登録項目名)
AND
架空データの例(queries、6件)。列名は登録項目名のままです。(空)は値が入っていないことを表します。
idqueryfiltersexpected_idsnoteexpected_count
Q1REF-003(空)DEMO-003(空)(空)
Q2R003(空)DEMO-003別名一致。標準検索で対応できるかは未確認(空)
Q3(空)brand: Demo A、series: S2DEMO-011、DEMO-013、DEMO-015、DEMO-017、DEMO-019(空)(空)
Q4(空)brand: Demo A、series: S2、condition: newDEMO-015(空)(空)
Q5(空)brand: Demo C(空)(空)(空)
Q6(空)(空)(空)(空)20
架空データの例(items、20件)。列名は登録項目名のままです。(空)は値が入っていないことを表します。
idbrandseriesreferencealiasescondition
DEMO-001Demo AS1REF-001R001used
DEMO-002Demo BS1REF-002R002used
DEMO-003Demo AS1REF-003R003new
DEMO-004Demo BS1REF-004R004used
DEMO-005Demo AS1REF-005R005used
DEMO-006Demo BS1REF-006R006new
DEMO-007Demo AS1REF-007R007used
DEMO-008Demo BS1REF-008R008used
DEMO-009Demo AS1REF-009R009new
DEMO-010Demo BS1REF-010R010used
DEMO-011Demo AS2REF-011R011used
DEMO-012Demo BS2REF-012R012new
DEMO-013Demo AS2REF-013R013used
DEMO-014Demo BS2REF-014R014used
DEMO-015Demo AS2REF-015R015new
DEMO-016Demo BS2REF-016R016used
DEMO-017Demo AS2REF-017R017used
DEMO-018Demo BS2REF-018R018new
DEMO-019Demo AS2REF-019R019used
DEMO-020Demo BS2REF-020R020used

出典

版 0.1.0。架空データで作ったサンプルで、実店舗では未検証。

記事と資料は、相談しなくてもそのまま使えます。依頼は当面受け付けていません。この内容で相談する(任意)