MacBook Pro の内蔵 SSD の容量がいっぱいになってきたので NAS にオリジナルを移動し、そのバックアップとして新しく買った外付け SSD を使うことにした。NAS 上のフォルダと MacBook Pro に接続した外付け HDD 上のフォルダを同期するのに今回 FreeFileSync を使うことにした。
ちょっと古風な UI だけれど良くできている。操作として
としっかり2段階になっているのが好き。このあたり2003年からリモートホストとの同期に愛用している Unison File Synchronizer と同じ考え方なのでしっくりくる。
同期処理でのファイル削除時にバックアップを作成する設定にもしておける。この設定をしておくことで間違えた時にリカバリもできる。
Unison をリモートホストでも実行できる場合の双方向ファイル同期には Unison を、ローカルホストだけで双方向同期をさせる必要がある場合は FreeFileSync という形で今後使い分けよう(ちなみに Android では FolderSync Pro)。
[ Mac アプリケーション ] [ ファイル同期 ]
双方向ファイル同期化ツール Unison File Synchronizer、 Mac で使っているのが Unison 2.48.6 の GUI 版なのだけれど、古いせいか macOS Catalina だと「Install command-line tool」 が機能しない(/usr/bin にインストールしようとしているからかな)。
macOS 上で text UI 版がちょっと使いたい & GUI 版も新しいのにしたいなと思ってビルドとかした。
2021年01月05日時点での安定版は 2.51.3。
$ brew install unison
で text UI 版の「unison version 2.51.3 (ocaml 4.10.0)」が入る。GUI 版は入らない。
Unison 最新版のバイナリ配布が見当たらないのでビルドしてみる。 Xcode が必要。
$ xcode-select --install
で入る Command Line Tools だけだと text UI 版の Unison しかビルドできないので App Store から Xcode をインストールした。
OCaml は Homebrew ので済ます。
$ brew install ocaml
今日時点で入るのは OCaml 4.10.0 だ。次に Unison 2.51.3 をビルドする。
$ cd ~/tmp $ curl -OL https://github.com/bcpierce00/unison/archive/v2.51.3.tar.gz $ tar zxvf v2.51.3.tar.gz $ cd unison-2.51.3 $ make all
make だけだと text UI 版しかビルドされないので make all してみた。が残念 GUI 版はエラーで途中で止まった。今はうまくビルドできないのかもしれない。
諦めて make で text UI 版だけバイナリを得ることにした。 make 後
$ ./src/unison -version
で実行できることを確認。 ./src/unison を適当なところにコピーしておく(これなら brew install unison で十分だった)。
ローカルホストの Unison とリモートホストの Unison のバージョンが合っていないと同期できないのでリモートホスト側 (FreeBSD 9.1-RELEASE-p24) でも同じバージョンのものをビルドする。さくらのレンタルサーバ プレミアムで root 権限はないのでユーザー権限にて。
まずは OCaml。最近の OCaml は opam というのでインストールして使うのが流儀らしい。 opam をインストール。
$ cd ~/tmp $ mkdir bin $ curl -OL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh $ BINDIR=$HOME/tmp/bin sh install.sh
リモートホストの環境に合ったプレビルドが無いとエラーが出て install.sh ではインストールできず。
OCaml の前に遡って opam のビルドをする。
$ cd ~/tmp $ curl -OL https://github.com/ocaml/opam/archive/2.0.7.tar.gz $ tar zxvf 2.0.7 $ cd opam-2.0.7 $ gmake cold CONFIGURE_ARGS="--prefix ~/tmp/opam" $ gmake cold-install
ビルドできた。opam を初期化する。
$ PATH=$HOME/tmp/opam/bin:$PATH $ opam init
gpatch が無いとエラーで止まった。 patch へのシンボリックリンクで gpatch を作ってイケるかなと思ったけど今度は別のエラーで止まる。うーん。 opam で OCaml をインストールするのは断念。
OCaml のドキュメントを読んだら今まで通り configure して make も普通にできるじゃない。
$ curl -OL https://github.com/ocaml/ocaml/archive/4.10.0.tar.gz $ tar zxvf 4.10.0.tar.gz $ cd ocaml-4.10.0 $ ./configure --prefix $HOME/tmp $ gmake $ gmake install
次に Unison 2.51.3 をビルドする。出来上がったバイナリは今使っている Unison 2.48.3 と併用できるように別のディレクトリへ。
$ cd ~/tmp $ curl -OL https://github.com/bcpierce00/unison/archive/v2.51.3.tar.gz $ tar zxvf v2.51.3.tar.gz $ cd unison-2.51.3 $ PATH=$PATH:$HOME/tmp/bin $ gmake $ ./unison -version $ mkdir -p $HOME/local/unison-2.51.3/bin $ cp -a src/unison $HOME/local/unison-2.51.3/bin
ノートテキストファイルは全文検索できるよう Google ドライブと同期しておきたい。それと同時に他の PC との同期のため Dropbox とも同期しておきたい。しかしセキュリティを考えてクラウド同期サービスは使いたくない。
Google の「バックアップと同期」アプリと Dropbox アプリの両方を動かしてそれぞれローカルフォルダと動機している MacBook Pro 上で、そのローカルフォルダ間のファイル同期を実行してみることにした。
使うのは普段リモートホストとの同期に使用している Unison File Synchronizer。最近になって repeat = watch というファイル更新をモニタリングするオプションを知ったので試してみる。
ファイル更新モニタリングで使う Unison 標準の unison-fsmonitor は macOS では使えないらしいので代替の https://github.com/autozimu/unison-fsmonitor をインストールする。
$ brew install autozimu/homebrew-formulas/unison-fsmonitor
Unison の同期用のプロファイルは以下のような感じ。
root = /Users/naney/Google ドライブ/folderA root = /Users/naney/Dropbox/folderA times = true repeat = watch silent = true logfile = /Users/naney/var/log/unison.log
(実際には path や ignore をもう少し指定している。)
repeat = watch と silent = true をいったんコメントアウトして
$ unison <プロファイル名>
で手動同期し、期待通りの同期ができているか確認する。問題無ければ
$ nohup unison <プロファイル名> &
で監視を開始する。
動作確認した感じでは
と安定して使える感じだ。
コンフリクトが起きた場合はスキップされたままになるので、たまに手動で Unison を実行して確認した方が良さそうではある。
[ ノート・日記はテキストファイルに ]
DAT#photography
— Naney (@Naney) March 2, 2021
RICOH GR III #GR #GRIII #GR3 pic.twitter.com/FOtwGxa1dt
他人に見られる心配なしに書きたいノートテキストファイルを Google ドライブでバックアップしておくのに Cryptomator を使うことにした。
Cryptomator アプリケーションと macOS でファイルシステムとしてマウントするための macFUSE をインストール。
Google の「バックアップと同期」で同期しているフォルダ内に Cryptomator アプリケーションで vault を作成する。 vault を解錠するとファイルシステムとしてマウントされるので、そこでファイルを読み書きする。 vault フォルダ側には暗号化されたファイルが保存され「バックアップと同期」でバックアップされる。vault 側は直接いじらないようにする。
という理由からマウントしたフォルダ上で直接ファイルを読み書きせず、別の場所にあるノートフォルダを Unison でバックアップを有効にしつつリアルタイム同期することにした。
root = /Volumes/マウントポイント名 root = /path/to/ノードフォルダ times = true rsrc = false repeat = watch silent = true backup = Name * backuplocation = central maxbackups = 60 backupdir = /path/to/バックアップフォルダ
Cryptomator のファイルシステムに対して Unison が属性のコピーをしようとして失敗するので rsrc = false 指定が必要だ。
[ ノート・日記はテキストファイルに ]
Google 日本語入力に登録している単語を Google スプレッドシートで管理して複数の Mac で揃えようと思ったけれどやはり面倒だった。 Dropbox で同期することにしよう。
更新頻度が多くないので辞書を編集したら手動で同期することにし、 ~/Library/Application Support/Google/JapaneseInput/user_dictionary.db を Dropbox フォルダ上に同期する Unison プロファイルを作成した。
Android デバイス含め日本語入力辞書の同期をするために ATOK にするかなあと結構考えたのだが、 ATOK for Android [Professional] を使うには ATOK Passport プレミアムが必要だそう。 7,920円/年 (年間プラン)払うのは厳しいので見送り。
2022年2月16日からさくらのレンタルサーバで新サーバの提供が始まった。「SSD化をはじめとした機材の刷新を行い、表示速度および処理能力が従来の最大5倍」になったという。
IP アドレスが変更になるので提供されている新サーバへの移行ツールは使わず、今日のメンテナンスによるサーバ移設に任せることにした。
OS アップデートを含むサーバ移設につき、ユーザー自身でビルドしたものは動かなくなる場合があるとのこと。自分でビルドした Perl 上にモジュールをインストールしその上でこの nDiki のスクリプトを動かしているので、メンテナンス明けに動かなくなっているかも。その場合は新サーバ上でビルドし直しだなと思っていたのだが、幸い問題なく動いていた。Unison もそのまま使えているし、すんなり移行できたようだ。
良かった良かった。
Obsidian を使っていて「より小さい単位で考えを構造化したい」と思うことがあるのでサブで Logseq を使ってみることにした。
以下のように使い分けることにする。
メインの Obsidian vault の中に Logseq graph を置くのは過去うまくいかなかったのでやらない (名前の衝突・意図しない更新と、それを避けるための心理的負担)。
Logseq graph 専用の Obsidian vault を作って Obsidian Sync でデバイス間同期をすることにした。 Android 版の Logseq はまだ Android 版の Logseq アプリは正式版がまだなので、スマートフォンでノートを読む場合は Obsidian Mobile を使う。
標準機能で Logseq graph をエクスポートしても、Logseq の用途からして作成者以外には理解しにくい静的サイトになりがち。理解しやすいサイトにできたとしても Google がトップページ以外インデックスしてくれないのでそこは頑張らない。
公開したい部分は Logseq 固有の記法は使わない形で Random Thoughts として1ページにまとめて書くことにし、Obsidian Publish サイト内に置いて公開してみることにした。日付見出しをつけて Obsidian で書いて公開していた既存の Random Thoughts は Random Thoughts Journal に改名した。フォルダ間は Unison で双方向同期で。
これでしばらくやってみる。
Obsidian のサブとして Logseq を使い始めた。過去うまくいかなかったのでメインの Obsidian vault の中に Logseq graph を置くのはやめて
という形でスタートしたのだけれど、やっぱりこれは面倒で1つにまとめたくなった。
かといって Obsidian vault フォルダ = Logseq graph フォルダにすると、フォルダ階層がごちゃごちゃになってしまう。
Logseq は graph フォルダがシンボリックリンクでも OK なので、空のフォルダを作り
のようにシンボリックリンクを作って骨組みだけの Logseq graph フォルダ化した。
Obsidian Publish で公開するページは Outlines/ 階層に置きたいのでこのような形にした。あとは Obsidian Sync したくないデバイスローカルなフォルダも Logseq/ ではないフォルダへのシンボリックリンクにする。
1つにまとめると名前の衝突問題が再発生するんだけれどこれでやってみる。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。