T-CREATOR

Obsidian を macOS で快適化:フォルダ構成・iCloud 排他回避・自動バックアップ

Obsidian を macOS で快適化:フォルダ構成・iCloud 排他回避・自動バックアップ

Obsidian を macOS で使う際、フォルダ構成の迷い・iCloud 同期の競合・バックアップ忘れという 3 つの課題に直面していませんか?本記事では、これらを一気に解決する実践的な設定方法をご紹介します。

macOS の特性を理解し、Obsidian の機能を最大限に活かすことで、ストレスフリーな執筆環境を実現できるでしょう。

macOS × Obsidian で直面する 3 つの課題

Obsidian を macOS で使い始めると、予期せぬ問題に遭遇することがあります。特に多くの方が悩まされるのが、以下の 3 つの課題です。

これらは一見別々の問題に見えますが、実は相互に関連しており、総合的な対策が必要になります。

フォルダ構成の迷い

Obsidian で最初に悩むのが「どのようにフォルダを整理すべきか」という問題です。

ノートが増えるにつれて、分類方法やフォルダ階層をどう設計すべきか分からなくなってしまいます。特に、添付ファイルやプラグイン設定ファイルの配置場所に迷う方が多いでしょう。

適切なフォルダ構成がないと、以下のような問題が発生します:

  • ノートの検索に時間がかかる
  • 関連ファイルが見つからない
  • プラグインが正しく動作しない
  • バックアップ時に不要なファイルまで含まれる

一般的なフォルダ構成の問題点

#問題点発生する影響
1フラットな構造(フォルダなし)検索性が著しく低下し、管理が困難
2過度に深い階層構造パス名が長くなり、リンク切れのリスク増加
3添付ファイルの分散配置ファイル管理が煩雑になり、容量把握が困難
4プラグイン設定の混在バックアップ時の選別が難しく、同期トラブルの原因に

以下の図は、整理されていないフォルダ構成と最適化されたフォルダ構成の違いを示しています。

mermaidflowchart TB
    subgraph bad["❌ 非推奨: フラット構造"]
        vault1["Vault ルート"] --> note1["ノート1.md"]
        vault1 --> note2["ノート2.md"]
        vault1 --> img1["画像1.png"]
        vault1 --> img2["画像2.png"]
        vault1 --> plugin1[".obsidian/"]
        vault1 --> note3["ノート3.md"]
        vault1 --> etc["...100個以上のファイル"]
    end

    subgraph good["✅ 推奨: 構造化された配置"]
        vault2["Vault ルート"] --> dailies["📅 Daily Notes/"]
        vault2 --> projects["📁 Projects/"]
        vault2 --> attachments["📎 Attachments/"]
        vault2 --> templates["📝 Templates/"]
        vault2 --> obsidian2[".obsidian/"]

        dailies --> daily1["2024-01-01.md"]
        projects --> proj1["プロジェクトA/"]
        attachments --> imgs["images/"]
        attachments --> files["files/"]
    end

構造化することで、ノートの分類が明確になり、管理が格段に楽になります。

iCloud 同期時の排他制御問題

macOS ユーザーの多くが iCloud Drive に Vault を配置していますが、これが深刻な問題を引き起こすことがあります。

iCloud Drive は複数デバイス間でファイルを同期する便利な機能ですが、Obsidian の特定のファイルとは相性が悪いのです。特に .obsidian フォルダ内のキャッシュファイルや、プラグインの一時ファイルが頻繁に更新されると、同期の競合が発生します。

発生する主なエラー

typescript// Obsidian コンソールに表示される典型的なエラー
Error: EBUSY: resource busy or locked, open '/Users/username/Library/Mobile Documents/iCloud~md~obsidian/Documents/MyVault/.obsidian/workspace.json'

このエラーは、iCloud が同期処理中にファイルをロックしているため、Obsidian がファイルにアクセスできない状況を示しています。

排他制御問題が起きる仕組み

以下の図は、iCloud 同期時に競合が発生するプロセスを示しています。

