Windows 上で作成・更新したファイルをサクッと Linux 上に反映させるのに、やっぱり Unison File Synchronizer を使うことにした。Windows 上の Unison から SSH 経由で Linux 上と同期させる構成ってしたことなかったな。ちょっと調べつつ設定。
Unison-2.40.102.zip をダウンロードしてきて C:\Uers\Naney\local\Unison-2.40.102 として展開。テキスト版(CLI 版)を使いやすいように unison.exe という名前に変える。
SSH 経由の接続については PuTTY についている Plink を使うことにした。OpenSSH とはちょっと違うので下記のようにバッチファイル C:\Uers\Naney\local\Unison-2.40.102\plinkunison.bat を作る。
@c:\Users\Naney\local\PuTTY\plink.exe -l naney -ssh remote.example.com unison -server
同期先のホスト remote.example.com にアカウント naney で SSH 接続して unison をサーバとして起動するというバッチファイル。
次に Unison 同期設定を書いたプロファイルファイル c:\Users\Naney\.unison\test.prf を作る(テスト用)。内容は以下。
root = c:\Users\Naney\unisontest root = ssh://naney@remote.example.com/home/naney/unisontest sshcmd=c:\Users\Naney\local\Unison-2.40.102\plinkunison.bat times = true fastcheck = yes
双方の unisontest ディレクトリを同期する設定になってる。
最新の OCaml (Unison のビルドに必要)と Unison を取ってくる。
wget http://caml.inria.fr/pub/distrib/ocaml-4.00/ocaml-4.00.1.tar.gz wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.40.102.tar.gz
あとは以前の インストール手順 と同じ流れでインストール。
Windows のコマンドプロンプトから
unison test
で同期できることを確認。
あとは実際の同期したいディレクトリのペアにあったプロファイルファイルを作っていけば OK。
昨日 Linux から AirMac Time Capsule をマウントできるようになったので次はファイルの双方向同期の設定。AirMac Time Capsule の共有ディスク上に写真を置いて家族共有するのだけれど、AirMac Time Capsule にしかファイルが無い状態は当然避けたいので、ローカルディレクトリとファイル同期しておく。
OS X 用の良さそげな双方向ファイル同期アプリが無いかなと探していたんだけれど、これっというのが無いので結局 Linux や FreeBSD 上で長年使っている Unison File Synchronizer を使うことにした。 OS X だといちおう GUI 版もある。Unison はメンテが止まるかなーと思いつつもたまにアップデートされているので今のところまだしばらく使えそう。
Unison の設定は下記の通り。違う共有ディスクがマウントされている時に間違えて実行しないように mountpoint を指定。パーミッションの変更ができなくて Unison がエラーになるので perms = 0 にしておいた。
times = true root = /Users/naney/archive/family root = /Volumes/Data/archive/family mountpoint = family-photo perms = 0
Unison の設定は下記の通り。/mnt にマウントした状態で実行する。マウント間違い対策として mountpoint を指定。
times = true root = /home/naney/archive/family root = /mnt/archive/family mountpoint = family-photo
今までノート・日記のテキストファイルは Dropbox で同期していました。 Dropbox の同期については満足しているのですが Android スマートフォンで全文検索でファイルを探して開くということができないのはやはり不便なので Google ドライブに同期するように変更しました。
Ulysses で Dropbox を同期しておくこと iPhone でノート・日記のテキストファイルの全文検索・編集ができていたのですが、今回の Google ドライブへの同期先変更でそれができなくなります。
今は Android スマートフォンメインで使っているのでこちらは諦めることにします。
Google ドライブにテキストファイルとして扱ってもらうためには Markdown ファイルの拡張子を md ではなく txt にする必要があります。
過去 txt ファイルに統一して Google ドライブに同期していた事もあったのですが、その時はテキストエディタ・ライティングアプリの都合で結局戻しました。今回全文検索が使えることを優先し、再度 Markdown 形式のノート・日記テキストファイルも拡張子を txt に変更しました。
Mac の Ulysses ではそのようなファイルを保存している外部フォルダの「新規シートのファイル拡張子」設定を .txt に変更し、「標準テキスト (.txt) ファイルを Markdown として編集」設定をオンにしておきます。
JotterPad・iA Writer・Jota+ が Google ドライブにアクセスできるので、これらでブラウズしてファイルを開き編集できます。
全文検索でファイルを探してから開いて編集するというのは JotterPad・iA Writer ではできません。
Google ドライブアプリで全文検索してファイルを選んだあとに Jota+ に渡すと、Jota+ で編集・保存で Google ドライブに書き戻すことができます。全文検索からはこの流れで扱うことにします。単独のライティングアプリで全文検索から直接編集といかないのでちょっと手間ではありますが、今までは探すことすらできなかったのでかなり助かります。
これでどこでもパーソナルナレッジベースにアクセスできるようになりました。やはり過去のノート・日記をどこでも検索できるというのは便利でいいですね。
[ ノート・日記はテキストファイルに ] [ ファイル同期 ]
nNote のエントリはテキストファイルでサーバに置くだけで公開できるようになっていて下記のように同期して運用しています。
nNote (www.naney.org) <-- 別の Mac から Emacs + TRAMP で編集 | <「Unison」で同期> | 自宅にある母艦 MacBook Pro <-- 編集(メイン) | <「バックアップと同期」で同期> | Google ドライブ <-- スマートフォンの JotterPad/iA Writer で編集
これだと外出先では nNote と Google ドライブが同期できずちょっと不便。なのでスマートフォンにも同期をすることにしました。
Android スマートフォン <-- JotterPad/iA Writer で編集 | <「FolderSync Pro」で同期> | nNote (www.naney.org) <-- 別の Mac から Emacs + TRAMP で編集 | <「Unison」で同期> | 自宅にある母艦 MacBook Pro <-- 編集(メイン) | <「バックアップと同期」で同期> | Google ドライブ
FolderSync Pro で SFTP を使って nNote のディレクトリと Android スマートフォンの「Documents/iA Writer/nNote」ディレクトリを同期します(iA Writer のライブラリにある Device (Public) は Documents/iA Writer 固定のため)。
nNote は公開しているものなので、スマートフォン上にはあまりデータを置いておきたくない派ですが今回は許容ということで。
Jota+ などから直接 SFTP 経由で nNote のファイルを編集するという手段もあったのですが、 JotterPad(ブラウズしやすい・バージョンが残るので戻せる)や iA Writer(ブラウズしやすい・簡易チェックボックス機能がある)を使いたいというのもあるので、同期してローカルで編集することにしました。
[ ファイル同期 ]
テキストファイルベースでノート管理をするのに Mac では Ulysses や iA Writer を、 Android デバイス上では JotterPad を使っている。JotterPad は主にユビキタスキャプチャ用のフォルダを開いた状態にしているので、フリーノート用に使える Android アプリを別に欲しいところである。
しかしテキストエディタはいろいろ存在するのだけれど、ファイル一覧で中身をプレビュー表示できるものはほとんど無いんだよね。ノートアプリとして使うにはファイル名一覧では駄目で、中身がずらずらっと見られる必要があるのだ。例えば Google Keep の表示みたいに。
で、いろいろ探してみたところ以前から名前は知っていた neutriNote が、テキストファイルとしてデータを保存するタイプでしかも一覧表示でプレビュー表示で中身を横断的に見られそうなのでインストールしてみた。
(play.google.com/store/apps/details?id=com.appmindlab.nano より)
名前なニュートリノからきているらしい。
neutriNote はデバイス上に指定したローカルリポジトリ(フォルダ)にテキストファイルとしてデータを保存するので、Dropbox や Google ドライブで同期できる。
neutriNote にもオプションで「neutriNote Connector+」というアプリがあるのだけれど、 Dropbox のアプリフォルダ以下だけのアクセスタイプで作られているので自分の用途に合わなかった。
ので今回は以前から使っている FolderSync Pro で Dropbox と双方向同期させることにした。インスタント同期をオンにしておけば neutriNote で変更を加えたらすぐ Dropbox に同期させられる。Dropbox 側での変更を検知して同期することはできないので別途定期同期を設定しておくとともに、 Android デバイスのホーム画面に同期開始のショートカットを置いておいた。
ちなみに neutriNote ではファイル名が ~で始まるものは隠しファイルなので同期から除外。逆に Ulysses は .Ulysses で始まる隠しファイルを作るのでこれも同期対象から除外にした。
テキストファイルベースのノート管理というスタイルに超ハマる Android アプリだ。 常用ノートアプリの仲間入り!
[ ノート・日記はテキストファイルに ] [ ファイル同期 ]
MacBook Pro の内蔵 SSD の容量がいっぱいになってきたので NAS にオリジナルを移動し、そのバックアップとして新しく買った外付け SSD を使うことにした。NAS 上のフォルダと MacBook Pro に接続した外付け HDD 上のフォルダを同期するのに今回 FreeFileSync を使うことにした。
ちょっと古風な UI だけれど良くできている。操作として
としっかり2段階になっているのが好き。このあたり2003年からリモートホストとの同期に愛用している Unison File Synchronizer と同じ考え方なのでしっくりくる。
同期処理でのファイル削除時にバックアップを作成する設定にもしておける。この設定をしておくことで間違えた時にリカバリもできる。
Unison をリモートホストでも実行できる場合の双方向ファイル同期には Unison を、ローカルホストだけで双方向同期をさせる必要がある場合は FreeFileSync という形で今後使い分けよう(ちなみに Android では FolderSync Pro)。
[ Mac アプリケーション ] [ ファイル同期 ]
と3台のストレージ上に置かれるようにしている。
3箇所にあるのでそこそこ安心なのと、オリジナルが MacBook Pro 上にあるのでいつでも観ることができるという使い勝手の良さがある。一方 MacBook Pro のストレージを圧迫しちゃう。最近 MacBook Pro のストレージが残り 10GB〜20GB ぐらいになってしまい支障が出てきたので見直すことにした。
オリジナルは NAS (Synlogy DiskStation DS216j) に置くことにしよう。自宅にいればいつでもアクセスできるので動画を観ることができる。
NAS は2台ある HDD のうち1台が壊れても大丈夫にはできているけれども、重要なファイルはバックアップが必要。予算や設置場所を考えて NAS + NAS はちょっと無理なので NAS + 外付け SSD にする。
安くなっていたバッファローの外付け SSD を購入した。
外付け SSD へのバックアップだけれど、今後もし自分に何かあった時にも残された家族が使い方に迷わず動画ファイルを観られるように、 Mac につなぐだけで Finder でアクセスできる形式になるようにすることにした。
動画ファイルが増える機会はそれほど頻繁ではないので、 Synology DiskStation DS216j に常時接続しておいて定期的に自動バックアップというのはせずに、 MacBook Pro に外付け SSD を接続して手動でバックアップすることにする。
双方向ファイル同期は今回は FreeFileSync を使うことにした。
180GB 強を今日と翌日で移動完了。ようやく MacBook Pro で余裕をもって作業できるようになったよ。
Pixel 4 の DCIM フォルダと Pictures フォルダを Dropbox と FolderSync Pro で定期的に同期させておくことにした。Pixel 4 で撮った写真は、あとで Mac 上で Dropbox フォルダから移動して整理。次の同期タイミングで Pixel 4 からは削除されてスッキリ。
Pixel 4 で Google フォトの「バックアップと同期」を OFF にしたことによるバックアップ不在問題もこれで解決。
スマートフォンから Android アプリ Solid Explorer で Synology DiskStation DS216j (NAS) に移動、 DS216j と Mac は Synlogy Cloud Station で同期という形で Xperia Z5 の時から写真を移動していたのが今まで。 Solid Explorer での一手間が無くなったので、これで後回しにすることが無くなるよ。
[ ファイル同期 ]
FolderSync Pro で Pixel 4 と Dropbox とでノートテキストファイルのあるフォルダを30分間隔で同期しているんだけれど、同期前にうっかり Pixel 4 上と MacBook Pro の両方で編集して Pixel 4 で書いた分をロストしてしまった。
MacBook Pro 側の変更は Dropbox のバージョン履歴でリカバリできるけれど Pixel 4 側は現状リカバリできるようになっていない。編集中のバージョンを一定間隔で保存してくれる JotterPad にテキストエディタをしばらく戻してみることにした。
JotterPad はいつの間にかクラウドストレージとの同期機能は要サブスクリプションになったのね。クラウドストレージ側のファイルが多いと同期に非常に時間がかかって過去常用できなかった経験があるので、ローカル編集用のテキストエディタとして使い、同期は引き続き FolderSync Pro にしておこう。
[ ノート・日記はテキストファイルに ] [ Android アプリ ] [ ファイル同期 ]
双方向ファイル同期化ツール Unison File Synchronizer、 Mac で使っているのが Unison 2.48.6 の GUI 版なのだけれど、古いせいか macOS Catalina だと「Install command-line tool」 が機能しない(/usr/bin にインストールしようとしているからかな)。
macOS 上で text UI 版がちょっと使いたい & GUI 版も新しいのにしたいなと思ってビルドとかした。
$ 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 を実行して確認した方が良さそうではある。
[ ノート・日記はテキストファイルに ]
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
nDiki は1999年1月に始めたコンピュータ日誌を前身とする Naney の Web 日記(兼パーソナルナレッジベース)です。
#nNote タグがついている記事は他の記事に比べて、より断片的・未整理・不完全なちょっとしたノートです。まだ結論に至っていない考えなども含まれます。頻繁/大幅に更新したり削除したりすることがあります。 それとは別に nNote にもちょっとしたノートがあります。
※内容は個人的見解であり所属組織とは関係ありません。