0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ObsidianをiCloudのまま使いながらGitHubでAI連携する構成

0
Posted at

はじめに

ObsidianをiCloudで同期しながら、ClaudeやCursorと連携したいけど、なかなかできないもどかしさがありました。

iPhoneから扱おうとすると、Claudeにアップロードしたり、CursorだとGIthubが前提となります。

調べると「GitHub移行しろ」という記事が多いですが、iPhoneで毎日Obsidianを使っている身からすると、iCloudの安定性を捨てるのは正直きついです。Working Copyという選択肢もありますが5,500円かかります。

試行錯誤の末、iCloudはそのまま、GitHubは別リポジトリという構成に落ち着きましたので、今回紹介したいと思います。

構成の全体像

iPhone / Mac
  ↕ iCloud(Obsidianネイティブ同期)
Mac(iCloud Vault)
  ↓ rsync + launchd(15分おき・単方向・特定フォルダのみ)
Mac(obsidian-backup/)
  ↓ git push
GitHub
  ↑↓ AIエージェント(ai-output/ のみ書き込み)
  ↓ git pull → rsync
Mac(obsidian-backup/)
  ↓ rsync(逆方向・特定フォルダのみ)
iCloud Vault

ポイントはObsidianとGitを完全に分離していることです。Obsidianは一切GitHubを知りません。

なぜconflictが起きないのか

よくあるconflictの原因は「複数の主体が同じファイルを書き換えること」です。

この構成では書き込み権限をディレクトリで分離しています。

ディレクトリ 書き込む主体
notes/ daily/ 等 Obsidianのみ
ai-output/ AIエージェントのみ

同じファイルを複数の主体が触らないので、conflictが構造的に発生しません。

sync.shの実装

#!/bin/bash
export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:$PATH"
set -e

ICLOUD_VAULT="$HOME/Library/Mobile Documents/iCloud~md~obsidian/Documents/YOUR_VAULT_NAME"
GITHUB_DIR="/Users/YOUR_USERNAME/Documents/obsidian-backup"
LOG="$GITHUB_DIR/sync.log"

echo "[$(date '+%Y-%m-%d %H:%M:%S')] sync start" >> "$LOG"

# 1. GitHubの最新を取得
cd "$GITHUB_DIR"
git pull origin main >> "$LOG" 2>&1

# 2. iCloud → GitHub(全ノート・単方向)
rsync -av --delete \
  --exclude='.git/' \
  --exclude='.obsidian/' \
  --exclude='.DS_Store' \
  --exclude='ai-output/' \
  --exclude='AGENTS.md' \
  --exclude='CLAUDE.md' \
  --exclude='sync.sh' \
  --exclude='.gitignore' \
  --exclude='sync.log' \
  "$ICLOUD_VAULT/" "$GITHUB_DIR/" >> "$LOG" 2>&1

# 3. GitHub → iCloud(AIが書いたファイルのみ逆方向コピー)
rsync -av \
  "$GITHUB_DIR/ai-output/" "$ICLOUD_VAULT/ai-output/" >> "$LOG" 2>&1 || true

# 4. 変更があればcommit & push
git add .

if git diff --cached --quiet; then
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] no changes" >> "$LOG"
else
  git commit -m "sync: $(date '+%Y-%m-%d %H:%M')"
  git push origin main
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] pushed" >> "$LOG"
fi

YOUR_USERNAMEはMacのユーザー名、YOUR_VAULT_NAMEはObsidianのVault名に置き換えてください。Vault名は以下のコマンドで確認できます。

ls ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/

--deleteオプションで転送元にないファイルは転送先からも削除されます。.git/の除外を忘れると.gitごと消えてしまうので注意してください。

launchdで自動化

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.obsidian.sync</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/bash</string>
    <string>/Users/YOUR_USERNAME/Documents/obsidian-backup/sync.sh</string>
  </array>
  <key>StartInterval</key>
  <integer>900</integer>
  <key>RunAtLoad</key>
  <true/>
  <key>StandardOutPath</key>
  <string>/tmp/obsidian-sync.log</string>
  <key>StandardErrorPath</key>
  <string>/tmp/obsidian-sync.err</string>
</dict>
</plist>
launchctl load ~/Library/LaunchAgents/com.obsidian.sync.plist

フルディスクアクセスが必要です。 システム設定 → プライバシーとセキュリティ → フルディスクアクセス → /bin/bashを追加してください。

AIエージェント向けの設定ファイル

GitHubリポジトリのルートに2つ置きます。CLAUDE.mdはClaude Code用、AGENTS.mdはCursor用で、内容は共通で問題ありません。

## Repository Structure
- ai-output/ : 書き込みOK(唯一の書き込み可能ディレクトリ)
- それ以外 : READ ONLY

## ルール
- ai-output/ 以外には絶対に書き込まない
- 新しいディレクトリが増えても同様にREAD ONLY

ハマりどころ

.git/をrsyncで消してしまった

--deleteオプションはiCloud側にないファイルをGitHub側から消します。.git/の除外を忘れると.gitディレクトリごと消えてfatal: not a git repositoryになります。

launchdでOperation not permitted

手動実行は通るのにlaunchdだと失敗します。フルディスクアクセスに/bin/bashを追加することで解決しました。

launchdでgit secretsエラー

手動実行と違い、launchdは$PATHが最小構成です。Homebrewでインストールしたツールが見つからずエラーになります。sync.sh冒頭に明示的にPATHを設定することで解決しました。

export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:$PATH"

まとめ

  • iCloudはそのまま使えます(iPhone安定)
  • GitHubは完全に別リポジトリです(Obsidianが触らない)
  • 書き込み主体をディレクトリで分離することでconflictを解消しています
  • Claude Code・Cursorどちらも即使えます
  • 追加コストゼロです

iPhoneで毎日Obsidianを使いながらAI連携したい方の参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?