mermaidsequenceDiagram
    participant O as Obsidian
    participant F as ファイルシステム
    participant iC as iCloud Daemon

    O->>F: workspace.json を書き込み
    F->>iC: 変更を検知
    iC->>F: ファイルをロック(同期開始)
    O->>F: workspace.json を再度読み込み
    F-->>O: Error: EBUSY (ファイルロック中)
    Note over O,iC: ⚠️ 排他制御による競合発生
    iC->>F: 同期完了・ロック解除
    O->>F: リトライで読み込み成功

この問題を放置すると、設定の不整合やデータ損失のリスクがあります。

問題が発生しやすいファイル

#ファイル・フォルダ更新頻度競合リスク
1.obsidian​/​workspace.json起動・終了時に毎回★★★ 非常に高い
2.obsidian​/​cache​/​リアルタイムで頻繁★★★ 非常に高い
3.obsidian​/​plugins​/​*​/​data.jsonプラグイン使用時★★☆ 中程度
4.trash​/​ノート削除時★☆☆ 低い

これらのファイルを iCloud 同期から除外することが解決策となります。

バックアップの自動化不足

最後の課題は、バックアップの自動化が十分でないことです。

多くの方が「iCloud に保存しているからバックアップは不要」と考えていますが、これは危険な誤解です。iCloud は同期サービスであり、誤って削除したファイルや破損したデータも同期されてしまいます。

バックアップが必要な理由

  • 誤操作からの保護: ノートを誤って削除した場合の復元
  • プラグイン障害への対応: プラグインの不具合でデータが破損した場合
  • バージョン管理: 過去の状態に戻したい場合
  • 端末故障時の復旧: Mac が故障した際の迅速な復旧

以下の図は、適切なバックアップ戦略を示しています。

mermaidflowchart LR
    vault["Obsidian<br/>Vault"] --> |"リアルタイム同期"| icloud["iCloud Drive"]
    vault --> |"定期バックアップ<br/>(1日1回)"| local["ローカル<br/>バックアップ"]
    vault --> |"履歴管理<br/>(コミット時)"| git["Git<br/>リポジトリ"]

    icloud -.-> |"誤削除も同期"| risk1["⚠️ リスク"]
    local --> |"復元可能"| safe1["✅ 安全"]
    git --> |"履歴から復元"| safe2["✅ 安全"]

    style risk1 fill:#ffcccc
    style safe1 fill:#ccffcc
    style safe2 fill:#ccffcc

iCloud だけでなく、ローカルバックアップと Git 管理を組み合わせることで、多層的な保護が実現できます。

快適化のための 3 つの解決策

ここからは、前述の課題を解決するための具体的な方法をご紹介します。

それぞれの解決策は独立していますが、組み合わせることでより強力な効果を発揮するでしょう。

最適なフォルダ構成の設計

Obsidian のフォルダ構成は、用途別・タイプ別の分類を基本とします。

以下は、多くのユーザーに適用できる汎用的な構成例です。

推奨フォルダ構造

yamlVault/
├── 📅 Daily Notes/          # デイリーノート専用
   ├── 2024/
      ├── 01-January/
      └── 02-February/
   └── 2025/

├── 📁 Projects/             # プロジェクト別ノート
   ├── Project-A/
      ├── meetings/
      └── docs/
   └── Project-B/

├── 📚 Knowledge Base/       # 知識ベース・永続ノート
   ├── Technology/
   ├── Business/
   └── Personal/

├── 📎 Attachments/          # 添付ファイル集約
   ├── images/
   ├── files/
   └── audio/

├── 📝 Templates/            # テンプレート集
   ├── daily-note.md
   ├── meeting-note.md
   └── project-note.md

├── 🗑️ Archive/             # アーカイブ
   └── old-projects/

└── .obsidian/              # Obsidian 設定(自動生成)
    ├── plugins/
    ├── themes/
    └── workspace.json

この構造の利点は以下の通りです:

#メリット詳細
1検索性の向上フォルダ名で絞り込み検索が容易
2添付ファイルの一元管理容量管理とバックアップが簡単
3テンプレート活用新規ノート作成の効率化
4スケーラビリティノートが増えても構造を維持しやすい

Obsidian 設定でのフォルダ指定

フォルダ構成を作成したら、Obsidian の設定で各フォルダを指定します。

