はじめに
rekordbox ってめちゃくちゃ便利ですよね。でもちょっと振り返りには使いづらい。
rekordbox の DB って暗号化されているから外部からアクセスできない
・・・って思っていましたが、
・sqlite / SQLCipher を使って暗号化されている
・有志によって暗号化鍵が特定されていて復号可能
・上記を前提として、pyrekordbox という rekordbox DB を操作するライブラリが公開されている
ことから、自己責任で誰でも操作することが出来るようになっていました。知らんかった。
じゃあ、生成 AI でのバイブコーディング(バイブスだけでアプリ作る)なんかが持て囃されているこの時代なら、
簡単に自分専用のアプリ化出来ちゃうんじゃな〜い?と思いついて、
アプリ開発者でもなんでもないのですが、2時間くらいで作ってもらいました。コード1行も書いてません。
私専用として考えた雑多アプリなので、Mac でしか動きません(※Win 用に改修すれば動く)し、
Python の仮想環境を使っています。
他人に公開するってなった瞬間にセキュリティ周りの考えが100倍くらい面倒くさくなるし、端金もらって問い合わせサポートなんて割に合わなさすぎてやってられませんから公開しません。
が、公開するかわりに最後にプロンプト代わりの README.md を置いておくので、
興味があれば、生成 AI 様に突っ込んで各自で作ってもらってください。
コレめちゃくちゃ新しいアプリの配布方式では???
「生成責任共有モデル」だとか、「レシピ・ウェア」とでも呼ぼうか。
Rekordbox Analyzer
まず Rerkordbox Analyzer を作った経緯としては、DJ で過去につかった曲をまた使うことが多いので、
じゃあ実際どのくらい使ってるんだろうか?というのを可視化出来ると面白いんじゃないかなと思った次第です。
あと、プレイリスト作った日時情報も参照できるから、
年月で好みの BPM が変化しているんじゃないかなとか、「この曲使いすぎだろw」みたいなのとか、そういう多角的な分析ができたらもっと面白いんじゃないかなって考えた。
注:別にプレイリスト使いまわしは悪いことじゃないでしょと思うが、別に DJ 論をここでやりたいわけではない。
なお、以下のロジックを入れています。
・60曲以上のプレイリストは対象外にする
例えばジャンル別とか、タグリストみたいに雑多に集めたプレイリストとかは DJ プレイリストの振り返りに使うものではなくノイズになるため
・BPM=0は対象外にする
ゲームDJだと良くあるんですが、短すぎると解析されていません。これもノイズ。
セガサターン起動音みたいなやつ(サウンドロゴ)。
Dashboard

