🐸

Mac: iCloud Drive の指定フォルダをローカルに保持し続ける方法

2025/03/08に公開

はじめに

MacOS の iCloud Drive には、ストレージ容量が不足してきた時に自動でファイルをクラウドへ移動する「最適化されたストレージ」機能があります。通常は便利な機能ですが、以下のような場合に問題が発生することがあります。

  • 頻繁にアクセスする作業フォルダがクラウドに移動される
  • オフラインでの作業に支障が出る
  • バージョン管理システムとの連携に問題が生じる

この記事では、特定のフォルダを常にローカルに保持する方法を紹介します。

解決方法の概要

iCloud Drive 上の特定フォルダを常にローカルに保持するには、以下の方法が効果的です。

  1. touch -a コマンドで定期的にファイルのアクセス時間を更新
  2. cron でコマンドを自動実行

実装手順

1. atime 更新の有効性確認

まず、システムで atime(アクセス時間)の更新が有効になっているか確認します。

mount | grep iCloud

2. cron の設定

cron にフルディスクアクセスを許可

  1. ターミナルで iAWriter フォルダにアクセスできるかチェック

    • ls -la "$HOME/Library/Mobile Documents/com~apple~CloudDocs/"
    • (メモ: ユーザーディレクトリは ~ だとダメ。find コマンド内で使うと、文字列として扱い展開しないため)
  2. システム設定 → プライバシーとセキュリティ → フルディスクアクセス を開く

  3. ターミナル にチェックが入っていることを確認 ★★してない

  4. フルディスクアクセスに cron を追加する

    • "+" ボタンを押し /usr/sbin/cron を追加
  5. cron を再起動し設定を反映

    sudo launchctl stop com.vix.cron
    sudo launchctl start com.vix.cron
    

定期的に実行させる設定

  1. ターミナルで以下のコマンドを実行し、crontab を編集します

    crontab -e
    
  2. 以下の行を追加します(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 - ログを記録
  3. :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 の利点を活かしながら、作業効率を維持することができます。

GitHubで編集を提案

Discussion