Andyノート
最終更新: 2026年4月15日 完成

特許技術ディープダイブ — 横串検索システム(特許第6461047号)

#jienielab#product#patent#yokogushi#catalog-search#technical#architecture#cxml#punchout

特許技術ディープダイブ — 横串検索システム(特許第6461047号)

目的: 横串検索の技術的な仕組みを深く理解する。 [[05-patent-yokogushi-search]] は「ビジネス視点」で書かれた概要。 この資料は「エンジニア視点」で書かれた技術解説。 Fit & Gapでの技術質問、IT部門への説明、開発チームとの会話に使う。


1. 特許の基本情報

項目詳細
特許番号特許第6461047号
名称電子カタログの検索システム
出願人ジーニーラボ株式会社(旧イービズラボラトリーズ株式会社)
登録日2019年1月11日
技術分野電子商取引、購買管理システム、カタログ横断検索
前身製品カタログモール(2016年リリース)
現行製品ジーニー2.0(2020年リリース)

2. 解決する技術的課題

2.1 従来技術の問題点

┌─────────────────────────────────────────────────────────────┐
│  従来の購買システムにおけるカタログ検索の3つのアプローチ         │
│                                                              │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ アプローチ1: CIFカタログ(静的カタログ)               │    │
│  │                                                      │    │
│  │  サプライヤー → CSVファイル → 購買システムにインポート   │    │
│  │                                                      │    │
│  │  問題点:                                              │    │
│  │  ❌ 価格・在庫情報が古い(月次/四半期更新)             │    │
│  │  ❌ 商品数が限定的(全商品をCSV化できない)             │    │
│  │  ❌ 更新のたびにインポート作業が必要                    │    │
│  │  ❌ リアルタイム性がゼロ                               │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                              │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ アプローチ2: 単独パンチアウト(Level 1 PunchOut)      │    │
│  │                                                      │    │
│  │  購買システム → サプライヤーサイトへ遷移 → 商品選択     │    │
│  │  → カート情報を購買システムに戻す                       │    │
│  │                                                      │    │
│  │  問題点:                                              │    │
│  │  ❌ 1サイトずつしか検索できない(横断不可)             │    │
│  │  ❌ 画面遷移が発生(UXが悪い)                         │    │
│  │  ❌ 比較するには複数サイトを順番に訪問                  │    │
│  │  ❌ サプライヤーごとにUIが異なる                        │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                              │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ アプローチ3: Level 2 PunchOut(ハイブリッド)          │    │
│  │                                                      │    │
│  │  CIF + パンチアウトの組み合わせ                        │    │
│  │  購買システム上で検索 → 詳細はサプライヤーサイトへ      │    │
│  │                                                      │    │
│  │  問題点:                                              │    │
│  │  ❌ リアルタイムの価格・在庫が検索時に表示されない      │    │
│  │  ❌ 交渉済み価格の反映が困難                           │    │
│  │  ❌ 真の横断検索ではない                               │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                              │
│  ★ 特許第6461047号 = これらすべての問題を解決する第4の方法    │
└─────────────────────────────────────────────────────────────┘

2.2 特許が解決する具体的課題

課題従来特許技術
リアルタイム性CIFは静的。パンチアウトは1サイトずつ全カタログにリアルタイムで同時問い合わせ
横断検索不可能 or 擬似的1回のクエリで全カタログを横断
統一UIサイトごとにバラバラ購買システムの統一UI上に結果表示
価格比較手作業(Excel等)自動で価格順ソート・一覧表示
レスポンス順次アクセス → 遅い並列非同期 → 高速
カタログメンテナンス購買側が管理サプライヤー側が管理(工数ゼロ)

3. システムアーキテクチャ

3.1 全体構成

