Music.appとrekordboxのデータを別マシンに同期させる

きっかけ

めんどくさい理由を箇条書きにする。

  • 基本PCDJ、ソフトはrekordboxとTraktor
    • Traktorはほぼ使っていない
    • と言うかTraktorの設定データはiCloud Driveで同期しちゃえばいいんじゃね?
  • 楽曲ライブラリはiTunes(現:Musicアプリ)で全て管理されている
  • rekordboxは内蔵ストレージ管理
    • 外部だと取り回しがめんどくさ過ぎる
    • ふとした時に外れたりしたら死ぬ、いや死にかけた
    • そんな事もあり内蔵ストレージに全面移管した
  • rekordboxのUSBメモリエクスポートは「現場緊急対応用」として準備したい
    • でも曲数が多すぎてCDJ-350で読み込まないことがしばしば。

やりたいことは別マシンとのライブラリ同期、メインマシンを持ち出してDJするのも良いのだけれども、たまにDJとVJどっちもやると言う事もあるので予備マシンがあった方が良い。
条件としては以下の通り

  1. 外部ストレージを使わない
    • 音楽だけしか同期させないので内部ストレージでも管理可能(250GB以上必須)
  2. メインマシン側とサブマシン側でrekordboxデータベースの相互運用
    • メイン側で作ってサブ側に反映
    • サブ側を持ち出して使用楽曲情報の同期
  3. 最悪ライブラリからUSBエクスポートで対応
    • ライブラリ情報の更新は出来ないがrekordbox上でデータを使うことは出来る

と言うことで、rsyncを使ったrekordboxのデータ同期を行う事にした。

同期をする前の準備と確認

一応、フルデータ転送になるので、同期前の確認と準備をする。やらかすと全て使えなくなるか、もしくは歯欠けな感じで使い勝手が悪くなってしまうので。

今回使ったマシン達

  • サブマシン: MacBook Air(’11,mid2012)
    • 今回の為にSSDを換装、128GB→500GBにした
    • 2012年のマシンだがいまだ現役、Ivy-Bridgeは伊達じゃない
    • Catalina対応機種なので最新状態にアップデート済
      • でもBig Surには非対応、限界も近い
    • Catalinaはクソ
  • メインマシン: MacBook Pro(‘13,2018)
    • メインなので全部のデータが入ってる、整理したい
    • Catalinaのまま運用中、Big Surはこの当時入れてない
    • Catalinaはクソ
  • rekordbox 5.8.5.1 and 6.4.2
    • これを検証している間に6が出てた
    • 6もライブラリの場所が同じなのでそのまま通用する

接続環境はWi-Fiでも良いけれどもかなり時間が掛かるので、安定してかつ高速に終わらせたいなら有線LAN一択。

データの内容と保存場所

今回のケースに置いて必要なデータの場所を調査。

rekordbox データベース~/Library/Pioneer/rekordbox
rekordbox djなどのアプリケーション設定~/Library/Application Support/Pioneer/rekordbox
補足:rekordbox djのアプリケーション設定はほぼ必要ないと思われる

rekordboxデータベースのPathの確認は ファイル > 環境設定 > インポートされているライブラリ に書かれている場所になる。もっと言うと、その配下になる。

rekordbox データベースの内容

ディレクトリの画像よりコマンドで見た方が早い。

 ~ % ls -al ~/Library/Pioneer/rekordbox 
