macOS TahoeでSafariとChromeのブラウザのキャッシュをRam Diskに設定する

Big Surの時にもやっていたことはあるのですが、今更またブラウザのキャッシュをRam Diskに設定することにしました。

Retina 5KのiMacを買ってから、もう5年近くも経つのですね。時の流れが速くて恐ろしいです。
メモリを64GBにしていたので全然メモリ不足などもなく、転職して自宅のMacで作業することも減ったため、まだまだ現役だと思っていましたがいつ壊れてもおかしくないですね。
Intel Mac、すごい便利でしたが、そろそろArmにしないとだめですかね。メモリ高騰の影響もMacにあるのかわかりませんが…。

さて、表題に戻ります。
最近はMacでブラウザぐらいしか見ていないので、メモリも余りまくっているので、Ram Diskに回そうと数年ぶりに思い立ちました。

いつからサポートしているのかは調べていませんが、Tahoeではtempfsが使用できるようです。
TmpDiskというRam Diskを作成する便利なツールで、tempfs、APFS、HFS+でベンチマークで比較してみたところ、tempfsが爆速、APFSはそれなり、HFS+はランダムが激遅、という感じでした。
というわけでtempfsを今回は採用します。

tempfs、APFS、HFS+のいずれも、実使用メモリしか使用しないようになっていました。
大きいサイズを割り当てても安心です。

余談ですが、macOSのtempfsはファイルサイズ制限はないようなのですが、Finderでtempfsへコピーする場合は1G程度が限界のようでした。FAT16あたりと誤判定されているのでしょうか?
ターミナルでのコピーや、アプリケーションでの利用は大丈夫なようです。

また、Safariのキャッシュですが、Ram DiskをBig Surの時の”~/Library/Containers/com.apple.Safari/Data/Library/Caches”にマウントすると、Safariが起動しなくなります。OSのチェックが厳しくなったようです。

Tahoeでは一つ下の階層の”~/Library/Containers/com.apple.Safari/Data/Library/Caches/com.apple.Safari”へマウントするのが正解です。

TmpDiskは何もしないと上記のコンテナディレクトリの中にマウントすることはできないのですが、
フルディスクアクセス(FDA)を有効にすればコンテナディレクトリの中にもtmpfsが作成可能となりますので、この後のややこしいことはしなくて大丈夫です。
ただ、なぜかTmpDiskはtmpfsだとFinderに非表示にしてくれません。

Finderにマウントされたtmpfsを表示したくない場合はこの後の作業でマウントする必要があります。

なお、通常はログイン時の自動処理はLaunchAgentsをする場合が多いと思いますが、SandBox下の「~/Library/Containers/」配下へのアクセスにはFDAが必要ですが、FDAをLaunchAgentsに対して許可できないため、Automatorを利用することにしました。

  1. Automatorで新規アプリケーションを作成
  2. 「シェルスクリプトを実行」で、以下の内容を追加
----------------
#!/bin/zsh
set -eu

SIZE=8G

#Safari
CACHE_PATH=~/Library/Containers/com.apple.Safari/Data/Library/Caches/com.apple.Safari
rm -rf "${CACHE_PATH}"
mkdir -p "${CACHE_PATH}"
sudo mount_tmpfs -o nobrowse -s "${SIZE}" "${CACHE_PATH}"

#Chrome
CACHE_PATH=~/Library/Caches/Google/Chrome
rm -rf "${CACHE_PATH}"
mkdir -p "${CACHE_PATH}"
sudo mount_tmpfs -o nobrowse -s "${SIZE}" "${CACHE_PATH}"
----------------
  1. 「tmpfs_cache.app」として自分のアプリケーションフォルダ等に保存
  2. システム設定のプライバシーとセキュリティで作成したappにFDAを許可
  3. システム設定の一般>ログイン項目でログイン時に開くに追加
df -h
----------------
Filesystem        Size    Used   Avail Capacity iused ifree %iused  Mounted on
/dev/disk1s4s1   466Gi    11Gi   296Gi     4%    453k  3.1G    0%   /
devfs            223Ki   223Ki     0Bi   100%     772     0  100%   /dev
/dev/disk1s5     466Gi   2.7Gi   296Gi     1%    2.9k  3.1G    0%   /System/Volumes/Preboot
/dev/disk1s7     466Gi    20Ki   296Gi     1%       0  3.1G    0%   /System/Volumes/VM
/dev/disk1s3     466Gi   3.8Mi   296Gi     1%      36  3.1G    0%   /System/Volumes/Update
/dev/disk1s1     466Gi    23Gi   296Gi     8%    258k  3.1G    0%   /System/Volumes/Data
map auto_home      0Bi     0Bi     0Bi   100%       0     0     -   /System/Volumes/Data/home
tmpfs            4.0Gi   4.0Ki   4.0Gi     1%       3  1.0M    0%   /Users/user/Library/Containers/com.apple.Safari/Data/Library/Caches/com.apple.Safari
tmpfs            4.0Gi   4.0Ki   4.0Gi     1%       3  1.0M    0%   /Users/user/Library/Caches/Google/Chrome
----------------