┌─────────────────────────────────────────────────────────────────┐
│                                                                  │
│                    ┌──────────────────┐                          │
│                    │   ユーザー(ブラウザ)│                         │
│                    │  検索クエリ入力    │                          │
│                    └────────┬─────────┘                          │
│                             │ HTTPS                              │
│                             ▼                                    │
│          ┌─────────────────────────────────────┐                 │
│          │         ジーニー2.0 サーバー          │                 │
│          │                                      │                │
│          │  ┌────────────────────────────┐      │                │
│          │  │   横串検索エンジン(特許)    │      │                │
│          │  │                             │      │                │
│          │  │  ① クエリパーサー            │      │                │
│          │  │  ② ルーティングエンジン       │      │                │
│          │  │  ③ 並列リクエストディスパッチャ │      │                │
│          │  │  ④ レスポンスアグリゲーター    │      │                │
│          │  │  ⑤ ソート&フィルタリング     │      │                │
│          │  │  ⑥ キャッシュマネージャー      │      │                │
│          │  └────────────────────────────┘      │                │
│          │                                      │                │
│          │  ┌──────────┐  ┌──────────────┐     │                │
│          │  │内部カタログ │  │カテゴリマッピング│     │                │
│          │  │  DB       │  │  辞書DB       │     │                │
│          │  └──────────┘  └──────────────┘     │                │
│          └──┬──────┬──────┬──────┬──────┬──┘                 │
│             │      │      │      │      │                        │
│    ┌────────┘      │      │      │      └────────┐              │
│    ▼               ▼      ▼      ▼               ▼              │
│ ┌──────┐    ┌──────┐ ┌──────┐ ┌──────┐    ┌──────────┐        │
│ │ASKUL │    │Monota│ │たのめ│ │カタログ│    │ 内部      │        │
│ │      │    │RO   │ │ーる  │ │  D    │    │ カタログ   │        │
│ │cXML/ │    │cXML/ │ │cXML/ │ │cXML/ │    │ 直接      │        │
│ │OCI   │    │OCI   │ │OCI   │ │OCI   │    │ クエリ    │        │
│ └──────┘    └──────┘ └──────┘ └──────┘    └──────────┘        │
│                                                                  │
│  ※ 外部カタログとはcXML/OCIプロトコルで通信                       │
│  ※ 内部カタログは直接DBクエリ                                     │
│  ※ 全リクエストは非同期並列で発行                                  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

3.2 横串検索エンジンの6つのコンポーネント

#コンポーネント役割
クエリパーサーユーザーの検索キーワードを解析。品名→カテゴリ自動マッピング辞書を参照して、UNSPSCコードや内部カテゴリコードに変換
ルーティングエンジンカテゴリに基づいて、どのカタログに問い合わせるかを決定。全カタログに一律照会 or カテゴリに紐付いたカタログのみに照会
並列リクエストディスパッチャ全対象カタログに対して非同期並列でリクエストを発行。内部カタログへのDBクエリも同時に実行
レスポンスアグリゲーター各カタログからの応答を受信・集約。タイムアウト管理(遅いカタログを待ちすぎない)。部分結果の段階的取り込み
ソート&フィルタリング集約された結果を価格順(デフォルト)にソート。グリーン商品・推奨商品の優先表示フラグ適用
キャッシュマネージャー頻出検索結果のキャッシュ管理。キャッシュヒット時はカタログへの問い合わせをスキップして即時応答

4. パンチアウト連携プロトコルの技術詳細

4.1 cXMLプロトコル(業界標準)

┌─────────────────────────────────────────────────────────────┐
│  cXML (Commerce eXtensible Markup Language)                  │
│                                                              │
│  開発元: Ariba(現SAP)                                       │
│  用途:   購買システム ↔ サプライヤー間の電子商取引通信           │
│  特徴:   XML構造、セッション管理、認証、カート転送を標準化      │
│                                                              │
│  ジーニー2.0での使い方:                                        │
│  横串検索エンジンがcXMLメッセージを使って                       │
│  外部カタログに検索リクエストを送信し、                         │
│  検索結果をcXML形式で受信して統合表示する                       │
└─────────────────────────────────────────────────────────────┘

4.2 通常パンチアウト vs 横串パンチアウトの通信フロー

【通常のパンチアウト(cXML標準フロー)】

  ユーザー        ジーニー2.0       サプライヤーA
    │                │                    │
    │  「検索」クリック │                    │
    │───────────────→│                    │
    │                │  PunchOutSetupReq  │
    │                │───────────────────→│
    │                │  PunchOutSetupRes  │
    │                │←───────────────────│
    │                │                    │
    │  ← リダイレクト(サプライヤーサイトへ)  │
    │                                     │
    │  商品を選んでカートに入れる             │
    │─────────────────────────────────────→│
    │                                     │
    │  PunchOutOrderMessage(カート情報)    │
    │←─────────────────────────────────────│
    │                │                    │
    │  カート情報を   │                    │
    │  ジーニーに戻す │                    │
    │───────────────→│                    │

  問題: 1サイトずつ。N社 = N回の往復。遅い。


