Mac: iCloud Drive の指定フォルダをローカルに保持し続ける方法
はじめに
MacOS の iCloud Drive には、ストレージ容量が不足してきた時に自動でファイルをクラウドへ移動する「最適化されたストレージ」機能があります。通常は便利な機能ですが、以下のような場合に問題が発生することがあります。
- 頻繁にアクセスする作業フォルダがクラウドに移動される
- オフラインでの作業に支障が出る
- バージョン管理システムとの連携に問題が生じる
この記事では、特定のフォルダを常にローカルに保持する方法を紹介します。
解決方法の概要
iCloud Drive 上の特定フォルダを常にローカルに保持するには、以下の方法が効果的です。
-
touch -a
コマンドで定期的にファイルのアクセス時間を更新 -
cron
でコマンドを自動実行
実装手順
1. atime 更新の有効性確認
まず、システムで atime
(アクセス時間)の更新が有効になっているか確認します。
mount | grep iCloud
2. cron の設定
cron にフルディスクアクセスを許可
-
ターミナルで iAWriter フォルダにアクセスできるかチェック
ls -la "$HOME/Library/Mobile Documents/com~apple~CloudDocs/"
- (メモ: ユーザーディレクトリは
~
だとダメ。find コマンド内で使うと、文字列として扱い展開しないため)
-
システム設定 → プライバシーとセキュリティ → フルディスクアクセス を開く
-
ターミナル にチェックが入っていることを確認 ★★してない
-
フルディスクアクセスに cron を追加する
- "+" ボタンを押し /usr/sbin/cron を追加
-
cron を再起動し設定を反映
sudo launchctl stop com.vix.cron sudo launchctl start com.vix.cron
定期的に実行させる設定
-
ターミナルで以下のコマンドを実行し、crontab を編集します
crontab -e
-
以下の行を追加します(12時間おきに実行、ログを記録)
0 */12 * * * find ~/Library/Mobile\ Documents/com~apple~CloudDocs/iAWriter -type f -exec touch -a {} \; >> ~/cron_log.txt 2>&1
スケジュール設定の内容
-
0
- 毎回0分に -
*/12
- 12時間おきに(0時、12時) -
* * *
- 毎日、毎月、すべての曜日 -
>> ~/cron_log.txt 2>&1
- ログを記録
-
-
:wq
で保存して終了(初回は Mac のセキュリティ許可が必要)
トラブルシューティング
atime 更新が無効の場合の代替方法
atime
の更新が無効(noatime
)の場合は、cat
コマンドを使用する方法が有効です。
find ~/Library/Mobile\ Documents/com~apple~CloudDocs/iAWriter -type f -exec cat {} > /dev/null \;
この方法でも同様に cron でスケジュール設定できます。
よくある質問
Q: フォルダの「ダウンロードを保持」機能では不十分?
A: 「ダウンロードを保持」機能は基本的に有効ですが、以下の理由で不安定な場合があります。
- ストレージ容量が極端に少なくなった場合の挙動が不確実
- システムアップデートで動作が変更される可能性
Q: 「最適化されたストレージ」を無効にする方法は?
A: システム設定 > Apple ID > iCloud で「Macのストレージを最適化」を無効にできますが、すべての iCloud Drive ファイルがローカルに保存されるため、ストレージ効率が悪くなります。
まとめ
この方法を使うことで、以下のようなメリットがあります。
- 特定のフォルダを確実にローカルに保持
- クラウド同期の利点を維持
- ストレージ容量の自動最適化も活用
必要なフォルダだけを選択的にローカルに保持できるため、iCloud Drive の利点を活かしながら、作業効率を維持することができます。
Discussion