双方向ファイル同期化ツール 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
DAT#photography
— Naney (@Naney) March 2, 2021
RICOH GR III #GR #GRIII #GR3 pic.twitter.com/FOtwGxa1dt
惚れ惚れする曲線。すっきりとした空。#photography
— Naney (@Naney) January 14, 2022
RICOH GR IIIx #GR #GRIIIx #GR3x pic.twitter.com/RkFemjGvv6
Markdown で書いているノートを「公開で作業する」というコンセプトで社内で公開するのに、 GitHub Enterprise Server (以下 GHE) の GitHub Pages を使ってみることにした。
静的サイトジェネレータ MkDocs には GitHub Pages にデプロイする機能が入っている。GHE 上のリポジトリに対しても問題なく動いた。
$ pip3 install mkdocs mkdocs-material
GHE 上で notes リポジトリを作成する。プライベートでも OK。
$ git clone git@example.com:Naney/notes.git $ cd notes $ git config user.name 'WATANABE Yoshimasa' $ git config user.email naney@example.com
MkDocs 設定ファイルと Markdown ファイルは既存の Obsidian vault の中にそれぞれ置いておき、シンボリックリンクしておくことにする。
$ ln -s /path/to/vault/Settings/mkdocs.yml
mkdocs.yml 内で以下を指定しておく。
docs_dir: /path/to/vault/notes
$ mkdocs serve
を実行し、 Web ブラウザで http://127.0.0.1:8000/ に接続しどのように表示するか確認する。
$ mkdocs gh-deploy
を実行すると gh-pages ブランチ上に静的サイトが生成され、リモートリポジトリに push してくれる。 GHE のリポジトリ側も自動で gh-pages ブランチを GitHub Pages で公開するように設定してくれる。びっくり。 https://example.com/pages/Naney/notes/ が公開 URL になる。
あとは Markdown ファイルを追加・更新・削除したら必要に応じて mkdocs serve で確認しつつ、 mkdocs gh-deploy していけば良い。
やってみると思ったよりお手軽だった。
プライベートリポジトリでも GitHub Enterprise Server の GitHub Pages サイトは公開となるので、組織内で限定公開するには境界型セキュリティに頼ることになる。ゼロトラストと考えるなら、漏洩してはならない情報を書かないよう注意して使うべきだ。
[ 組織内公開ワーキングノートサイト ] [ 公開で作業する ]
Obsidian vault 内の一部フォルダをシンボリックリンクを使って別の vault で参照する運用をしていたのだけれど、それをやめて vaults を分離することにした。参照されている側でノートタイトルを変更した時に、参照している側の vault を気にかける必要があるのが心理的に良くないなと。 過去試してみたネスト vault も含め、vaults 間で直接ノートを共有するのはやはり evil だ。
なお、単一の Obsidian vault を好む人もいるけれど自分は複数の vaults を使い分けた方が好み。
少し前から Google ドライブで
ショートカットでマイドライブをシンプルに 数週間以内に、複数のフォルダに保存されているアイテムはショートカットに置き換わります。ファイルとフォルダへのアクセス権は変更されません。
と表示されるようになった。
「バックアップと同期」で同期している Mac 側でショートカットがどうなるか2年前に調べた時は、フォルダのショートカットが拡張子 gshortcut のファイルになっていてうーんとなったんだった。
「パソコン版 Google ドライブ」になった現在はどうだろうと思って確認してみたら、Google ドライブ上でのフォルダのショートカットは Mac 上では localhost のポートに smbfs マウントしたボリュームの中にあるディレクトリへのシンボリックリンクという凝った作りになってた。
以前の仕様と違って、ショートカット先のフォルダ内のファイルをローカルアプリケーションから直接読み書きできる。
smbfs の先にあるので Time Machine バックアップ対象にならないことに留意が必要だけれど、それ以外は問題なさそうだな。
Shibuya#photography
— Naney (@Naney) May 9, 2022
RICOH GR IIIx #GR #GRIIIx #GR3x pic.twitter.com/cR80DV1Q2Q
最初に「バックアップと同期」で同期した時に作られた「Google ドライブ」フォルダのままでマイドライブを同期してきた。日本語を含んでいると面倒だなと思いつつ、手間を考えてずっとそのままにしていた。
今日「Google ドライブ」フォルダ階層の中に Logseq graph を作ろうとしたところ不具合が発生した(Logseq を初めて試した時にハマった挙動を忘れていた)のを機に、とうとう名前を変更することにした。
パソコン版 Google ドライブでいったんアカウントの接続を解除し、再度設定する時にマイドライブと同期するフォルダの場所で「Google Drive」を指定して同期しなおし。
同期が終わったあと念のため以前の同期フォルダである「Google ドライブ」フォルダ FreeFileSync で比較。 Google ドキュメント (.gdoc) などに差分があるけれどもこれらは問題なし。 Google ドライブの1つのフォルダに同名ファイルが複数あった場合にローカルではファイル名に (1)、(2) と付加されるのだが、付与順序が変わってファイル名が一部入れ替わったものがあったがこちらも問題なし。
あとは「Google ドライブ」を含むパスを設定しているところや、関係するシンボリックリンクなどを修正しておしまい。
Markdown 形式で書いて MkDocs を通した提案資料をたまにミーティングで画面共有している。書きやすいけどミーティング中に書いて更新するのがちょっと不便。直接 Obsidian のライブプレビュー画面を共有した方がいいな。
Obsidian vault 内の共有ノートが入っているフォルダに対するシンボリックリンクを置く形で、サブセットとしての「見せ Obsidian vault」を新しく作った。これで安心して Obsidian のウィンドウを Google Meet で画面共有できる。
実際に画面共有してミーティングしたところ、何段階かズームインして文字を大きくすればいい感じだった。
毎日通っていた玉川改札
— Naney (@Naney) August 24, 2022
2020年8月24日#photography
RICOH GR III #GR #GRIII #GR3 pic.twitter.com/ZlY5aKuVED
Obsidian のサブとして Logseq を使い始めた。過去うまくいかなかったのでメインの Obsidian vault の中に Logseq graph を置くのはやめて
という形でスタートしたのだけれど、やっぱりこれは面倒で1つにまとめたくなった。
かといって Obsidian vault フォルダ = Logseq graph フォルダにすると、フォルダ階層がごちゃごちゃになってしまう。
Logseq は graph フォルダがシンボリックリンクでも OK なので、空のフォルダを作り
のようにシンボリックリンクを作って骨組みだけの Logseq graph フォルダ化した。
Obsidian Publish で公開するページは Outlines/ 階層に置きたいのでこのような形にした。あとは Obsidian Sync したくないデバイスローカルなフォルダも Logseq/ ではないフォルダへのシンボリックリンクにする。
1つにまとめると名前の衝突問題が再発生するんだけれどこれでやってみる。
セレブ…… pic.twitter.com/718ZnCs0je
— Naney (@Naney) December 15, 2022
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。