概要
Obsidian を中心に、Raspberry Pi 上の SSD をストレージとして使い、Mac・iPhone 間でノートを同期しながら、AI(Gemini API)がメモの関連リンクを自動付与してくれる PKM(Personal Knowledge Management)環境を構築しました。
クラウドサービスへの依存を最小限にしつつ、無料または買い切りのツールだけで実現しています。
システム構成
[Mac] [iPhone]
Obsidian Obsidian
Copilot Plugin Möbius Sync
Syncthing Tailscale
| |
+--------+---------------+
|
Tailscale tailnet(VPN 経由)
|
[Raspberry Pi 4]
Syncthing(同期ハブ)
ai-linker.py(1時間ごと自動リンク付与)
backup.sh(毎日 02:00 バックアップ)
/mnt/<ssd>/obsidian/vault/(Vault 実体)
/media/<user>/<hdd>/obsidian/backup/(バックアップ先)
使用ツール・技術スタック
| カテゴリ | ツール |
|---|---|
| ノートアプリ | Obsidian(Mac / iOS) |
| ファイル同期 | Syncthing |
| iOS 同期クライアント | Möbius Sync(有料買い切り) |
| VPN | Tailscale |
| AI チャット | Copilot for Obsidian + Gemini 3.5 Flash(OpenRouter) |
| AI 自動リンク | Python スクリプト + Google AI Studio API(Gemini 3.5 Flash) |
| ストレージ | Raspberry Pi 4 にマウントした外付け SSD(938GB) |
Vault フォルダ構成
vault/
├── 00_Inbox/ とりあえず置く(iPhone の放り込み先)
├── 01_Daily/ 日次ノート(YYYY-MM-DD.md)
├── 02_Literature/ 技術記事の読書メモ
├── 03_Tech/ 技術ナレッジ本体
├── 04_Ideas/ アイデア
├── 99_Archive/ 使わなくなったもの
├── _Templates/ テンプレート
└── _Attachments/ 画像など
構築手順
Phase 1:ラズパイ側 Syncthing の構築
# Syncthing 公式リポジトリを追加
sudo mkdir -p /etc/apt/keyrings
sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg \
https://syncthing.net/release-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] \
https://apt.syncthing.net/ syncthing stable" \
| sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt update && sudo apt install -y syncthing
# Vault ディレクトリ作成
sudo mkdir -p /mnt/<ssd>/obsidian/{vault,scripts}
sudo chown -R <user>:<user> /mnt/<ssd>/obsidian
# systemd で自動起動
sudo systemctl enable syncthing@<user>.service
sudo systemctl start syncthing@<user>.service
Tailscale 経由でのみアクセスするため、Web UI の bind を Tailscale IP に変更します。
sudo systemctl stop syncthing@<user>.service
# GUI bind を Tailscale IP に変更
sed -i 's|<address>xx.x.x.x:8384</address>|<address><Tailscale IP>:8384</address>|' \
~/.local/state/syncthing/config.xml
# MagicDNS 経由アクセスのため Host チェックを無効化
sed -i 's|</gui>| <insecureSkipHostcheck>true</insecureSkipHostcheck>\n </gui>|' \
~/.local/state/syncthing/config.xml
sudo systemctl start syncthing@<user>.service
Phase 2:Mac 側 Syncthing の導入と相互接続
# Vault ディレクトリ作成
mkdir -p ~/Obsidian/vault
# Syncthing for macOS インストール
brew install --cask syncthing
open /Applications/Syncthing.app
Mac の Web UI(http://xx.x.x.x:8384)でラズパイの Device ID を登録し、ラズパイ側で Mac を承認して双方向同期を確立します。
Syncthing の Ignore Patterns に以下を設定して不要ファイルの同期を防ぎます:
.DS_Store
._*
.obsidian/workspace.json
.obsidian/workspace-mobile.json
.obsidian/cache/
.obsidian/plugins/copilot/data.json
Phase 3:Obsidian の初期設定
brew install --cask obsidian
~/Obsidian/vault を Vault として開き、以下のコアプラグインを有効化します:
- Templates
- Daily notes
- Quick switcher
- Graph view
- Backlinks
- File recovery
- Tag pane
Phase 4:iPhone 同期
Möbius Sync(有料買い切り)を使い、External Folder 機能で Obsidian のサンドボックス内に直接同期することで、Obsidian iOS が Vault として認識できます。
Möbius Sync → Add Folder → Pick External Folder
→ Files app → On My iPhone → Obsidian → obsidian-vault を選択
→ Folder ID をラズパイ側の Folder ID と一致させる
Phase 5:Copilot プラグイン(AI チャット)
Obsidian の Community Plugins から「Copilot for Obsidian」をインストールし、Gemini 3.5 Flash(OpenRouter 経由)を設定します。
推奨設定:
Temperature : 0.3
Token limit : 8000
Vision : ON
Reasoning : OFF
Phase 6:AI による自動リンク付与
ラズパイ上で Python スクリプトを 1 時間ごとに cron 実行し、更新されたノートに関連ノートへのリンクを自動挿入します。
# 主要な処理フロー
# 1. vault/ を走査して更新ノートを検出
# 2. Google Gemini API に「関連ノートを N 件選んで」とプロンプト
# 3. ノート末尾に関連セクションを自動挿入
SECTION_START = "<!-- AI-LINKS-START(自動生成 / 手動編集不可) -->"
SECTION_END = "<!-- AI-LINKS-END -->"
挿入例:
<!-- AI-LINKS-START(自動生成 / 手動編集不可) -->
## 関連ノート
- [[Kubernetes NodeAffinity]]
- [[2026-05-20]]
<!-- AI-LINKS-END -->
# パッケージインストール
pip3 install google-genai python-dotenv --break-system-packages
# cron 登録
crontab -e
# 0 * * * * /usr/bin/python3 /mnt/<ssd>/obsidian/scripts/ai-linker.py
Phase 7:バックアップ
# backup.sh(毎日 02:00 実行、7世代保持)
VAULT_DIR="/mnt/<ssd>/obsidian/vault"
BACKUP_DIR="/media/<user>/<hdd>/obsidian/backup"
DATE=$(date +%Y-%m-%d)
tar -czf "${BACKUP_DIR}/${DATE}.tar.gz" \
-C "$(dirname ${VAULT_DIR})" "$(basename ${VAULT_DIR})"
find "${BACKUP_DIR}" -name "*.tar.gz" -mtime +7 -delete
crontab -e
# 0 2 * * * /bin/bash /mnt/<ssd>/obsidian/scripts/backup.sh
日常の使い方
| やりたいこと | 操作 |
|---|---|
| とりあえずメモ |
Cmd+N → 00_Inbox に書く |
| 今日の記録 |
Cmd+P → Open today's daily note |
| 技術ナレッジ | 03_Tech にノート作成 → テンプレート挿入 |
| AI に要約させる | Copilot チャットで「このノートを要約して」 |
| 関連リンク確認 | 1時間後にノート末尾の関連ノートセクションを確認 |
工夫した点・ハマった点
Syncthing のフォルダパスが意図せず変わった
Mac からの共有通知をラズパイが受信した際、デフォルトパス(~/obsidian/vault)で新規フォルダが作られてしまいました。config.xml を直接編集して正しいパス(/mnt/<ssd>/obsidian/vault)に修正し、.stfolder マーカーファイルを再作成することで解決しました。
iOS での Obsidian 同期
Obsidian iOS は最新版で「既存フォルダを開く」機能がなく、Möbius Sync のサンドボックスと Obsidian のサンドボックスを繋ぐには有料の External Folder 機能が必要でした。
google.generativeai の非推奨化
スクリプト作成時に google.generativeai パッケージが非推奨になっており、google.genai パッケージへの移行が必要でした。
# 旧(非推奨)
import google.generativeai as genai
genai.configure(api_key=api_key)
model = genai.GenerativeModel("gemini-3.5-flash")
# 新
from google import genai
client = genai.Client(api_key=api_key)
client.models.generate_content(model="gemini-3.5-flash", contents=prompt)
今後の予定
- プライベートな内容を扱うようになったら、ローカル AI(Ollama + Qwen2.5 14B on MBP M5 Pro)に切替
- runbook の整備
まとめ
Syncthing による自己ホスト同期と Gemini API による自動リンク付与を組み合わせることで、クラウド依存を最小限にした PKM 環境を構築できました。ノートを書いて 1 時間後には関連ノートが自動でリンクされるため、知識がネットワーク状につながっていくのを実感できます。