はじめに
DTM DIGS(https://dtm-digs.vercel.app)は、ニッチな電子音楽・DTMアーティスト図鑑です。Astro 5 の静的サイトで、Vercel CLI で公開しています。姉妹サイトは DTM PICKS(DTMセール情報)と OTOMO(音楽交流アプリ)です。
作業は Claude Code で行い、文章の読み書きの一部を DeepSeek(自作の ds コマンド)に任せました。この記事は、掲載数を100組に増やした過程と、フィードバックで変えた点、ハマった不具合の記録です。
サイトの方針
- 紹介文は独自に書く。
- 事実(拠点・作品名・年・リンク)は公式 Bandcamp などで確かめたものだけを載せ、各ページに「情報の確認元」を表示する。
- 写真・音源は転載せず、Bandcamp / YouTube の公式埋め込みのみを使う。
- 埋め込みはボタンを押すまで読み込まない。JS が無くてもリンクで聴けるようにした。
SEO の土台
- ページごとの title / description、canonical、OGP 画像を設定。
- 構造化データは WebSite / ItemList / ProfilePage+MusicGroup / BreadcrumbList / CollectionPage。
- sitemap.xml と robots.txt をビルド時に生成。
- Search Console に HTML ファイルで所有権を確認し、sitemap を送信。
フィードバックで変えたこと
方向転換
最初は知られたインディーDTMアーティスト10組を掲載していました。「もっとニッチに」「電子音楽寄りで有名ではない人を」というフィードバックを受け、最初の10組は知名度が高めなので掲載をやめました。サイトの副題も「ニッチな電子音楽・DTMアーティスト図鑑」に変更しています。
デザイン
- アーティスト名がぼんやり光るネオン風の光彩(text-shadow)と背景グラデーションをやめた。
- 写真の代わりの頭文字ブロックもやめ、カード上端の細い色線でジャンルを示すだけにした。
導線
- 姉妹サイトへのリンクをフッターからヘッダーのメニューへ移動。
- トップの「ジャンルから探す」をアーティスト一覧より上へ。
- トップの長い説明文は「くどい」とのことで削除し、見出し1行とボタンだけにした。
ジャンル追加
エクスペリメンタル/IDM、ダウンテンポ/バレアリック、ワールド系エレクトロ、ブレイクコア/ドラムンベース、ハウス/ブロークンビートを追加しました。掲載がいなくなったジャンルのページは自動で作られません。
ハマった不具合
- Bandcamp の埋め込み iframe に
loading="lazy"を付けると、クリック後に作った iframe が真っ白のままだった。外して解決。
// ボタンを押したときに iframe を作る。ここで loading = 'lazy' を付けると読み込まれないことがあった
btn.addEventListener('click', () => {
const f = document.createElement('iframe');
f.title = el.dataset.title;
f.height = el.dataset.height;
f.allow = 'autoplay; encrypted-media; picture-in-picture';
f.src = el.dataset.src; // 属性を先に設定してから src を入れる
btn.replaceWith(f);
});
- Bandcamp のプレーヤーは横幅 700px までしか伸びず、右に白い余白が出た。
max-width: 700pxで対応。
100組に増やした方法
収集
Bandcamp Daily の2026年の電子音楽・アンビエント・実験音楽・ビートテープの月間記事23本と、日本のインディー紹介記事(scrmbl、This Side of Japan)から、473件の Bandcamp アカウントを集めました。
並列で取りに行くと 429(読み込みすぎ)で止められたため、retry-after を見て1件ずつ間隔をあけて取得しました。
ふるい分け
- DeepSeek に経歴・拠点・作品数を10件ずつ渡し、「電子音楽中心か/個人かレーベルか/知名度」を表で判定。
- Claude がその界隈で有名な人・ロック系・レーベルを外す。
- 作品ページのジャンルタグ・発表年(2024年以降)・作者の名義を確かめる。
- 最新作が別アーティスト名義のアカウント8件はレーベル運営寄りとして除外。拠点が確かめられない2件も除外。
下書き
DeepSeek に、確かめた事実(拠点・経歴・最新作と年・ほかの作品名・ジャンルタグ)だけを5組ずつ渡し、紹介文2段落・一言紹介・DTM制作のポイント2つを JSON で書いてもらいました。
照合
- Claude が年・『作品名』・経歴にない語(出身、受賞、人組など)を機械的に照合。
- 「入力に記載がありません」のような裏話が混ざった43組は、指示を強めて書き直させた。
- 共作作品の「作品名 | アーティスト名」も正しい表記に直した。
- 情報が少ない人は「公式リンク・埋め込み・短い紹介文」だけでよい、という方針にした。
結果は100組(日本36・海外64)、117ページ。リンク切れ0、構造化データの JSON はすべて正しく読めることを確認しました。
毎朝の定期タスク
毎日5組を探して下書きを作る定期タスクも用意しました。公開はユーザーが確認してからです。候補台帳 docs/candidates.md で、掲載済み・見送り(と理由)を管理して、同じ人を何度も調べないようにしています。
DeepSeek を使って分かったこと
- 使ったモデル(deepseek-flash)は推論の分も出力上限を使うため、
--maxが小さいと答えが出ない。--max16000〜24000、1回に10件以下が安定。 - Claude Code のシェルでは
~/.local/binが PATH に入っていないことがあり、dsはフルパスで呼ぶ。 - 事実の照合は機械的チェック(年・作品名・危ない語)+人の目で行う。
関連サイトの改善
- 3サイトで1つのアカウントを共有する設計を作成(OTOMO の Supabase を共通の台帳にする案)。
- その前段として、DTM PICKS で Google ログインしただけの人が OTOMO のメンバー一覧に「名無しさん」として出てしまう問題を、表示するかどうかの欄と公開ルール(RLS)で直しました。
まとめ
- 方針は「独自の紹介文」「確認できた事実だけ」「公式埋め込みのみ」。
- フィードバックで掲載対象・デザイン・導線を変え、ジャンルを追加した。
- 収集は429を避けて1件ずつ、ふるい分けと照合は DeepSeek と Claude の分担で行った。
- 結果は100組・117ページ、リンク切れ0。
運用の反省として、待ち時間のたびに作業を止めてしまい、ユーザーに何度も「続けて」と言わせました。待ちが必要でも最後(デプロイ)までやり切るよう、Claude のメモリに保存しています。