個人ブログの運営やWeb開発において、「日常のメモやアイデア出し、ブログの運営手順書や開発ルールはObsidianにまとめ、スマホ・タブレット・PC間で手軽に同期したい」と考える方は多いはずです。これを最も手軽に、かつ無料で実現できるのが iCloud Drive によるVault同期です。
しかし、いざWebサイトのビルドやCLIスクリプト、AIによる開発自動化を本格的に動かそうとすると、「開発系のファイルはローカルに置かなければならない」 という絶対の制約にぶつかります。
その結果、「iCloudにあるルールや思考メモ」と「ローカルにある開発ファイル」で物理的な位置が完全にズレてしまい、開発の設計やパス解決、AIエージェントへの指示が途端に大変になる というジレンマが発生します。
この位置ズレを解消する運用手段はいくつか存在しますが、それぞれ一長一短があります。この記事では、検討したアプローチを比較・整理した上で、MacとWindowsの両対応を見据えた「最も美しく破綻しない共存アーキテクチャと構築手順」 をまとめました。
※本記事では、Google Antigravity、Gemini CLI、Claude Code、Cursorなど、プロジェクト直下の指示書(AGENTS.md や GEMINI.md、CLAUDE.md)やスキル定義(.agents/skills/)を自律的に読み込んで作業する最新のAIコーディングエージェント環境を前提としています。
1. 抱えていたジレンマ:iCloudとローカルの「位置ズレ」問題#
やりたかったこと:Obsidianに思考と開発ルールを集約したい#
思考メモやブログの下書きはもちろん、「ブログの執筆ルール」「運営手順」「AIへの指示スキル(.agents)」 もすべてObsidianのVault(blog)に一元管理したいと考えました。実体がiCloud Drive上にあれば、出先のiPhoneから手順書を手軽に見返したり、下書きを書き留めたりできるからです。
直面した壁:開発ファイルは絶対にiCloudに置いてはいけない#
一方、HugoやNode.js、WranglerなどのWeb開発リポジトリは、「絶対にiCloudに置いてはいけない(ローカルに置くべき)」 というのがエンジニア界隈の鉄則です。
開発ファイルをiCloudに置いたときに起きる3大事故
node_modulesの同期地獄: 数万個の微小なJSファイルをiCloudが1つずつクラウドへ同期しようとし、CPUとメモリが100%に張り付きファンが爆音で回り続けます。- ビルド時のファイルロックとクラッシュ:
hugo server等の実行中、ファイル生成とiCloudの同期ロックが衝突し、プレビューが頻繁にエラー落ちします。 - ストレージ最適化によるファイル消失: OSの空き容量確保機能によってソースコードや画像が勝手にクラウド退避(雲マーク)され、ビルド時に「ファイルが見つかりません」と失敗します。
👉 結論:開発系は絶対に「ローカル環境(~/Sites)」、メモやルールは「iCloud」に物理的に分ける必要があります。
結果として生じる「位置ズレ」問題#
しかし、開発系(~/Sites/site-a.com)と手順書・ルール(~/Library/.../blog)でフォルダのルートが完全に分かれてしまうと、次のような問題が噴出します:
- スクリプト内で長いiCloudの絶対パスを扱うことになり、環境依存やパス解決エラーが多発する。
- AIエージェントに「手順書に従って記事を書いて」と指示するとき、フォルダを跨ぐオーバーヘッドが発生する。
- MacとWindowsでiCloudの保存場所が全く異なるため、別のマシンへ移行したときにパス構造が崩れて動かなくなる。
2. 検討した解決策とプロコン(一長一短)#
この「位置ズレ」を埋めて両者をスムーズに連携させるために、いくつかの運用手法を検討しました。しかし、それぞれに一長一短(メリットと落とし穴)が存在します。
| 選択肢 | メリット | デメリット・落とし穴 | 判定 |
|---|---|---|---|
| ① Gitサブモジュール | リポジトリ内に手順書が物理的に配置される | ・Privateリポジトリの場合、Cloudflare等のCI/CDデプロイで認証エラーになる ・メモを直すたびに親・子の二重コミットが必要 ・コミット巻き戻り(先祖返り)事故が多発 | ❌ 非推奨 |
| ② シンボリックリンク直貼り | Mac上で手軽に繋げる | ・Windowsでは管理者権限や「開発者モード」が必要になり、標準の環境でトラブルになりやすい | 🔺 要注意 |
| ③ 完全なローカル並列配置 | 相対パス ../blog-vault で綺麗に繋がる | ・ObsidianのiCloud同期が使えなくなる(スマホからの手軽な閲覧・執筆を諦める必要あり) | 🔺 スマホ同期不可 |
| ④ 親フォルダへのリンク+擬似並列 | iCloud同期を維持しつつ、全サイトから相対パスで統一可能 | ・親フォルダに1回だけリンク(ジャンクション)を作る作業が必要 | ⭕️ 最適解 |
それぞれの課題を検証した結果、たどり着いたのが ④の「親フォルダにリンクを1本置く」擬似並列アーキテクチャ です。
3. 最適解:「親フォルダにリンクを1本置く」擬似並列アーキテクチャ#
すべての課題をクリアした構造がこちらです。
「開発親フォルダ(~/Sites)の中に、iCloudへのリンク(ジャンクション)を1本だけ生やす」 ことで、実体はiCloudに置いたまま、ローカルからは完全に並列なフォルダとして見せかけます。
全体アーキテクチャ図#
【iCloud Drive】
~/Library/.../Documents/blog/ ← [実体] スマホ・iPadと手軽に同期!
│ ├── drafts/ ← スマホから書く記事アイデア・下書き
│ ├── AGENTS.md
│ └── guides/
│ └── 03_ブログ運営手順.md
│
│ (リンク・ジャンクション)
▼
【ローカル開発環境】
~/Sites/ (Windowsなら C:\Sites\)
├── blog-vault/ ← ★iCloud実体へのショートカット
│ └── .agents/ ← ★AIの共通頭脳(スキル・ルール)
│ └── skills/blowfish/
│
├── site-a.com/ ← WebサイトA(Hugo + Blowfish)
│ ├── .agents -> ../blog-vault/.agents (共通AIをリンク)
│ ├── content/posts/ ← 本番記事(Page Bundle形式)
│ └── AGENTS.md ← サイト個別設定・AI指示書
│
└── site-b.com/ ← 将来のWebサイトB
└── .agents -> ../blog-vault/.agentsなぜこの構成が優れているのか?#
- iCloud同期を一切犠牲にしない: 実体はiCloudにあるため、外出先からスマホで手順書や下書きを閲覧・編集できます。
- すべてのサイトから「相対パス(
../blog-vault)」で統一: どのブログサイトからも、真横を見るだけで共通ルールに届きます。 - AIの共通頭脳(
.agents)を一元管理: PC全体(Global)を汚さず、~/Sites配下のブログだけで「Blowfishスキル」や「執筆ルール」を共有できます。 - MacとWindowsで100%同じ構造を再現可能: Macは
ln -s、Windowsはmklink /Jを1回打つだけで全く同じ世界が作れます。
4. 日常の執筆・運用フロー(Obsidian × ローカル開発 × AI)#
「位置ズレ」を解消したことで、日常の執筆フローは驚くほどシンプルになります。
flowchart LR
A["① スマホ/PCのObsidian
(iCloud: drafts/)
アイデア・箇条書き下書き"] --> B["② PCローカル
(~/Sites/site-a.com)
AIエージェントに清書指示"]
B --> C["③ Hugo Page Bundle
(content/posts/slug/)
自動生成・整形"]
C --> D["④ ローカル確認
npm run dev
ブラウザで表示確認"]
D --> E["⑤ 本番ビルド検証
npm run build
エラー・下書き残存防止"]
E --> F["⑥ git push
Cloudflare自動デプロイ"]
日常の3ステップ#
- 出先・スマホで下書き(Obsidian):
blog-vault/drafts/new-idea.mdに、思いついた構成案やメモを箇条書きでラフに書きます。iCloud経由でPCへ即座に同期されます。
- PCでAIエージェントに指示(ローカル開発環境):
- PCのターミナルで
cd ~/Sites/site-a.comに入り、AIにこう指示します:
「
../blog-vault/drafts/new-idea.mdの下書きを元に、../blog-vault/AGENTS.mdの参照ルールに従って、Blowfish形式でcontent/posts/my-slug/index.mdに清書して配置して」 - PCのターミナルで
- AIが記事化 → プレビュー確認して公開:
- AIがフロントマター(タイトル、タグ、カテゴリ、slug)を整え、適切なショートコードを配置してくれます。
- 手元で
npm run dev(内部でhugo serverを起動)で確認し、アイキャッチ画像を配置します。公開前にはnpm run buildで本番ビルドを検証し、下書き残存ファイルやエラーがないことを確認してからgit pushすれば安全に公開完了です。
下書きをHugoの複雑なPage Bundle構造で直接書く必要がなく、Obsidianの身軽さと静的サイトジェネレーターの堅牢性を両立できます。
5. 【完全作業手順書】ゼロから作る環境構築ステップ#
実際の環境構築や、別PCへの移行時にそのまま使える手順です。
ステップ1:開発親フォルダの準備とリンク作成#
【Macの場合】#
# 1. 親フォルダが存在しない場合は作成
mkdir -p ~/Sites
# 2. iCloudへのシンボリックリンクを作成
ln -s "$HOME/Library/Mobile Documents/iCloud~md~obsidian/Documents/blog" ~/Sites/blog-vault【Windowsの場合】#
コマンドプロンプト(cmd)を起動して実行します(ジャンクション mklink /J は管理者権限不要です):
:: 1. 親フォルダを作成
mkdir C:\Sites
:: 2. iCloudへのジャンクションを作成(※絶対パスで指定)
mklink /J "C:\Sites\blog-vault" "%USERPROFILE%\iCloudDrive\iCloud~md~obsidian\Documents\blog"Windows版iCloudの注意点
- フォルダ名の揺れ: Microsoft Store版などの環境により、パスが
%USERPROFILE%\iCloud Drive\...(半角スペース入り)になる場合があります。エクスプローラーのアドレスバーで実際のパスを確認してください。 - オフラインエラー(0x8007016A)対策: エクスプローラーで
blogフォルダを右クリックし、「常にこのデバイスに保持する」を選択してください。未ダウンロード状態のファイルがあると、CLIから読み込んだ際にエラーになります。
ステップ2:共通VaultにAIスキル・ルールを集約する#
blog-vault の中に、全サイト共通で使うAI設定フォルダ(.agents)を用意します。
# blog-vault 内に .agents/skills を作成
mkdir -p ~/Sites/blog-vault/.agents/skills
# テーマ同梱のAIスキル(例: Blowfish)を共通置き場へコピー
cp -r ~/Sites/site-a.com/themes/blowfish/.claude/skills/blowfish ~/Sites/blog-vault/.agents/skills/ステップ3:各Webサイトから .agents をリンクする#
各ブログサイトから、共通のAI頭脳へリンクを繋ぎます。
【Macの場合】#
cd ~/Sites/site-a.com
# 共通 .agents へのリンクを作成
ln -s ../blog-vault/.agents .agents
# リンクをGitで追跡しないよう .gitignore に追加
echo ".agents" >> .gitignore【Windowsの場合】#
cd C:\Sites\site-a.com
:: ※mklink /J は相対パス不可のため、絶対パスで指定します
mklink /J "C:\Sites\site-a.com\.agents" "C:\Sites\blog-vault\.agents"
:: .gitignore に追加
echo .agents >> .gitignoreステップ4:サイト固有設定とルール参照(AGENTS.md)#
各サイトのルート(~/Sites/site-a.com/AGENTS.md)に、共通ナレッジへの参照と個別設定、AIが安全に動くためのガードレールを記載します(※利用するAIツールに応じて GEMINI.md や CLAUDE.md としても同様に機能します):
# site-a.com AIエージェント指示書
## 資料の参照順序
1. `../blog-vault/AGENTS.md` の「AIが資料を読む順序」を参照の正本とし、作業に応じて該当手順を確認する。全資料を一括で読み込まない。
2. 過去のレビュー履歴や完了判定を、現在の作業指示として直接適用しない。
## 状態確認ファースト(二重適用防止)
- 指示された内容が既に反映されているかを必ず最初に確認し、反映済みであれば重複して再実行しない。
## ガードレール(絶対変更禁止事項)
- テーマ本体(`themes/blowfish/`)を直接編集しない(サイト側でオーバーライドする)。
- 既存記事のファイル名・画像名・slugを一括置換・リネームしない。
- `package.json` のビルドスクリプトから `--cleanDestinationDir` を外さない。
## このサイト固有の設定
- 公開ドメイン: https://site-a.com
- Cloudflare Worker名: site-a-com
- メインカテゴリ: AI活用, デジタルツール, ブログ運営6. 【おまけ】iCloud内のVaultをGit(GitHub)で無料バックアップする小技#
最後に、ちょっとした発展テクニックとしてのオマケです。
なぜiCloud管理なのにGitを使うのか?(同期 vs バックアップ)#
ObsidianのVaultをiCloudで運用していると、「同期はしてくれるけれど、誤って重要なメモを上書き・削除してしまったときの過去履歴バックアップがない」 という不安が残ります。
そこで、無料かつ最も堅牢なバックアップ手段の1つとしてGit(GitHubのプライベートリポジトリ)を併用する のがおすすめです。
- 端末間のリアルタイム同期: iCloud Drive に任せる(スマホ・PC間で手軽に同期)
- 念のための過去履歴・誤削除バックアップ: Git に任せる(GitHub等へ定期保存)
落とし穴:iCloud内に .git を置くとリポジトリが破損する#
ただし、Vault直下でそのまま git init してはいけません。
.git ディレクトリ内にある数千〜数万個の細かなGitオブジェクトをiCloudが同期しようとすると、同期ロックが衝突して Gitリポジトリが破損する(Corrupted repository) 事故が多発します。
解決策:.git(履歴実体)だけをローカル非同期領域に逃がす#
この問題は、Git標準の gitdir 参照機能 を使い、履歴実体だけをiCloudの外へ退避させることで完全に防げます。
【ローカル非同期領域】
~/.git-roots/blog-vault.git/ ← ★実際の .git(巨大な履歴データ)をここに置く!
【iCloud Drive】
~/Library/.../Documents/blog/
├── .git ← ★たった1行「gitdir: ...」と書かれたテキストファイル
├── AGENTS.md
└── drafts/設定手順(Macの場合)#
# 1. ローカル専用のGit退避フォルダを作成
mkdir -p "$HOME/.git-roots"
# 2. 既存の .git ディレクトリをローカルへ移動
mv "$HOME/Library/Mobile Documents/iCloud~md~obsidian/Documents/blog/.git" \
"$HOME/.git-roots/blog-vault.git"
# 3. iCloud側のVault直下に、ローカルの .git を指すポインタファイルを作成
echo "gitdir: $HOME/.git-roots/blog-vault.git" > \
"$HOME/Library/Mobile Documents/iCloud~md~obsidian/Documents/blog/.git"これにより、iCloud上には たった1行のテキストファイル(.git) しか同期されないため、同期遅延やリポジトリ破損のリスクがゼロになります。
バックアップ運用はメインPC(1台)で行うのが鉄則
「Windows側でもGitコミットできるように共通化できないか?」と考えるかもしれませんが、Git操作はメインPC(例: Mac)1台に限定するのがベスト です。
なぜなら、.git(コミット履歴)をローカルに逃がしている以上、Macでコミットした履歴はWindowsのローカルGitには届きません。本文だけがiCloudで同期されるため、両方でGit操作をすると「未コミットの謎の差分」が発生し、履歴の乖離や二重同期(コンフリクト)の事故を招くからです。
「同期はiCloudに任せ、Gitコミット&GitHubプッシュはメインPC1台でたまに行う」。この目的と役割分担を割り切ることが、安全に運用する秘訣です。
7. まとめ#
- 「Web開発=ローカル+GitHub」「思考・ルール=iCloud+Obsidian」 と割り切り、開発親フォルダにリンクを1本置くことで、両者のいいとこ取りが実現できます。
- 物理的な「位置ズレ」を解消することで、すべてのサイトから 「相対パス(
../blog-vault)」 で共通ルールや下書きを参照できるようになります。 - AI設定フォルダ(
.agents/)を共通化することで、複数サイト展開時もAIスキルや執筆ルールを1箇所でメンテナンスできます。 - ObsidianのバックアップにGitを使う場合は、
.gitをローカルへ逃がし、メイン機1台でバックアップ用として割り切る ことで、破損やコンフリクトを回避できます。
日常の作業時は、常に cd ~/Sites/site-a.com に入って作業するだけ。
これで、MacでもWindowsでも、CLI自動化でもAIペアプログラミングでも、迷いなく高速にブログ運営を回せる最強の基盤が整います。