【横串パンチアウト(特許技術フロー)】

  ユーザー        ジーニー2.0       サプライヤーA/B/C/D
    │                │                    │
    │  「検索」クリック │                    │
    │───────────────→│                    │
    │                │                    │
    │                │  ┌─ SearchReq ──→ A │
    │                │  ├─ SearchReq ──→ B │  ← 全て同時発行
    │                │  ├─ SearchReq ──→ C │     (非同期並列)
    │                │  ├─ SearchReq ──→ D │
    │                │  └─ DBクエリ ──→ 内部 │
    │                │                    │
    │                │  ┌─ SearchRes ←── A │  0.5秒
    │                │  ├─ SearchRes ←── 内部│  0.1秒
    │                │  ├─ SearchRes ←── B │  1.2秒
    │                │  ├─ SearchRes ←── D │  0.8秒
    │                │  └─ SearchRes ←── C │  2.5秒
    │                │                    │
    │                │  アグリゲート&ソート  │
    │                │                    │
    │  ← 統合結果を一覧表示               │
    │    (価格順、カタログ出典付き)        │

  解決: 1回の操作で全カタログ。待ち時間 ≒ 最遅カタログ分のみ。

4.3 cXMLメッセージの構造(概念例)

<!-- ① 検索リクエスト(ジーニー2.0 → サプライヤー) -->
<cXML>
  <Header>
    <From><Credential domain="DUNS"><Identity>buyer-id</Identity></Credential></From>
    <To><Credential domain="DUNS"><Identity>supplier-id</Identity></Credential></To>
    <Sender><Credential domain="jienie"><Identity>jienie-2.0</Identity></Credential></Sender>
  </Header>
  <Request>
    <SearchRequest>
      <SearchKeyword>コピー用紙 A4</SearchKeyword>
      <CategoryCode standard="UNSPSC">14111514</CategoryCode>
      <MaxResults>50</MaxResults>
      <SortBy>UnitPrice</SortBy>
    </SearchRequest>
  </Request>
</cXML>

<!-- ② 検索レスポンス(サプライヤー → ジーニー2.0) -->
<cXML>
  <Response>
    <SearchResult totalItems="23">
      <Item>
        <SupplierID>ASKUL</SupplierID>
        <ItemName>コピー用紙 A4 500枚 高白色</ItemName>
        <SKU>ASK-CP-A4-500</SKU>
        <UnitPrice currency="JPY">325</UnitPrice>
        <InStock>true</InStock>
        <LeadTimeDays>1</LeadTimeDays>
        <GreenProduct>true</GreenProduct>
        <ThumbnailURL>https://...</ThumbnailURL>
      </Item>
      <Item>...</Item>
    </SearchResult>
  </Response>
</cXML>

注意: 上記は概念的な説明用の擬似XMLであり、実際のcXML仕様やジーニー2.0の実装とは異なる場合があります。実際の通信プロトコルの詳細は入社後に児嶋さんから確認すること。


5. 高速化の技術的メカニズム

5.1 4つの高速化戦略