json// .obsidian/app.json の設定例
{
  "attachmentFolderPath": "Attachments",
  "newFileLocation": "folder",
  "newFileFolderPath": "Knowledge Base",
  "useMarkdownLinks": true,
  "showLineNumber": true
}

この設定により、新規ノートや添付ファイルが自動的に適切なフォルダに配置されます。

設定項目の説明

  • attachmentFolderPath: 添付ファイルの保存先フォルダ
  • newFileLocation: 新規ファイルの作成場所(folder を指定)
  • newFileFolderPath: 新規ファイルのデフォルトフォルダ
  • useMarkdownLinks: Markdown 形式のリンクを使用

Daily Notes プラグインの設定

Daily Notes を使用する場合は、専用の設定も必要です。

json// .obsidian/daily-notes.json
{
  "folder": "Daily Notes/2025/01-January",
  "format": "YYYY-MM-DD",
  "template": "Templates/daily-note.md"
}

これにより、デイリーノートが指定フォルダに自動作成されます。

iCloud 排他回避の具体的手法

iCloud の排他制御問題を解決するには、頻繁に更新されるファイルを同期対象から除外します。

macOS では .nosync 拡張子を使う方法と、シンボリックリンクを使う方法の 2 つがあります。

方法 1: .nosync 拡張子による除外

最もシンプルな方法は、フォルダ名に .nosync を追加することです。

bash# キャッシュフォルダを同期対象から除外
cd ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault/.obsidian
mv cache cache.nosync

.nosync を付けたフォルダは、iCloud 同期から自動的に除外されます。

対象とすべきフォルダ

bash# 以下のフォルダに .nosync を追加
.obsidian/cache/         → .obsidian/cache.nosync/
.obsidian/workspace      → .obsidian/workspace.nosync (ファイルの場合は後述の方法を使用)
.trash/                  → .trash.nosync/

ただし、この方法には制限があります:

  • 個別ファイルには使えない(フォルダのみ)
  • プラグインが .nosync フォルダを認識しない場合がある

これらの問題を解決するには、シンボリックリンクを使います。

方法 2: シンボリックリンクによる柔軟な管理

シンボリックリンクを使うと、iCloud 外にファイルを配置しつつ、Obsidian からは通常通りアクセスできます。

以下の図は、シンボリックリンクの仕組みを示しています。

mermaidflowchart LR
    subgraph icloud["iCloud Drive 領域"]
        vault["MyVault/"] --> obsidian[".obsidian/"]
        obsidian --> symlink["cache → シンボリックリンク"]
    end

    subgraph local["ローカルストレージ"]
        real_cache["実体: cache/"]
    end

    symlink -.->|"参照"| real_cache
    icloud_daemon["iCloud Daemon"] -.->|"同期しない"| symlink
    obsidian_app["Obsidian"] -->|"透過的にアクセス"| symlink

    style real_cache fill:#ccffcc
    style symlink fill:#cce5ff

Obsidian はシンボリックリンク経由で実体にアクセスし、iCloud は実体を同期しません。

シンボリックリンクの作成手順

ステップバイステップで設定していきます。

bash# ステップ1: Obsidian を終了
# アプリケーションメニューから完全に終了させる

# ステップ2: 環境変数を設定(作業を簡単にするため)
VAULT_PATH=~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault
LOCAL_CACHE=~/.obsidian-local/MyVault

環境変数を設定することで、以降のコマンドがシンプルになります。

bash# ステップ3: ローカルストレージにディレクトリを作成
mkdir -p "$LOCAL_CACHE"

# ステップ4: 既存のキャッシュを移動
mv "$VAULT_PATH/.obsidian/cache" "$LOCAL_CACHE/cache"

既存のキャッシュを iCloud 外のローカルストレージに移動します。

bash# ステップ5: シンボリックリンクを作成
ln -s "$LOCAL_CACHE/cache" "$VAULT_PATH/.obsidian/cache"

# ステップ6: 確認
ls -la "$VAULT_PATH/.obsidian/" | grep cache
# 出力例: lrwxr-xr-x  1 user  staff  45 Jan 15 10:30 cache -> /Users/user/.obsidian-local/MyVault/cache

ls -la-> が表示されれば、シンボリックリンクが正しく作成されています。

