この記事は Wano Group Advent Calendar 2025 の21日目の記事となります。
はじめに
Wano グループで音楽配信プラットフォーム TuneCore Japan の開発・運用に携わっている @_kobacky といいます。
この記事では Notion に貼り付けた楽曲IDから Spotify のプレイリストを作成する仕組みを Copilot に作ってもらった事例について書きたいと思います。
なお、実装の詳細についての記載はしていません。Notion や Spotify の API に関して知りたい方は公式ドキュメントなどをご参照ください。
経緯
TuneCore Japan には日々大量の楽曲が配信登録されるのですが、企画側のメンバーを中心に以下のような楽曲を日常的に聴いています。
- オーディションに応募された楽曲
- 特定の分析軸で分析基盤から抽出された楽曲
- etc...
これら楽曲は TuneCore Japan の管理画面からでも聴けるのですが、量が多いため Spotify などの音楽配信サービスで流して聞けると便利です。
ある日、上記のような楽曲のリスト(TuneCore Japan の楽曲IDのリスト)から Spotify のプレイリスト作って欲しいというスポットでの依頼があったのですが、せっかくなのでエンジニアに依頼しなくても Spotify プレイリストを作成できる仕組みを作ってしまおうと思って対応しました。
ちょうど GitHub Copilot Coding Agent が使えるようになった頃だったので、試すのに良いタスクと思い Copilot に実装してもらうことにしました。
仕様・実装
Issue の内容
上記前提の元 GitHub Issue 以下の通りに仕様・設計・要望をざっくり記載し Copilot に実装依頼をしました。
なお Spotify や Notion の API へのアクセスは既存機能で一部実装されており、今回の開発機能でもそれらの既存実装を活用しつつ、足りないものは追加実装してもらう形で依頼しています。
概要
以下のようなコマンドを実装したいです。
- Notion DB の本文に記載した楽曲 ID を元に Spotify のプレイリストを作成する
- cronで定期的にコマンドを実行し、Notion DB からプレイリスト作成・楽曲追加が必要なレコードを取得し、Spotify API 経由でプレイリスト作成・楽曲追加を行います。
仕様詳細
Notion DB について
内容
1レコードが1つのSpotify プレイリストに該当する Notion DB です。
プロパティ定義
- 名前: プレイリスト名
- 主キー
- テキスト型
- プレイリストID: Spotify のプレイリストID
- テキスト型
- 最初は空で、プレイリストを作成時に自動で値を設定します
- ステータス:
- セレクト型(単一項目)
- 以下のいずれかのステータスを持つ
- (設定なし):処理対象外
- 処理待ち:処理対象
- プレイリストID が未設定の場合
- プレイリストID が設定済みの場合、そのプレイリストに楽曲を追加する
- 処理成功:処理対象外
- 処理失敗:処理対象外
ページ本文
- 番号付きリストとして TuneCore Japan の楽曲ID(数値)を記載
- 番号付きリスト以外の項目は無視
動作の定義
- プレイリストIDの設定有無によって以下のように処理します
- ID設定無し:プレイリストを新規に追加して楽曲を追加。プレイリストIDをNotionに設定する。
- ID設定有り:そのプレイリストIDのプレイリストに楽曲を追加。
- プレイリスト作成結果は Notion DB のレコードに対してコメントとして追加します。
- 成功
- プレイリストに追加できなかった楽曲があった場合にはそのIDがわかるようにコメントする
- 失敗
- 失敗の理由がわかるようにコメント
- 処理が完了した際にステータスを処理成功・処理失敗のどちらかに設定します
実装について
- Notion のAPIへのアクセスはこのモジュール(モジュールのソースコードのリンク)を利用してください
- api や block / page / property の定義は足りないと思うので必要に応じて追加してください
- Spotify のプレイリスト作成&プレイリスト追加は(既存の関数名とそのソースコードへのリンク)を利用してください
- 既存プレイリストに楽曲追加する場合はこの関数をそのまま使えないと思うので、これを参考に(新規追加して欲しい関数名)を追加して下さい
補足
- もし仕様で悩むことがあったらコメントして下さい
実装結果と修正依頼
上記のイシューに Copilot をアサインすると、GitHub Copilot Coding Agent の機能により、1時間ほどで実装を完了してくれました。若干 Syntax エラーがあったものの、それを修正したら一応動作するものにはなっていました。(この時点でちょっと感動)
ただしそのまま完成とはできなかったので、成果物をローカルで動かして確認しつつ何度か修正依頼をして改修してもらいました。
仕様変更
成果物を動かしてみた体感から仕様を調整し、Copilit に修正してもらいました。
- NotionDB のステータスカラムは無くし、代わりに処理待ち(チェックボックス型)を追加
- cronが処理対象とするか否かだけがわかるのみで充分であり、運用上もその方がわかりやすそうと感じたため
- 入力元情報を番号付きリストではなくテーブルに変更 (以下の理由から)
- SpreadSheet から Notion に番号付きリストとして貼り付けるのが難しかったため
- 楽曲IDのみではなく、楽曲名・アーティスト名も並べて貼り付けておいた方がプレイリスト作成結果とのと都合がしやすかったため
- 結果報告のコメントの形式を微調整
不具合修正
以下のような不具合があったので修正してもらいました。
他にもいくつか不具合はあったので、このような調子で修正してもらいました。ドキュメントのリンクを示しながら修正依頼すればちゃんと修正してくれました。
良かったこと
- Notion 連携部分の実装を自分で特に詳しく調べずとも Copilot が(若干バグはあるものの)ちゃんと動くプログラムを作ってくれたのは感動しました。以前 Notion 連携の機能を自分で作った時、Notionのデータ構造が割と複雑で正しくリクエストするのに苦労した(何度もBadRequestをした上で正解に辿り着いた)ので、まずはちゃんと動く状態のソースをパッと作ってくれるのは大変助かるなと思います。初めて触る API を使ってシステムを作る時の初手としてはかなり役立ちそうです。
- 実装のコストが下がったので、とりあえず作ってみてから(Copilotに作ってもらってから)動くものを触って仕様を考えるということがやりやすくなったと思います。
- これは仕様面ですが、コマンドの実行結果を Notion ページのコメントとして投稿するという仕様は良かったと思います。コメントが投稿されると Notion のページを作った人 (プレイリストを作りたい人) に Notion の機能で通知が飛ぶので、プレイリストが出来上がったことを知らせることができます。
まとめ
Notion に記載した楽曲 ID リストから Spotify のプレイリストを作成する仕組みを Copilot に作ってもらった事例について紹介しました。
事業ドメインの中心部分の開発はコンテキストも複雑なので AI に作ってもらう難易度も上がりそうですが、こういう社内で使うちょっとした便利ツールを片手間で Copilot に作ってもらうのは結構良さそうと思いました。
実装がラクになった分、社内であったらいいなというものが出てきた場合には、なるべく簡単に実現できる方法を考えて積極的に仕組み化していければと思います。
簡単ですが、以上になります。読んで頂きありがとうございました。