total 222200
drwxr-xr-x  23 user  staff       736  3 23 03:21 .
drwxr-xr-x   4 user  staff       128  3 18 08:23 ..
-rw-r--r--   1 user  staff       140 11 12 20:27 DEVSETTING.DAT
-rwxrwxrwx   1 user  staff    141252  3 21 05:12 ExtData.backup.edb
-rwxrwxrwx   1 user  staff    141252  3 21 05:12 ExtData.backup2.edb
-rwxrwxrwx   1 user  staff    141252  3 21 05:12 ExtData.backup3.edb
-rwxrwxrwx   1 user  staff    141252  3 21 05:12 ExtData.edb
drwxr-xr-x   4 user  staff       128  3 18 05:29 ExtDriveBackup
-rw-r--r--   1 user  staff       148  3 22 02:26 MYSETTING.DAT
-rw-r--r--   1 user  staff       148  3 22 02:26 MYSETTING2.DAT
drwxr-xr-x   4 user  staff       128  3 18 06:21 PIONEER
-rw-r--r--   1 user  staff       232 12 26  2018 RBFLTR.DAT
-rw-r--r--   1 user  staff        82  3 23 02:04 automixPlaylist.xml
-rwxrwxrwx   1 user  staff  26237452  3 22 23:55 datafile.backup.edb
-rwxrwxrwx   1 user  staff  26237452  3 22 06:41 datafile.backup2.edb
-rwxrwxrwx   1 user  staff  26237452  3 22 03:17 datafile.backup3.edb
-rwxrwxrwx   1 user  staff  26237452  3 22 23:55 datafile.edb
-rw-r--r--   1 user  staff       160 10 27  2018 djprofile.nxs
-rw-r--r--   1 user  staff     45604  3 23 03:21 masterPlaylists3.xml
-rw-r--r--   1 user  staff   4177920  3 22 23:48 networkAnalyze.db
-rw-r--r--   1 user  staff     39188  3 23 03:19 playlists3.sync
-rw-r--r--   1 user  staff        99  3 23 00:18 rekordbox_lyric.log
-rw-r--r--   1 user  staff      4310  3 21 22:29 smartlist.xml
 ~ % ls -al ~/Library/Pioneer/rekordbox/PIONEER 
total 0
drwxr-xr-x    4 user  staff   128  3 18 06:21 .
drwxr-xr-x   23 user  staff   736  3 23 03:21 ..
drwxr-xr-x   59 user  staff  1888  3 18 06:44 Artwork
drwxr-xr-x  130 user  staff  4160  3 18 05:56 USBAN

rekordbox アプリケーション設定

アプリケーション設定では使ったMIDIコントローラや連携しているアプリケーションの設定値が保存されている。この同期は常時必要ないと思うし、マッピングデータならCSVエクスポートができるので同期させなくても良い。

Music.app(旧iTunes)のライブラリデータ

CatalinaではiTunesのライブラリ情報を旧データとして扱って読み取って再構築される。なので更新されるのは新しく作成されるMusic Library.musiclibrary内でDB管理される。どうしてそうしちゃったのかね。

自分の場合 ~/Music/iTunes とミュージックディレクトリの直下にiTunesディレクトリを置いているので、~/Music/Music/ となるのが気持ち悪いと思い、全てiTunes配下に保存するよう初期設定している。よって、同期させるのは ~/Music/iTunes だけとなる。

これAppleさんマジでやらかし仕様だと思うんだけど。

 ~ % ls -al ~/Music/iTunes
drwxr-xr-x  10 user  staff       320  3 17 19:27 .
drwxrwxr-x+ 19 user  staff       608  3 23 02:06 ..
-rw-r--r--@  1 user  staff     10244  3 22 09:11 .DS_Store
drwxr-xr-x   3 user  staff        96  3 17 18:09 Album Artwork
drwxr-xr-x@  4 user  staff       128  3 17 19:30 Music
-rwxrwxrwx@  1 user  staff     98304  3 17 17:52 iTunes Library Extras.itdb
-rwxrwxrwx@  1 user  staff    684032  8 13  2019 iTunes Library Genius.itdb
-rwxrwxrwx@  1 user  staff  12791718  3 17 17:52 iTunes Library.itl
-rw-r--r--@  1 user  staff  44555337  3 17 17:52 iTunes Library.xml
drwxrwxrwx  14 user  staff       448  3 21 05:25 iTunes Media
 ~ %
 ~ % ls -al ~/Music/iTunes/Music/Music\ Library.musiclibrary 