┌─────────────────────────────────────────────────────────────┐
│                                                              │
│  横串検索の高速化 — 4層防御                                    │
│                                                              │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ Layer 1: 非同期並列リクエスト                          │    │
│  │                                                      │    │
│  │  全カタログへのリクエストを同時に発行                   │    │
│  │  待ち時間 = max(各カタログの応答時間)                   │    │
│  │  ≠ sum(各カタログの応答時間)                           │    │
│  │                                                      │    │
│  │  例: A=0.5s, B=1.2s, C=2.5s, D=0.8s                 │    │
│  │  順次: 0.5+1.2+2.5+0.8 = 5.0秒                      │    │
│  │  並列: max(0.5,1.2,2.5,0.8) = 2.5秒 → ▲50%削減     │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                              │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ Layer 2: プログレッシブ表示                            │    │
│  │                                                      │    │
│  │  応答の早いカタログから順に結果を画面に追加表示          │    │
│  │  ユーザーは全カタログの応答を待たずに結果を閲覧開始     │    │
│  │                                                      │    │
│  │  タイムライン:                                        │    │
│  │  0.0s  検索開始                                      │    │
│  │  0.1s  内部カタログの結果表示 ✓                       │    │
│  │  0.5s  ASKUL の結果追加 ✓                            │    │
│  │  0.8s  カタログD の結果追加 ✓                         │    │
│  │  1.2s  MonotaRO の結果追加 ✓                         │    │
│  │  2.5s  カタログC の結果追加 ✓ (全完了)                │    │
│  │                                                      │    │
│  │  → ユーザー体感: 0.1秒で最初の結果が見える!           │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                              │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ Layer 3: キャッシュレイヤー                            │    │
│  │                                                      │    │
│  │  頻出検索クエリの結果をサーバー側でキャッシュ            │    │
│  │  TTL(生存時間)を設定して鮮度を保証                    │    │
│  │                                                      │    │
│  │  キャッシュ戦略:                                      │    │
│  │  ・検索キーワード + カテゴリ をキーとしてキャッシュ      │    │
│  │  ・人気商品(コピー用紙、トナー等)はヒット率が高い     │    │
│  │  ・キャッシュヒット時: 0.05秒以下で応答                │    │
│  │  ・TTL: 数時間〜1日(価格変動頻度に応じて調整)        │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                              │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ Layer 4: インデックス最適化                            │    │
│  │                                                      │    │
│  │  外部カタログの商品マスター情報を定期的に同期           │    │
│  │  → ローカルインデックスを構築                          │    │
│  │  → 検索時のリアルタイム通信量を最小化                  │    │
│  │                                                      │    │
│  │  仕組み:                                             │    │
│  │  ・バッチ処理で商品マスターを夜間同期                  │    │
│  │  ・検索時は「在庫・価格」のみリアルタイム取得          │    │
│  │  ・商品名・スペック等はローカルインデックスから取得     │    │
│  │  → 通信データ量が大幅に削減                           │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                              │
│  結果: ユーザー体感 < 1秒(キャッシュヒット時)              │
│        ユーザー体感 1〜3秒(キャッシュミス時)                │
│        従来方式: 30秒〜数分(手作業比較)                     │
│                                                              │
└─────────────────────────────────────────────────────────────┘

5.2 タイムアウトとフォールバック

シナリオ対応
カタログが応答しないタイムアウト(例: 5秒)後にスキップ。他の結果を先に表示
カタログが遅いプログレッシブ表示で早いカタログから順に表示
全カタログがダウン内部カタログのみの結果を表示 + エラー通知
キャッシュが古いTTL超過 → 次回検索時にリフレッシュ。古いキャッシュは表示しない

6. カテゴリマッピング(品名→カテゴリ自動変換)

6.1 UNSPSCコードの活用

┌─────────────────────────────────────────────────────────────┐
│  UNSPSC (国連標準製品・サービス分類コード)                      │
│                                                              │
│  階層構造:                                                    │
│  14         事務用品・消耗品                                   │
│  14-11      紙製品                                           │
│  14-11-15   事務用コピー用紙                                  │
│  14-11-15-14 A4コピー用紙                                    │
│                                                              │
│  ジーニー2.0での活用:                                         │
│                                                              │
│  ユーザー入力: 「コピー用紙」                                  │
│       ↓                                                     │
│  品名→カテゴリ変換辞書                                        │
│       ↓                                                     │
│  カテゴリコード: 14-11-15                                     │
│       ↓                                                     │
│  このカテゴリに紐付く全カタログに検索リクエスト送信             │
│       ↓                                                     │
│  異なるサプライヤーの同一カテゴリ商品が                         │
│  横並びで比較可能になる                                        │
│                                                              │
│  → スペンド分析時にもカテゴリコードで集計可能                  │
└─────────────────────────────────────────────────────────────┘

6.2 トランスコーディフィケーション(コード変換)

問題解決策
バイヤーの品目コード ≠ サプライヤーの品目コードUNSPSCを仲介コードとして変換
サプライヤーAは「A4コピー用紙」、Bは「Copy Paper A4」テキストマッチング + カテゴリマッピングで同一商品として認識
カテゴリがないと比較不能品名入力 → 辞書で自動カテゴリ付与 → カテゴリ単位で横並び比較

