新しいMacを手に入れて色々設定してましたが、 その際に mackup を使ってアプリの設定等を移行したら結構便利だったのでそれについて。
mackup
mackup
はmacOSでアプリの設定ファイルなどを他のマシンと共有することなどを
目的にしたコマンドです。
インストールはHomebrewで
$ brew install mackup
またはpip
でもインストールできます。
$ pip install --upgrade mackup
使い方は
$ mackup backup
とすることでアプリの設定ファイルなどが指定の場所にコピーされ、 元の場所にはシンボリックリンクが作られます。
例えばBetterTouchToolとかだと
- ~Library/Preferences/com.hegenberg.BetterTouchTool.plist
- ~Library/Application Support/BetterTouchTool/btt_data_store.v2-shm
- ~Library/Application Support/BetterTouchTool/btt_data_store.v2
- ~Library/Application Support/BetterTouchTool/btt_data_store.v2-wal
- ~Library/Application Support/BetterTouchTool/bttdata2
といったファイルがコピーされます。
$ mackup uninstall
とするとシンボリックリンクが削除され、コピーされたファイルが元の位置にコピーされます。 この際も一度コピーしたものは残るのでこれをバックアップとして使ったりすることも可能です。
コピーされたファイルを他のマシンに持っていって、
$ mackup restore
を行うとこれらのファイルへのシンボリックリンクが各アプリの設定場所に作られるので 設定の移行ができることになります。
デフォルトではDropboxのトップディレクトリにMackupというディレクトリを作って これらのコピーを入れるようになります。
なのでそのままDropboxで同期することで他のマシンと設定を常にSyncする、というのがこのコマンドの基本的な思想です。
場所を変えるには~/.mackup.cfgという設定ファイルを作って
[storage]
engine = file_system
path = Documents
directory = Mackup
みたいな設定を書きます。これで~/Documents/Mackupがトップディレクトリになります。
最初これ便利だな、と思って使い始めたんですが、 アプリの中には常時設定ファイルを書き換え続ける様なものもあって、 それのせいでDropboxが常に同期実行中状態になりました。
ちょっとやり過ぎ感があるのでそういったアプリがある場合には 置く場所はDropbox以外にしたほうが良いと思います。
設定ファイルには、[storage]以外に、 [applications_to_sync]と[applications_to_ignore]という項目が書けて、 名前の通りmackupで扱うアプリを指定したり、除外アプリを指定することが出来ます。
何も書かないとすべての可能なアプリを扱うことになり、 applications_to_syncがあればそれだけ、 applications_to_ignoreがあればそのアプリは除外されます。
対応しているアプリは
$ mackup list
で見ることが出来ます。bettertouchtool、karabinerといったものから、 bash、vim、zshといったものもあってこれらは HOMEにある~/.bashrcなどをコピーする事になります。
使ってるアプリで入ってないものがあるかもしれませんが、 対応アプリは今でもどんどん追加されてる感じですし、 必要なら自分でPull Requestを出しても良いと思います。
Karabinerなど一部のファイルを新規作成してしまうアプリについて
Karabinerなどの一部のアプリは、設定ファイルを更新する際、 新規ファイルを作って置き換える様な作業をします。
これをされるとシンボリックリンクが切れるので常時同期状態を作ることは難しくなります。
ちょっとどれがそういった動きをするか確認してませんし、確認するの結構面倒ですが リンクを使って管理したい場合にはちょっと注意が必要です。
dotfilesなどを使ってるときの注意
dotfiles
で.bashrcなどを管理して、さらに別の場所にインストールしてシンボリックリンクを貼る、
みたいな設定をしてる場合にはちょっと注意が必要で、
mackup
をしてしまうと一度mackupのシンボリックになり、uninstall
すると
実体そのものが~/.bashrcに作られるので元のdotfilesとのリンクが切れてしまいます。
なので安易にmackup backup
しないで
ちゃんと
必要なものだけapplications_to_sync
で指定するか
[applications_to_ignore]
bash
vim
zsh
などとdotfilesで管理しているものをちゃんと除外しておく必要があります。
mackupを使って新しいMacへ設定を移行する
mackupの設定ファイルはこんな感じ。
~/tmpに一時的にMackupディレクトリを作ってコピーを作ります。
applications_to_syncを指定してるので applications_to_ignoreは意味ないのですが とりあえずdotfilesで扱ってるものを明示するために書いてある感じです。
この設定を使って、まず古いMacで
$ mackup backup
$ mackup uninstall
を行います。すぐにuninstall
するのはこのバックアップディレクトリが一時的なもので
面倒なことにならないようにするため戻しています。
これで~/tmp/Mackupができるので、これを新しいMacにコピー。
新しいMac側ではHomebrewでのインストールとかアプリのインストールとかを一通り行います。 (アプリを後から入れると設定ファイルとかが新規上書きされる可能性があるものもあるので なるべく先に全部入れる。)
Mackupディレクトリをコピーしてきて~/tmp/Mackupに置きます。
そして
$ mackup restore
$ mackup uninstall
これで通常のファイルが各設定ファイルの場所に置かれることになります。
これで必要なアプリの設定だけきれいに新しいMacに移行することが出来ます。
macOS機能の移行ツールなどもありますが マシンが色々変わった際には余計なものは一度クリーンにしたい、ということもあるので 必要なものをきっちりと確認して移行できるこの方法は 結構簡単ですし良いと思います。
~/Documentsとかの下にMackupを作ってuninstall
しないで
そのままにしておく、というのも場合によっては良いかもしれません。
その場合には上に書いたようなファイルを新規作成してしまうアプリをきちんと 確認する必要はあると思いますが。