total 108568
drwxr-xr-x@ 9 user  staff       288  3 23 00:18 .
drwxr-xr-x@ 4 user  staff       128  3 17 19:30 ..
-rw-r--r--@ 1 user  staff      4050  3 23 00:18 Application.musicdb
-rwxrwxrwx@ 1 user  staff    970752  3 22 23:32 Extras.itdb
-rwxrwxrwx@ 1 user  staff  39264256  3 22 05:43 Genius.itdb
-rw-r--r--  1 user  staff      1363  3 22 23:53 Library Preferences.musicdb
-rw-r--r--  1 user  staff  15321221  3 22 23:53 Library.musicdb
-rw-r--r--@ 1 user  staff       124  3 22 04:40 Preferences.plist
-rw-r--r--@ 1 user  staff         8  3 23 00:18 sentinel
 ~ % 

同期の準備

今回の同期では自動化を目的としていないので、rsyncの公開鍵認証などは割愛する。機会があったらするけれど、常に画面を見ながらやるので設定する必要がない。あと自動化でやらかした時が怖いからしない。

接続先のサブマシンへSSH接続できるようにする

  1.  > システム環境設定 > 共有 を開く
  2. チェック項目として存在する リモートログイン にチェックを入れる。
  3. アクセス許可を[次のユーザーのみ]で Administrators になっている事を確認

前提条件としては、サブマシンとメインマシンとで同じユーザー名かつ同じパスワードであること。理由としては、パーミッションやらなんやらで同じじゃないと変更が面倒臭いから。なお、SSH設定後のログインはホスト名では通らないので、表示されたIP直打ちになる。

ここまでで確認と準備は整ったので同期転送を行うことにする。
今回はrsyncを使ってメインマシン→サブマシンへのrekordboxデータ、及びiTunesのデータコピーを行う。
その際に使ったコマンドとそのオプションが以下の通り。

rsync -rlptDuv --log-file=~/`date +%Y%m%d-%H%M`.log --progress --checksum --partial --delete [メインマシンの転送したいディレクトリ] [サブマシンIP]:[サブマシンの転送先となるディレクトリ]

使ったオプションについての詳細。

オプション名内容
-avアーカイブモード(「-rlptgoD -no-H -no-A -no-X」相当)
各オプションをまとめて行うショートカットオプション
何も考えず完全ミラーリングをするならこれだけで良い
-rlptDuvn-r 指定ディレクトリ配下を全て対象とする
-l シンボリックリンクをそのままシンボリックリンクとしてコピー
-p パーミッションをそのままコピー
-t タイムスタンプをそのままコピー
-D –devices –specialsと同じ
–devicesでブロックデバイスをコピー
–specialsで名前付きパイプやFIFOなどの特殊ファイルをコピー
-u 転送先に既にファイルが存在し、転送先の方が新しかったら転送しない
-v コピーファイルの転送情報をターミナル出力
-n コマンドは実行するが反映はしないテスト実行用(やる時になったら外す)
--log-fileログファイルの出力先を指定、今回はユーザーディレクトリに直接出力
出力時にdateコマンドで当日の日付時間を生成してる
--progress転送の進行情報を詳細に出力
--checksumタイムスタンプが同じでもファイル内容に変更があった場合は更新対象
--partial転送中にフリーズなど止まってしまった場合に再開可能にする
--delete転送元に合わせて転送先のファイルを整理する(更新される)
rsyncのオプションはかなり多いのでこれで正解ではない。僕の上位互換の人がきっと最適な値を見せてくれる。

※オプションの -n は必ず設定しておき、実際に同期を行う際に外す。以下の実行結果は全て -n を外した状態で実施していることを前置きとする。

メインマシン→サブマシンへの同期

ルールとしては

  • 操作は全てメインマシン側で行う
  • 操作をする前にTimeMachineや直接バックアップなどを行っておく(マジで大事)
  • サブマシンのデータは変更があった場合のみ転送する

この3つのルールを基軸として以下の操作を行う。

Music.appのデータを全て同期

まずは根幹となる音楽データ(ライブラリとデータ)をコピーする。rekordboxのライブラリが失敗したとしても、元データがあればどうとでも出来る。同期転送にはおおよそ5時間程度を見込む。全ライブラリデータを送り込むのでそれだけ掛かる。
有線LANなら2〜3時間程度だと思われる。環境によりけり。