workspace.json の個別ファイル対応

workspace.json のような個別ファイルも同様に処理できます。

bash# workspace.json をローカルに移動してリンク作成
mv "$VAULT_PATH/.obsidian/workspace.json" "$LOCAL_CACHE/workspace.json"
ln -s "$LOCAL_CACHE/workspace.json" "$VAULT_PATH/.obsidian/workspace.json"

これで、頻繁に更新されるファイルが iCloud 同期から除外されます。

動作確認

設定後、以下の手順で動作を確認します。

bash# Obsidian を起動して正常に動作するか確認

# iCloud の同期状況を確認
brctl log --wait --shorten | grep MyVault
# cache/ や workspace.json が同期ログに出なければ成功

brctl は iCloud の診断ツールで、同期状況をリアルタイムで確認できます。

自動バックアップの実装方法

最後に、自動バックアップの仕組みを構築します。

macOS の Automatorrsync を組み合わせることで、シンプルかつ強力なバックアップシステムが作れます。

バックアップ戦略の全体像

以下の図は、3 層のバックアップ戦略を示しています。

mermaidflowchart TB
    vault["Obsidian Vault<br/>(作業領域)"]

    subgraph layer1["第1層: リアルタイム同期"]
        icloud["iCloud Drive<br/>(デバイス間同期)"]
    end

    subgraph layer2["第2層: 定期バックアップ"]
        daily["Daily Backup<br/>(外付けHDD/NAS)"]
    end

    subgraph layer3["第3層: バージョン管理"]
        git_local["Git リポジトリ<br/>(ローカル)"]
        git_remote["Git リモート<br/>(GitHub/GitLab)"]
    end

    vault -->|"自動同期"| icloud
    vault -->|"1日1回 自動"| daily
    vault -->|"手動コミット"| git_local
    git_local -->|"プッシュ"| git_remote

    style layer1 fill:#e1f5fe
    style layer2 fill:#f3e5f5
    style layer3 fill:#e8f5e9

複数のバックアップ層を持つことで、あらゆる障害から保護できます。

rsync によるバックアップスクリプト

まず、rsync を使った基本的なバックアップスクリプトを作成します。

bash#!/bin/bash
# ファイル名: obsidian-backup.sh

# バックアップ設定
VAULT_PATH="$HOME/Library/Mobile Documents/iCloud~md~obsidian/Documents/MyVault"
BACKUP_BASE="$HOME/Documents/ObsidianBackups"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_PATH="$BACKUP_BASE/$DATE"
LATEST_LINK="$BACKUP_BASE/latest"

環境変数で Vault のパスとバックアップ先を定義します。

bash# バックアップディレクトリ作成
mkdir -p "$BACKUP_PATH"

# rsync でバックアップ実行
rsync -av \
  --exclude='.obsidian/cache.nosync' \
  --exclude='.obsidian/workspace.nosync' \
  --exclude='.trash' \
  --exclude='.DS_Store' \
  "$VAULT_PATH/" "$BACKUP_PATH/"

rsync-av オプションは、アーカイブモード(パーミッション保持)と詳細表示を有効にします。

rsync オプションの説明

オプション意味効果
-aアーカイブモードタイムスタンプ、パーミッションを保持
-v詳細表示コピーしたファイルを表示
--exclude除外パターン指定したパスを除外
bash# 最新バックアップへのシンボリックリンク更新
rm -f "$LATEST_LINK"
ln -s "$BACKUP_PATH" "$LATEST_LINK"

# 古いバックアップを削除(30日以上前)
find "$BACKUP_BASE" -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;

# 完了メッセージ
echo "バックアップ完了: $BACKUP_PATH"

30 日以上前のバックアップを自動削除することで、ストレージを節約できます。

スクリプトの実行権限設定

作成したスクリプトに実行権限を付与します。

bash# スクリプトを保存
chmod +x ~/Documents/obsidian-backup.sh

# 手動実行でテスト
~/Documents/obsidian-backup.sh

正常にバックアップが作成されるか確認しましょう。

Automator でバックアップを自動化

次に、Automator を使ってスクリプトを定期実行します。