ダッシュボードでは、現在のライブラリ登録曲数とプレイリスト数、
およびプレイリストが新規作成された月日(≒大まかな DJ 出演数)を表示できます。
表示設定で年単位、月単位を切り替えられます。
(プレイリスト登録数は恥ずかしいのでカットしています///)
Trend Analysis

トレンド分析では、年あるいは月単位の平均 BPM 推移を算出します。
昔は早いのが最近は落ち着きがち・・・
・・・と思ったが別にそんなことはなかったぜ!
また、ライブラリへの楽曲追加数も年月で統計を出せます。
これはダッシュボード表示でも良かったかも。ゲームサントラは曲数が極端に多い時があるので、極端ですね。
ジャンル採用比率も出せるようにしています。普通は Rock とか Techno とか Pops だと思うんですけど、歪んだゲーム音楽 DJ なので、アクションとかレースとかシューティングがジャンルになります。絶対使い方間違ってるんだよな。
Drill Down

ドリルダウンでは、特定の年あるいは月におけるプレイリストの統計サマリーを表示します。
良く使った曲 TOP10 や BPM 分布など、Trend Analysis より掘り下げた情報を提供します。
Single Playlist Analytics

後から思いついて追加した、このアプリのメイン機能です。
特定のプレイリスト一つをピックアップして詳細分析を行います。
曲ごとの BPM の推移や平均、近似しているプレイリストと近似度を表示します。
つまり「このプレイリスト、あのときのプレイリストと似てますね〜?」を突きつけてきます。ひええ。

プレイリストの詳細表示では、楽曲のKEY/キャメロットホイール表記と、楽曲間のキーの関係性を表示します。
conflict(不協和)、Good(協和)、energy boost(全音上下)、Perfect(同一キー)などが表示されます。
私は DJ や生演奏において、一切キーの概念を使わないのですが、可視化すると結果として、良かったりそうでなかったりするので面白いなと思ったのでつけました。
また、『AI アシスタント分析用出力』という機能をつけています。
これはこのページの出力データを JSON 化して、さらにプロ DJ として振る舞うプロンプトを付記することで、
ChatGPT や Gemini などにコピペで貼り付けるだけで、
客観的にみてどのようなセットリストか?の意見をもらうことができます。
まあ、AI 様がゲームミュージックなんて聞いているわけないので的外れな意見もあろうかと思うのですが、なかなかに面白く気づきを得ることもあるので気に入っている機能です。
Affinity Analysis

特定の集計期間において、プレイリストへの登場回数ベースで良く使う曲を抽出することができます。
指定期間は1ヶ月、3ヶ月、6ヶ月、1年、2年、3年、5年。
TOP n=〜50 は可変スライドになっていて、内訳分析することができます。
「こいつめちゃくちゃ◯◯好きだな・・・。」がみて取れますね!
Library Health

重複してるんじゃないの?みたいな曲を探したり、どのプレイリストにも含まれない曲を抽出します。
北斗無双はたぶん、自家録音と後から出た本家サウンドトラックの2曲が登録されているのだろうな・・。
このページはあまり使っていないので、機能追加していきたい。
プロンプトとして使えそうな README.md
# Rekordbox Analyzer
Rekordbox Analyzer は、rekordbox (v6以降) のデータベース(`master.db`)を直接読み込み、DJ活動の傾向やプレイリストの内容を高度に分析・可視化する Streamlit ベースの Webアプリケーションです。本ドキュメントは、ユーザー向けの操作解説書および開発者向けのシステム設計書を兼ねています。
---
## システム設計 (Architecture & Design)
### システム構成
- **Frontend / UI Layer**: [Streamlit](https://streamlit.io/)
- **Backend / Logic Layer**: Python, Pandas
- **Data Access**: `pyrekordbox` (SQLite / SQLCipher を介した暗号化DBアクセス)
- **Data Visualization**: Plotly Express
### アーキテクチャ
アプリケーションは UI レイヤーとビジネスロジックレイヤーに完全に分離されて設計されています。
- **`app.py` (UI Layer)**: Streamlit による画面描画、タブやサイドバー等のコンポーネント配置、およびユーザーインタラクションの受付を担当します。
- **`analyzer.py` (Data Layer)**: `Rekordbox6Database` を利用した DB 接続の確立と、UIからの要求に応じた SQL クエリの動的生成・実行、Pandas DataFrame の整形を担当します。
### 除外・フィルタリング要件 (ビジネスロジック)
本システムでは、精度の高い「DJセット」としての分析を行うため、意図的に以下のデータを集計対象外とするフィルタリングロジックが組み込まれています。
1. **巨大なプレイリスト**: 登録曲数が「**60曲**」を超えるプレイリストは、現場向けのセットリストではなく「作業用・ストック用」とみなし分析から除外。
2. **BPM未解析/エラー曲**: `BPM = 0` の楽曲は解析ノイズとなるため統計から除外。
3. **特殊フォルダ**: `Name = 'ROOT'` や `Attribute != 0` のシステム要素やフォルダ要素を除外。
4. **特異日**: `2020-04` に作成されたプレイリスト(Rekordbox v5→v6 移行に伴う大量自動作成のノイズデータ)をピンポイントで除外。
---
## 機能解説 (Features & Usage)
サイドバーから「年単位」「月単位」の集計ベースを切り替えることで、各タブでの表示粒度が連動して変化します。
### 1. 📊 Dashboard (ダッシュボード)
システム全体の規模と、活動量の推移を鳥瞰するトップ画面です。
- **累計メトリクス**: ライブラリ内の総曲数、作られたDJセット(総プレイリスト数)。
- **アクティビティ推移**: プレイリスト作成数のヒストグラム(年別/月別)。
### 2. 📈 Trend Analysis (トレンド分析)
長期的なプレイスタイルの変遷を分析します。
- **BPM推移**: 期間ごとの平均BPMを折れ線グラフで表示し、自分のBPMトレンドの変化をトレース。
- **楽曲追加推移**: ライブラリに新しく楽曲が追加された時期を可視化し、仕入れの波を把握。
- **ジャンル構成推移**: 上位10ジャンルのシェアの変化を時系列の積み上げ棒グラフで可視化し、音楽の好みの変遷を確認。
### 3. 🔍 Drill Down (ドリルダウン)
特定の期間(年月・年)にフォーカスし、その期間にどのような曲を仕込んでいたかを深掘りします。
- **期間選択**: セレクトボックスから分析対象の期間を選択。
- **サマリー**: 作成されたプレイリスト一覧表と、追加された楽曲の総数。
- **期間内アナリティクス**:
- **👑 ヘビロテ曲 Top10**: その期間で最も多くプレイリストに登録された曲。
- **⏱️ BPM分布**: ヒストグラムによるBPMの偏り分析。
- **🎸 ジャンル比率**: 円グラフによるジャンル分布。
### 4. 🎵 Playlist Detail (シングル・プレイリスト分析)
単一のプレイリストを詳細に分析し、DJセットとしての流れや完成度を評価します。
- **基本メトリクス**: 楽曲数、平均BPM、BPMレンジ。
- **最高近似プレイリスト**: 最も選曲が重複している過去のプレイリストと、その重複率 (%) を表示。
- **🔄 セットリストの流れ**:
- **BPMフロー**: 曲順ごとのBPM遷移グラフ。
- **キー相関図 (Camelot Wheel)**: 前の曲から次の曲へのキー(調)の相性を自動判定し、「Perfect (同じ形)」「Good (隣接)」「Energy Boost (+2の盛り上げ)」「Conflict (注意)」に分類して表示。現場でのミキシングの参考になります。
- **📊 統計データ**: ジャンル比率、年代(リリース年)分布、アーティスト偏倚度をグラフ化。
- **🤝 近似プレイリストリストアップ**: 他のプレイリストとの曲目重複度をパーセンテージ付き(共通〇 曲 / 全〇曲 - 〇%)で表示し、アコーディオンを開くことで相手側プレイリストの展開を比較確認できます。
- **🤖 AI アシスタント連携**: これらの高度な分析データ(JSON)と、プロンプトをワンクリックでコピーし、Gemini等に「セットリストの改善提案」を依頼できます。
### 5. 🤝 Affinity Analysis (アフィニティ / ヘビロテ分析)
現在から特定の期間を遡って、自分の「DJとしての軸になっている曲」をあぶり出します。
- **集計対象期間**: **1ヶ月**から**5年**までの期間選択。
- **表示件数**: 10件刻みで Top 50 まで表示調整。
- **ランキング**: 登場回数をヒートマップカラーの棒グラフおよびデータ一覧表で表示。直近の現場で確実にウケている鉄板曲を把握可能。
### 6. 🧹 Library Health (ライブラリ・ヘルス)
DJライブラリの健康状態(散らかり具合)をチェックするメンテナンス機能です。
- **👻 孤立曲リスト**: ダウンロードしただけで、どのプレイリスト(60曲以下)にも登録されていない楽曲。
- **👯 重複候補**: 「タイトル」と「アーティスト」が完全一致しつつ、異なるファイルパスで重複登録・インポートされている可能性の高い楽曲。
---
## 開発環境とセットアップ構築
### 1. 動作環境・必須要件
- **OS**: macOS (Rekordbox の `master.db` が Mac のディレクトリ構造上に存在することが前提)
- **Python**: 3.8 ~ 3.14 (3.14環境で動作確認済み)
### 2. SQLite / SQLCipher の導入 (Homebrew)
Rekordbox 6以降のデータベースは暗号化されているため、復号化モジュールが必要です。
```bash
brew install sqlcipher
```
### 3. Python 仮想環境の構築
プロジェクトルートにて仮想環境を構築し、依存パッケージをインストールします。
```bash
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
##### requirements.txt
streamlit
pandas
plotly
pyrekordbox
sqlcipher3-wheels
python-dotenv
### 4. アプリケーションの起動
```bash
./start.sh
```
※ `start.sh` は内部で `streamlit run app.py` を実行するスクリプトです。ターミナルに出力される `Local URL` にブラウザでアクセスしてください。
### 特記事項
- アプリ起動時のログに「Rekordbox is running!」等の警告が出ることがありますが、本ツールは `master.db` に **読み取り専用** でアクセスするため、Rekordbox 本体の動作を阻害することはありません。
- 最新の変更(プレイリストの追加等)を本ツールに反映させるには、Rekordbox側で保存処理(またはアプリ終了)が行われている必要があります。
これをそのまま生成 AI に読ませるとアナタだけのツールを作ってくれると思います。
Google の Antigravity すごいなあ・・・