初回転送なら丸ごと送り込むので、オプションは -av となる

~ % rsync -av --log-file=~/iTunes-`date +%Y%m%d-%H%M`.log --progress --checksum --partial --delete /Users/user/Music/iTunes/ [サブマシンIP]:/Users/user/Music/iTunes/

2回目以降は以下のコマンドで通る、ほぼ同じだけど。

~ % rsync -rlptDuv --log-file=~/iTunes-`date +%Y%m%d-%H%M`.log --progress --checksum --partial --delete /Users/user/Music/iTunes/ [サブマシンIP]:/Users/user/Music/iTunes/

重要: 転送完了後のライブラリ再読み込み

転送完了後、サブマシン側でmusicアプリを開いてもライブラリは反映されない。
なので、Optionキーを押しながらmusicアプリを起動してライブラリ選択画面を出す。そこで転送したMusic Library.musiclibraryを指定してライブラリを強制的に再読み込みする事によって反映される。

また、ライブラリに楽曲は反映されてもアルバムアートは反映されない事象が発生すると思う(自分の環境では発生している)。この状態でもrekordbox側ではちゃんとアルバムアートは表示されるので問題ないとする。

とは言え、マジで、なんなの、この仕様。

rekordboxのDBデータを全て同期

Music.appと同じ様にrekordboxのライブラリデータも同期させる。コマンドは同じだがパスが異なるので要注意。こっちは小分けされたファイル数が多いので、1時間程度を見込む。

~ % rsync -av --log-file=~/rekordbox-`date +%Y%m%d-%H%M`.log --progress --checksum --partial --delete /Users/user/Library/Pioneer/ [サブマシンIP]:/Users/user/Library/Pioneer/

こちらも2回目以降は以下のコマンドで通る。

~ % rsync -rlptDuv --log-file=~/rekordbox-`date +%Y%m%d-%H%M`.log --progress --checksum --partial --delete /Users/user/Library/Pioneer/ [サブマシンIP]:/Users/user/Library/Pioneer/

サブマシン→メインマシンへの同期

あくまでサブマシンはプレイ用であり、音源の追加・削除はしない運用。なので、使った楽曲とかの使用履歴とかを反映できればそれで良い。転送は逆方向にすれば良い。

Music.appのデータを全て同期

ライブラリのデータを上書きすることになるので、ここは非推奨
rekordbox側で音源ファイルのID3タグを更新する設定をしているのであれば、まず最初にMusic.appのライブラリから反映させる。特にしていないのであればここの手順は省く。

~ % rsync -rlptDuv --log-file=~/iTunes-`date +%Y%m%d-%H%M`.log --progress --checksum [サブマシンIP]:/Users/user/Music/iTunes/ /Users/user/Music/iTunes/

rekordboxのDBデータを全て同期

楽曲使用履歴を反映させるために同期させる。メインマシン上のデータベースを上書きするので、事前にCUE設定やプレイリストを作成している場合は消えてしまうことをに注意。

~ % rsync -rlptDuv --log-file=~/rekordbox-`date +%Y%m%d-%H%M`.log --progress --checksum [サブマシンIP]:/Users/user/Library/Pioneer/ /Users/user/Library/Pioneer/

とりあえずこれで相互運用は可能となった。どっちも時間が掛かるのでDJをしない空き時間とかにのんびりやると良いと思う。

終わりに

誰も求めちゃいないだろうrsyncでのマシン間同期の記事を書いたけれども、macOSよりWindowsの方を求めてる人が多いだろうなぁと思った。Windowsの場合は robocopy コマンドがあるのでそっちを使えば同じことが出来る。コマンドの詳細はGoogleさんに聞いて欲しい。

にしても、Catalina以降から音楽の管理が本当に面倒臭くなった。とりあえずAppleさんは楽曲一覧表示にした時にジャケットを表示する機能を戻して下さい。かなりアレ重宝してたので。