みなさんはObsidianを複数のデバイスでどのように同期していますか? 有料だが公式のObsidian Sync?無料のDropboxやGoogle Driveなどのクラウドストレージ?

私の場合はバージョン管理がしたかったのと、どの端末からも一番アクセスしやすかったのがGitHubだったこともあり、Obsidian Gitを使って同期をしています。 しかしモバイルではIsomorphic GitというJavaScript実装のGitを使用しているため、いろいろ制限があります。

  • SSH認証がサポートされていない
  • リポジトリサイズ制限
  • rebaseによるマージが行えない
  • submoduleがサポートされていない

この記事では Termux とGitを使って私がどのようにモバイル端末と同期しているかについて紹介します。

モバイル端末ではどうやって・なんのためにObsidianを使っているか

本題に入る前に、モバイルではどのようにObsidianを利用しているかを説明します。 Obsidian Mobile を使っています。

スマホで長文を書くのは疲れるので、なにかノートを書くというよりは、Thino でメモを取るのに使用しています。 これはDailyノートにタイムスタンプ付きで追記してくれるので、ちょっとしたメモや思いつきを書くのにうってつけです。 SNSの鍵付きアカウントに書く代わりに使っているイメージです。オフラインで書けて、広告も見なくていいのが利点です。

環境

  • Android
    • Termux 0.118.1

Obsidian vaultはすでにGitHub上に作成済みのものとします。

Termuxのインストール

Google Play Store版のTermuxは、ちょっと前まで非推奨とされていたり、2024年現在もexperimental なため、 F-Droid からインストールします。

Termuxの初期設定

Termuxを開いて、利用するパッケージをインストールします。

$ pkg update
$ pkg install -y vim git openssh

TermuxからGitHubにpush/pullするためのセットアップ

https、sshどちらでも可ですが、私はsshでやり取りしています。 鍵の生成やGitHubへの公開鍵の登録などは一般的な内容なので割愛します。 openssh を入れていればTermuxでed25519などの鍵の生成が行えます。

Obsidian vaultをセットアップ

Obsidian Mobile等、Termux以外のアプリでvaultにアクセスするためには、Androidの共有ストレージ上にvaultをcloneする必要があります。 ここではその方法を説明します。

TermuxでAndroidの共有ストレージ(/sdcard/storage/emulated/0)を使用するために許可を与えます。

https://wiki.termux.com/wiki/Termux-setup-storage

$ termux-setup-storage

すると ~/storage/shared で共有ストレージにアクセスできるようになります。

vaultリポジトリをクローン

$ cd ~/storage/shared
$ mkdir repos && cd repos
$ git clone git@github.com:<vault repository>.git
$ cd vault
$ git status
$ git config --local user.email '<your email>'
$ git config --local user.name '<your name>'
$ git status

Obsidian Mobileで開く

Open folder as vault で、repos/<repository> を開く

cronで定期的に同期する

cronデーモンであるcronieと、serviceとして起動するためのパッケージをインストールします。

$ pkg install cronie termux-services

serviceに登録します

$ sv-enable crond

crontabに定期実行スケジュールを登録します。

$ crontab -e
 
# 任意の感覚で同期する
*/10 * * * * ~/sync_obsidian.sh

~/sync_obsidian.sh の中身は以下の通りです。

#!/data/data/com.termux/files/usr/bin/bash
 
REPO=<repository>
cd $HOME/storage/shared/repos/${REPO}
 
git pull --autostash --rebase
 
git add -A
git commit -m "$(date +'%Y-%m-%d %H:%M:%S') from termux"
 
git push

INFO

Termuxアプリを終了するとcronも実行されないため、バックグラウンドで起動しておく必要があります。これにより電池消費が増える可能性がありますが、自分の体感ではとくに問題にはなっていません。

これで、Android上でも定期的にgit pull, git pushが行われるようになりました!

Termux上での操作を便利にするコマンド集

スマホ上で毎回長いshellコマンドを打つのは疲れるので、よく使う操作は関数やaliasにしています。

リポジトリのディレクトリに移動

cdm() {
  cd ~/storage/shared/<path/to/repo>
}

現在時刻をメッセージにいれてコミット

gic() {
    git commit -am "$(date +"%Y-%m-%d %H:%M:%S") from termux"
}

リポジトリ再作成

まれに .git/index.lock がロックされてなんの操作も受け付けなくなることがあるので、再作成を一発で行えるようにしています

recreaterepo() {
    rm -rf .git
    git init
    git remote add origin git@github.com:<repo_name>.git
    git fetch origin
    git switch -f master
}