DAM カラオケ検索(clubdam)の挙動と制約
clubdam のキーワード検索はスペース区切り AND・語順不問・先頭 5 語のみ評価。アポストロフィは除去しない。サーバからの fetch は User-Agent 必須(無いと 503)、CORS は閉じている。会員規約 第10条が自動取得を禁じる。
調査時点: 2026-09。公開プロジェクト damjump(YouTube の共有から DAM の検索ページへ飛ばす PWA)の実装で実測したもの。
検索クエリの挙動
| 挙動 | 内容 |
|---|---|
| 区切り | スペース区切りの AND。全角スペースでも効く。語順は問わない |
| 横断 | AND は曲名・歌手名を横断する(粉雪 レミオロメン → 4 件) |
| 記号 | ~ ・ などは区切りとして扱われる |
| 語数 | 先頭 5 語だけを見る。6 語目以降は黙って捨てられ、エラーも警告も出ない |
| 曲名単体 | 広すぎる(粉雪 → 100 件、歌詞ヒット混入)。アーティスト名を必ず付ける |
| バリエーション | [生音] [プロオケ] などの角括弧プレフィックス。無印が第一候補 |
5 語制限は、カバー動画のタイトルのように末尾に余計な語が付く入力では有利に働く(6 語目以降のカバー主が自動的に無視される)。短いタイトルの場合はカバー主が 5 語以内に入って 0 件になるので、段階的にトークンを削る実装が要る。
段階的削除は「狭い方から」
AND 検索はトークンが増えるほど絞れる。広いクエリから試すと 1 段目で 100 件返って「当たった」と誤判定するので、候補は狭い順(全文+チャンネル名 → 全文 → 末尾の断片を 1 つずつ落とす → 断片単体 → チャンネル名)に並べ、0 < 件数 <= 閾値 が出た段で止める。実装側でもクエリを 5 語に切ってから重複を落とすと、見た目が違うだけで同一のクエリを二度投げずに済む。
アポストロフィは除去しない
「アポストロフィ以降が切り捨てられる」という挙動は検索フォーム / URL パラメータ側のもので、検索処理そのものには無い。除去するとむしろ悪化する。
| クエリ | 件数 | 先頭 |
|---|---|---|
SOUL'd OUT | 102 | ウェカピポ / SOUL’d OUT |
SOULd OUT(' を除去) | 3 | BoA w/z SOUL’d OUT の曲(別物) |
ウェカピポ SOUL'd OUT | 3 | ウェカピポ / SOUL’d OUT |
ウェカピポ SOULd OUT | 0 | — |
サーバからの fetch は User-Agent 必須
clubdam は User-Agent ヘッダの無いリクエストに 503(メンテナンス用の静的 HTML)を返す。Cloudflare Workers の fetch は既定で User-Agent を付けないため、「ローカルの curl は通るのに Worker からは 503」という形で踏む。UA の中身は問われないので、ブラウザを騙らず素性を名乗る文字列(<app>/<version> (+<URL>))を明示的に載せる。
CORS は閉じている
OPTIONS(プリフライト)に 503 が返り、POST に Origin を付けても access-control-allow-origin は返らない。Content-Type: application/json の POST はプリフライトが要るため、ブラウザから直接は叩けない。サーバ経由なら通る。
規約上の制約
robots.txt は検索系パスを禁止していないが、利用規約(会員規約)第10条の禁止行為に次の条文がある。
- 2 項: コンテンツ・メタデータ等を解析、抽出、保存、複製、再配布、再送信する行為
- 3 項: BOT、クローラー、スクレイピング等、自動化された手段によるアクセス
- 4 項: サービスの通信仕様・内部データ等を解析、リバースエンジニアリングする行為
適用範囲は会員(第5条)。DAM★とも に登録していれば掛かる。「認証用の値がブラウザに配られている」ことと「使ってよい」ことは別で、内部 API を自動で叩いて曲名・選曲番号を抽出する導線は個人利用でも 2 項・3 項の文言に当たる。一方、利用者のブラウザで検索ページを開くだけの導線は通常の閲覧で、どの項にも当たらない。damjump が検索ページへ遷移する方式を採ったのはこの差による。
関連
更新履歴
- 2026-09-12: 初版(ローカル調査ノート)
- 2026-10-17: Wiki へ移植、概念ページとして再構成
同じトピック — Web
- 単一画面の Canvas ツールのスタック選定(vanilla TS / Svelte / Preact と PWA ツーリング)
- Core Web Vitals と画像最適化
- favicon の最小構成(SVG + ICO + apple-touch-icon + manifest)
- フロントエンドのフレームワークとツールの動き(2025)
- HTML-in-Canvas API
- HTML-in-Canvas の実現性(a11y・性能・セットアップ・シェーダー)
- iOS Safari で canvas の画像を保存させる(download 属性 / Web Share / 長押し)
- 日本語 Web フォントのライセンスとサブセット化
- 個人サイトのライブウィジェットと外部 API の制限
- モダン CSS / Web API の対応状況(2025-2026)
- OPFS(Origin Private File System)
- Google Places API のキーの守り方(ブラウザ露出 vs サーバ中継)
- iOS の PWA 制限
- 機能別 React / TS ライブラリ対応表(2026-04 時点)
- URL 長の上限と日本語の URL エンコード膨張
- 書き出すテキストファイルの UTF-8 BOM と Markdown 継続行
- 縦書き Web の実装(writing-mode・ルビ・圏点・縦中横・禁則)
- PWA の Web Share Target(Android)の実測と落とし穴
- WebAssembly(Wasm)
- YouTube oEmbed で動画タイトルとチャンネル名を取る