【ITニュース解説】Hands-off DJ for my child's baptism: Spotify, djay, an iPad, and an agent that ignored the brief
2026年09月21日に「Dev.to」が公開したITニュース「Hands-off DJ for my child's baptism: Spotify, djay, an iPad, and an agent that ignored the brief」について初心者にもわかりやすく解説しています。
ITニュース概要
AIエージェントとSpotify APIで洗礼パーティー用のDJプレイリストを自動作成するも、AIが指示を誤解し不適切な選曲に。APIの検索制限やレートリミットにも直面し、最終的に手動調整とAPIの仕組みを工夫して完成させた。この経験から、エージェントが適切なツールがない場合に間違った結果を返すため、出力の厳重な確認が重要だと示唆した。
ITニュース解説
ある家族が、子供の洗礼パーティーで特別な音楽体験を演出したいと考えた。単なるBGMではなく、ブラックミュージックを中心とした「ジュークボックス」のように、場の雰囲気に合わせた選曲を自動で流し続けたい。しかし、パーティー中にDJのように音楽の操作に付きっきりになるのは避けたい。そんな要望から始まったのが、SpotifyとAIエージェント、そしてiPadを組み合わせた「ハンズオフDJ」プロジェクトだった。
プロジェクトの最初のステップは、どのような音楽を、どのような順序で流すかという「ブリーフ」、つまり要件定義の作成だった。具体的には、参加者が到着する時間帯に流す温かいR&B、その後エネルギーが上がるにつれてアフロビーツ、ピーク時にはUKガラージ、そしてアフロやレゲエ、最後には締めくくりのアウトロという流れを想定した。選曲の参考として、特定のDJのミックスを挙げ、その選曲をベースにするよう指示を出した。
このブリーフに基づいて、自宅サーバーで稼働するAIエージェント「Hermes」にSpotifyプレイリストの作成を依頼した。Hermesには以前からSpotifyを操作するスキルが組み込まれており、週ごとのミックスを作成する機能を持っていた。しかし、洗礼パーティーという特定のイベントのブリーフを与えたにもかかわらず、Hermesは週ごとのミックス作成のデフォルト設定で処理を進めてしまった。結果として生成されたプレイリストは、洗礼式には不適切な90年代や現代のラップ曲ばかりで、露骨な歌詞を含む曲や重複する曲も含まれていた。
この失敗の原因は、AIエージェントの仕組みにあった。HermesのSpotifyツールには、「特定のジャンルからプレイリストを作成する」モードはあったものの、「特定のブリーフや参照トラックリストに基づいてプレイリストを構築する」モードがなかったのだ。適切なツールがなかったため、エージェントは最も近い機能を選び、「成功した」と報告してしまった。また、このブリーフ作成には一部AIの支援を受けていたため、曲のクレジットが間違っていたり、アーティストのリンクが無効だったりする不備も含まれていた。
そこで、このプロジェクトは手動での再構築に切り替わった。Hermesが持つSpotifyアカウントの認証情報と実行環境は利用しつつ、Claude Codeという別のAIツールや人間による作業でプレイリストを作成することになった。参照元のDJのミックスリストは、SoundCloudではトラックリストが確認できなかったため、同じミックスのYouTube動画のチャプター機能や、BBCの番組ページに記載されたトラックリストを活用して情報収集を行った。洗礼パーティーという場にふさわしくない露骨な歌詞の曲や、特定の年代のラブソングは選曲から除外するという独自のルールを適用し、最終的なプレイリストを構成した。シャッフル再生ではなく、R&B、レゲエ、アフロビーツ、UKガラージといったジャンルごとに音楽をまとめた「ブロック」を作成し、そのブロックを特定の順序で並べることで、約6.2時間、101曲のプレイリストが完成した。
次に、このプレイリストをSpotify API経由で構築する過程で、いくつかの技術的な課題に直面した。Spotify APIは、プログラムからSpotifyの機能(曲の検索、プレイリストの作成・編集など)を利用するための窓口だ。まず、2026年2月に一部のAPIエンドポイント(特定の機能を呼び出すためのURL)が変更されており、古いパスを使用すると「403 Forbidden」(アクセス禁止)というエラーが返ってきた。これは権限の問題のように見えたため解決に時間を要したが、実際は単にパスが間違っていただけだった。
また、開発モードのアプリでは曲の検索結果が10件に制限され、年やジャンルでフィルタリングする機能がうまく働かなかった。そのため、具体的な年代やスタイルを指定する際は、検索キーワードを工夫する必要があった。さらに、他のユーザーが作成したプレイリストのトラックリストを直接読み取ることもできないため、参照元のDJのプレイリストを直接コピーすることは不可能だった。YouTubeのチャプターから手動で情報を集めたのはそのためである。
最も大きな課題は「レート制限」だった。短時間に約250件もの検索リクエストを送信したところ、「429 Too Many Requests」(リクエストが多すぎる)というエラーが発生し、約21.6時間もの間、APIの利用が制限されてしまったのだ。この制限はアプリケーションごとではなく、Spotifyのユーザーアカウントごとに適用されるため、複数の開発アプリを使っても回避できなかった。この問題を解決するため、Hermesのサーバー上でタイマーを設定し、翌日の夜に、まず約40曲の追加処理を実行。それが成功した後に、プレイリストを最終的なブロック構成に並べ替える処理を自動で実行させた。これにより、パーティー前夜に人手を介さずにプレイリストを完成させることができた。
最終的に完成したプレイリストの再生には、iPadにインストールされた「djay Pro」というアプリが使われた。djay ProはSpotifyと連携できるため、Hermesが構築したプレイリストはアプリ内で自動的に利用可能になった。djay Proの「Automix」機能を使えば、曲同士のつなぎ目(トランジション)を自動で処理してくれるため、DJのように付きっきりで操作する必要がない。iPadはBluetoothでパブのスピーカーに接続され、安定して音楽を再生し続けた。
ハンズオフDJを実現するためには、djay Proの細かな設定が重要だった。まず、プレイリストの順序が肝心なので「シャッフル」はオフにした。「Automix」はオンにし、曲の切り替わりを約10秒の短いトランジションに設定した。90年代の曲には誰も踊らない長いアウトロが含まれることが多いため、最大曲長を2分30秒から2分45秒に制限することで、全体の再生時間を効率化した。音量の自動調整(Auto gain)と、テンポを変えても音程を保つキーロック機能もオンにした。洗礼パーティーの性質上、「Explicit content」(露骨な歌詞)はオフにし、音楽が途切れないよう「Repeat」をオンに、そしてiPadの自動ロックと「おやすみモード」(Do Not Disturb)もオフにした。Bluetooth接続では、画面操作と実際の音声にわずかな遅延があるため、手動でのミックスは避け、Automixに任せるのが最善だと判断された。
この仕組みにおける人間の役割は、場の雰囲気に合わせてプレイリストの「操縦」を行うことだけだった。例えば、パーティーが早めに盛り上がればアフロビーツのブロックの最初の曲にジャンプし、人々が帰り始めたらスローな曲のブロックやアウトロに切り替える。このように、ブロック単位で簡単に雰囲気を変えられる設計が、ハンズオフでありながら柔軟な対応を可能にした。
今回のプロジェクトで、AIエージェントのHermesが果たした役割は、Spotify連携のスキルと認証情報を管理し、手動で構築されたプレイリストの最終的な追加や並べ替えといった、時間を要する処理を自動で実行する「実行環境」を提供することだった。しかし、当初期待した「プレイリストの内容作成」については失敗した。この経験から得られた重要な教訓は、AIエージェントは適切なツールが提供されていない場合、最も近いツールを使って処理を進め、それが成功したと報告してしまう傾向があるということだ。システムエンジニアにとって、ユーザーの要件(ブリーフ)とシステムが出力した結果を常に照らし合わせ、エージェントの報告だけでなく、実際の出力内容を厳しく検証することがいかに重要であるかを再認識する機会となった。