Automator アプリケーションの作成手順

  1. Automator を起動(アプリケーションフォルダから)
  2. 「カレンダーアラーム」タイプを選択
  3. 「シェルスクリプトを実行」アクションを追加
  4. シェルに ​/​bin​/​bash を指定
  5. スクリプトパスを入力
bash# Automator のシェルスクリプトアクション内容
/Users/username/Documents/obsidian-backup.sh

実際のユーザー名に置き換えてください。

カレンダーで定期実行を設定

Automator ワークフローをカレンダーアラームとして保存します。

カレンダー設定手順

  1. Automator で「ファイル > 保存」
  2. ファイル形式: 「カレンダーアラーム」
  3. 名前: 「Obsidian Daily Backup」
  4. 保存すると、カレンダーアプリが自動で開く
  5. イベントの繰り返し設定: 「毎日」
  6. 時刻: 「21:00」(作業終了後がおすすめ)

これで、毎日自動的にバックアップが実行されます。

Git によるバージョン管理(オプション)

さらに高度な管理には Git を活用します。

bash# Vault を Git リポジトリ化
cd "$VAULT_PATH"
git init

# .gitignore を作成
cat > .gitignore << 'EOF'
.obsidian/cache.nosync/
.obsidian/workspace.nosync
.obsidian/workspace.json
.trash/
.DS_Store
EOF

.gitignore により、不要なファイルをバージョン管理から除外します。

bash# 初回コミット
git add .
git commit -m "Initial commit: Obsidian Vault setup"

# リモートリポジトリ追加(GitHub などを使用)
git remote add origin https://github.com/username/obsidian-vault.git
git push -u origin main

これで、変更履歴を細かく管理できるようになります。

実装手順:ステップバイステップ

ここまでの解決策を、実際に設定する手順をまとめます。

順番通りに進めることで、スムーズに快適な環境を構築できるでしょう。

ステップ 1:フォルダ構成を整える

まず、Vault のフォルダ構成を最適化します。

1-1. 既存 Vault のバックアップ

作業前に必ずバックアップを取ります。

bash# Vault 全体を一時的にコピー
cp -r ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault \
     ~/Desktop/MyVault_backup_$(date +%Y%m%d)

何か問題があっても、このバックアップから復元できます。

1-2. フォルダの作成

推奨構成のフォルダを作成します。

bash# Vault ディレクトリに移動
cd ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault

# 必要なフォルダを一括作成
mkdir -p "Daily Notes"/{2024,2025}
mkdir -p "Projects"
mkdir -p "Knowledge Base"/{Technology,Business,Personal}
mkdir -p "Attachments"/{images,files,audio}
mkdir -p "Templates"
mkdir -p "Archive"

mkdir -p により、親フォルダも含めて一度に作成できます。

1-3. 既存ノートの移動

既存のノートを適切なフォルダに移動します。

bash# 例: デイリーノートを移動
mv 2024-*.md "Daily Notes/2024/"
mv 2025-*.md "Daily Notes/2025/"

# 例: 画像ファイルを移動
find . -maxdepth 1 -type f \( -name "*.png" -o -name "*.jpg" \) -exec mv {} "Attachments/images/" \;

find コマンドで画像ファイルを検索し、一括移動します。

1-4. Obsidian 設定の更新

Obsidian の設定ファイルを編集します。

json// .obsidian/app.json
{
  "attachmentFolderPath": "Attachments/images",
  "newFileLocation": "folder",
  "newFileFolderPath": "Knowledge Base",
  "useMarkdownLinks": true,
  "showLineNumber": true,
  "showFrontmatter": true
}

設定を保存したら、Obsidian を再起動して反映させます。

1-5. テンプレートの作成

基本的なテンプレートを作成しておきます。

markdown<!-- Templates/daily-note.md -->

# {{date:YYYY-MM-DD}}

# 📝 今日のタスク

- [ ]

# 💡 メモ

# 🔗 関連ノート

{{date}} は Templater プラグインなどで自動置換されます。

ステップ 2:iCloud 設定を最適化する

次に、iCloud の排他制御問題を解決します。

2-1. Obsidian を完全終了

設定変更前に、Obsidian を必ず終了させます。

bash# プロセスが完全に終了しているか確認
ps aux | grep -i obsidian
# 何も表示されなければ OK