7. セキュリティと認証

7.1 認証フロー

  ┌──────────────────────────────────────────────────────────┐
  │                                                           │
  │  ユーザー認証フロー                                        │
  │                                                           │
  │  ① ユーザーがジーニー2.0にログイン                          │
  │     → セッショントークン発行                               │
  │                                                           │
  │  ② 横串検索リクエスト発行                                  │
  │     → トークンに紐付くバイヤー企業の情報を取得              │
  │                                                           │
  │  ③ 外部カタログへのリクエスト時                             │
  │     → バイヤー企業の認証情報を付与                         │
  │     → 交渉済み特別価格が適用される                         │
  │                                                           │
  │  ④ 検索結果はユーザーセッションに紐付き                     │
  │     → 他ユーザーの検索結果とは完全に分離                   │
  │     → セッション終了時に一時データは削除                    │
  │                                                           │
  └──────────────────────────────────────────────────────────┘

7.2 セキュリティ対策

項目対策
通信暗号化全通信はHTTPS/TLS。サプライヤーAPIとの通信も暗号化
認証・認可バイヤー企業ごとのクレデンシャル管理。表示される価格はバイヤー固有
データ分離マルチテナント。検索結果は一時的でユーザーセッションに閉じる
監査ログ検索履歴、カート追加、発注の全操作を記録

8. 競合特許との比較

8.1 Ivalua社の類似特許(US20210342919A1)

項目ジーニーラボ(特許第6461047号)Ivalua(US20210342919A1)
出願日2019年1月(日本)2019年1月(米国、優先日)
地域日本国内特許米国特許出願(ペンディング)
アプローチcXML/OCIベースのパンチアウト横断検索REST API + iXML形式での横断検索
検索方式非同期並列パンチアウト2段階API照会(概要→詳細)
差別化日本市場最適化、下請法対応との統合グローバル対応、UNSPSCベースの変換
結果表示プログレッシブ表示 + 価格順ソート統一UI + 属性別フィルタリング

示唆: 横串検索の概念自体はグローバルで認知されている技術課題。 ジーニーラボの強みは「日本市場に特化した実装」と「既に商用稼働している実績」。


9. 技術面のFAQ(IT部門からの質問想定)

#質問回答
Q1外部カタログとの通信プロトコルは?cXMLまたはOCI。サプライヤーに応じて選択。業界標準プロトコルを採用
Q2検索結果のリアルタイム性は?在庫・価格はリアルタイム取得。商品マスター情報はバッチ同期+ローカルインデックス
Q3レスポンスタイムのSLAは?キャッシュヒット時0.05秒以下。キャッシュミス時1〜3秒(カタログ数と応答速度に依存)
Q41回の検索で何件まで結果を返せる?各カタログ最大50件 × カタログ数。UI上はページネーションで表示
Q5既存ERPとの連携は?ERP非依存設計。検収データ・マスターデータはバッチ連携。REST APIも対応
Q6可用性は?クラウドSaaS。SLA詳細は契約に依存(入社後確認)
Q7カタログを追加するのにどのくらいかかる?cXML/OCI対応済みサプライヤーなら数日。新規対応は数週間
Q8セキュリティ認証は?HTTPS/TLS、マルチテナント分離、監査ログ。詳細は入社後確認

10. 入社後の技術学習アクション

  • 児嶋さんからデモ環境で横串検索の実際のリクエスト/レスポンスを確認する
  • 特許公報(特許第6461047号)の原文(請求項・明細書)をJ-PlatPatで確認する
  • 実際のcXML/OCIメッセージフローをデバッグツールで追跡する
  • キャッシュ戦略とTTL設定の実際の値を確認する
  • パフォーマンスメトリクス(平均レスポンスタイム、キャッシュヒット率)を入手する
  • 連携中のカタログベンダー一覧と各ベンダーのプロトコル(cXML/OCI)を確認する
  • Ivalua社の米国特許(US20210342919A1)との技術的差異を開発チームに確認する
  • ベトナム開発チームとのアーキテクチャレビューセッションを設定する

調査ソース


最終更新: 2026-04-15 ステータス: evergreen — 入社後に実装詳細を追記予定 対象読者: エンジニア、IT部門、技術的な質問に回答する必要がある場面で参照

関連インフォグラフィック