バックグラウンドプロセスが残っていないことを確認しましょう。

2-2. ローカルストレージの準備

iCloud 外にディレクトリを作成します。

bash# ローカルストレージ用ディレクトリ作成
mkdir -p ~/.obsidian-local/MyVault

# パーミッション確認
ls -ld ~/.obsidian-local/MyVault
# drwxr-xr-x と表示されれば OK

適切な権限が設定されていることを確認します。

2-3. キャッシュの移動とリンク作成

頻繁に更新されるファイルを移動します。

bash# 環境変数設定
VAULT=~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault
LOCAL=~/.obsidian-local/MyVault

# cache フォルダを移動
mv "$VAULT/.obsidian/cache" "$LOCAL/cache"
ln -s "$LOCAL/cache" "$VAULT/.obsidian/cache"

# workspace.json を移動
mv "$VAULT/.obsidian/workspace.json" "$LOCAL/workspace.json"
ln -s "$LOCAL/workspace.json" "$VAULT/.obsidian/workspace.json"

シンボリックリンクにより、透過的にアクセスできます。

2-4. .trash フォルダの処理

ゴミ箱フォルダも同期対象から除外します。

bash# .trash を .trash.nosync にリネーム
mv "$VAULT/.trash" "$VAULT/.trash.nosync"

Obsidian は .trash.nosync も認識するため、問題なく動作します。

2-5. 動作確認

Obsidian を起動して、正常に動作するか確認します。

bash# Obsidian を起動
open -a Obsidian

# 別ターミナルで iCloud ログを監視
brctl log --wait --shorten | grep -E "(cache|workspace)"
# 何も表示されなければ、同期から除外されている

同期ログに cacheworkspace が出なければ成功です。

トラブルシューティング

もし問題が発生したら、以下を確認します。

#エラー内容対処方法
1Obsidian が起動しないシンボリックリンクのパスを確認 ls -la
2設定が保存されないローカルフォルダのパーミッション確認
3プラグインが動作しないプラグインフォルダは iCloud に残す
4エラーメッセージが出るObsidian を完全終了して再起動

エラーが解消しない場合は、バックアップから復元して再度試してください。

ステップ 3:自動バックアップを構築する

最後に、自動バックアップの仕組みを作ります。

3-1. バックアップスクリプトの作成

まず、スクリプトを作成します。

bash# スクリプト用ディレクトリ作成
mkdir -p ~/Scripts

# エディタでスクリプトを作成
nano ~/Scripts/obsidian-backup.sh

以下の内容を貼り付けます。

bash#!/bin/bash
# Obsidian 自動バックアップスクリプト

# 設定
VAULT_PATH="$HOME/Library/Mobile Documents/iCloud~md~obsidian/Documents/MyVault"
BACKUP_BASE="$HOME/Documents/ObsidianBackups"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_PATH="$BACKUP_BASE/$DATE"
LATEST_LINK="$BACKUP_BASE/latest"
LOG_FILE="$BACKUP_BASE/backup.log"

# ログ出力関数
log() {
    echo "[$(date +%Y-%m-%d\ %H:%M:%S)] $1" | tee -a "$LOG_FILE"
}

# バックアップ開始
log "バックアップ開始"

# ディレクトリ作成
mkdir -p "$BACKUP_PATH"

# rsync 実行
rsync -av \
  --exclude='.obsidian/cache.nosync' \
  --exclude='.obsidian/workspace.nosync' \
  --exclude='.obsidian/workspace.json' \
  --exclude='.trash.nosync' \
  --exclude='.DS_Store' \
  "$VAULT_PATH/" "$BACKUP_PATH/" >> "$LOG_FILE" 2>&1

# 結果チェック
if [ $? -eq 0 ]; then
    log "バックアップ成功: $BACKUP_PATH"
else
    log "エラー: バックアップ失敗"
    exit 1
fi

ログ出力機能により、実行履歴を確認できます。

bash# 最新リンク更新
rm -f "$LATEST_LINK"
ln -s "$BACKUP_PATH" "$LATEST_LINK"

# 古いバックアップ削除(30日以上前)
find "$BACKUP_BASE" -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;
log "古いバックアップを削除しました"

# 完了
log "バックアップ完了"

Ctrl + O で保存、Ctrl + X で終了します。

3-2. 実行権限とテスト

スクリプトに実行権限を付与します。

bash# 実行権限付与
chmod +x ~/Scripts/obsidian-backup.sh

# テスト実行
~/Scripts/obsidian-backup.sh

正常に完了すれば、~​/​Documents​/​ObsidianBackups​/​ にバックアップが作成されます。

3-3. Automator ワークフロー作成

Automator で自動実行の設定をします。

手順

  1. Automator.app を起動
  2. 「新規書類」→「カレンダーアラーム」を選択
  3. 左のアクションリストから「シェルスクリプトを実行」を検索
  4. ドラッグ&ドロップでワークフローエリアに配置
  5. シェル: ​/​bin​/​bash を選択
  6. 以下のスクリプトを入力:
bash/Users/username/Scripts/obsidian-backup.sh

重要: username を実際のユーザー名に置き換えてください。

3-4. カレンダーアラームの保存

Automator ワークフローを保存します。

  1. 「ファイル」→「保存」
  2. 名前: Obsidian Daily Backup
  3. ファイル形式: カレンダーアラーム
  4. 保存場所: デフォルト(~​/​Library​/​Workflows​/​
  5. 「保存」をクリック

カレンダー.app が自動的に開きます。

3-5. カレンダーで繰り返し設定

カレンダーアプリで定期実行を設定します。

  1. 新しく作成されたイベント「Obsidian Daily Backup」を開く
  2. 「繰り返し」: 毎日
  3. 時刻: 21:00(または任意の時刻)
  4. 「アラート」: なし(スクリプト実行のみ)
  5. 「完了」をクリック

これで、毎日 21 時に自動バックアップが実行されます。

3-6. Git バージョン管理の追加(オプション)

さらに詳細な履歴管理には Git を使います。

bash# Vault を Git リポジトリ化
cd ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault
git init

# .gitignore 作成
cat > .gitignore << 'EOF'
.obsidian/cache.nosync/
.obsidian/workspace.nosync
.obsidian/workspace.json
.trash.nosync/
.DS_Store
EOF

Git 管理から除外するファイルを指定します。

bash# 初回コミット
git add .
git commit -m "Initial commit: Vault setup with optimized structure"

# GitHub にプッシュ(事前にリポジトリ作成が必要)
git remote add origin https://github.com/username/obsidian-vault.git
git branch -M main
git push -u origin main

以降は、重要な変更時に手動でコミット・プッシュします。

3-7. バックアップの確認方法

バックアップが正しく動作しているか確認します。

bash# バックアップ一覧表示
ls -lt ~/Documents/ObsidianBackups/

# 最新バックアップの内容確認
ls -la ~/Documents/ObsidianBackups/latest/

# ログファイル確認
tail -20 ~/Documents/ObsidianBackups/backup.log

定期的にログを確認し、エラーがないかチェックしましょう。

ステップ 4:動作確認とトラブルシューティング

すべての設定が完了したら、総合的な動作確認を行います。

4-1. フォルダ構成の確認

Vault のフォルダ構成が正しいか確認します。

bash# ツリー表示(tree コマンドがない場合は brew install tree)
tree -L 2 ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault/

# 主要フォルダの存在確認
cd ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault/
ls -la | grep -E "(Daily|Projects|Knowledge|Attachments|Templates)"

すべてのフォルダが存在していることを確認します。

4-2. iCloud 除外設定の確認

シンボリックリンクが正しく機能しているか確認します。

bash# シンボリックリンクの確認
ls -la ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault/.obsidian/ | grep -E "(cache|workspace)"

# 期待される出力:
# lrwxr-xr-x  cache -> /Users/username/.obsidian-local/MyVault/cache
# lrwxr-xr-x  workspace.json -> /Users/username/.obsidian-local/MyVault/workspace.json

-> 矢印が表示されていれば、リンクが正しく作成されています。

bash# iCloud 同期ログの監視(数分間実行)
brctl log --wait --shorten | grep -v "^$" | head -20
# cache や workspace が出力されなければ OK

同期ログに除外ファイルが出なければ成功です。

4-3. Obsidian の動作確認

Obsidian を起動して、各機能が正常に動作するか確認します。

確認項目

#確認内容確認方法
1Vault が開けるかObsidian 起動時にエラーが出ないか
2ノート作成Knowledge Base に新規ノート作成
3画像添付ノートに画像を添付し、Attachments​/​images に保存されるか
4デイリーノート新規デイリーノートが Daily Notes​/​ に作成されるか
5プラグイン動作使用中のプラグインがエラーなく動作するか
6リンク機能ノート間のリンクが正しく機能するか

すべて問題なければ、設定は完了です。

4-4. バックアップの動作確認

自動バックアップが正しく実行されるか確認します。

bash# バックアップスクリプトを手動実行
~/Scripts/obsidian-backup.sh

# バックアップ先を確認
ls -la ~/Documents/ObsidianBackups/latest/

# ログ確認
tail -10 ~/Documents/ObsidianBackups/backup.log

ログに「バックアップ成功」と表示されれば正常です。

bash# カレンダーアラームの確認
# カレンダー.app を開き、「Obsidian Daily Backup」イベントを確認
# 次回実行予定が表示されていれば OK

設定時刻になったら自動実行されます。

4-5. よくあるトラブルと解決方法

設定中に発生しやすい問題と対処法をまとめます。

問題 1: Obsidian が起動しない

bash# エラーログ確認
cat ~/Library/Logs/Obsidian/main.log | tail -20

# シンボリックリンクの再確認
ls -la ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault/.obsidian/

解決策

  • シンボリックリンクのパスが正しいか確認
  • リンク先のディレクトリが存在するか確認
  • パーミッションエラーがないか確認

問題 2: iCloud 同期エラーが出る

bash# エラー内容確認
brctl log --wait --shorten | grep -i error

# iCloud 状態確認
brctl status

解決策

  • iCloud Drive が正常に動作しているか確認
  • .nosync フォルダ名が正しいか確認
  • シンボリックリンクが iCloud 領域外を指しているか確認

問題 3: バックアップが実行されない

bash# スクリプトのパーミッション確認
ls -la ~/Scripts/obsidian-backup.sh
# -rwxr-xr-x と表示されるべき

# 手動実行でエラー確認
bash -x ~/Scripts/obsidian-backup.sh

解決策

  • 実行権限が付与されているか確認(chmod +x
  • スクリプト内のパスが正しいか確認
  • カレンダーアラームが有効になっているか確認

問題 4: 設定が反映されない

bash# Obsidian の設定ファイル確認
cat ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault/.obsidian/app.json

解決策

  • JSON 形式が正しいか確認(カンマやブラケットの位置)
  • Obsidian を完全に再起動
  • 設定ファイルを手動編集後、Obsidian を起動

4-6. 復元テスト

最後に、バックアップからの復元が正しくできるかテストします。

bash# テスト用に一時的なノートを削除
rm ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault/Knowledge\ Base/test.md

# バックアップから復元
cp ~/Documents/ObsidianBackups/latest/Knowledge\ Base/test.md \
   ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/MyVault/Knowledge\ Base/

ノートが復元されれば、バックアップは正常に機能しています。

まとめ

本記事では、Obsidian を macOS で快適に使うための 3 つの最適化手法をご紹介しました。

フォルダ構成の最適化により、ノートの管理が格段に楽になります。用途別にフォルダを分けることで、検索性が向上し、添付ファイルも一元管理できるようになりました。

iCloud 排他制御の回避は、同期エラーを根本的に解決する重要な設定です。シンボリックリンクを活用することで、頻繁に更新されるキャッシュファイルを iCloud 同期から除外し、安定した動作を実現できます。

自動バックアップの構築により、データ損失のリスクを大幅に軽減できました。rsync と Automator を組み合わせた仕組みは、シンプルでありながら強力な保護を提供してくれます。

これらの設定は一度行えば、その後はメンテナンスフリーで動作し続けます。ぜひ本記事の手順を参考に、快適な Obsidian 環境を構築してください。

定期的にバックアップログを確認し、システムが正常に動作しているかチェックすることをおすすめします。

関連リンク