macOS Big SurでSafariとChromeのブラウザのキャッシュをRamDiskに設定する

2021年5月5日(水)

久々の投稿です。今年新しいiMacを買いました。
Windowsを動かすのにIntelのCPUが必要なので、入手できるうちにということで、Retina 5Kです。
メモリを無駄に64GBも搭載していますが、はっきり言って余っています。

無駄なRAMがあるならRamDisk、ということで久々にブラウザのキャッシュをRamDiskに設定しようとしたのですが、昔と違って制限があるみたいですね。

最新の情報を集めていたのですが、
MacOSX 簡単にブラウザのキャッシュをRamDiskにあてる
こちらの方の情報通り設定したら、ChromeのキャッシュはRamDiskに設定出来ました。
ですが、私のメインブラウザはSafariです。Chromeはサブでしか使っていません。

Safariのキャッシュは少し前のmacOSから「~/Library/Containers/com.apple.Safari/Data/Library/Caches」です。
Sandboxのせいだと思うのですが、Chromeと同じ感じで設定してもRamDiskにはキャッシュファイルが作成されませんでした。
ネット上にはSafariの情報が古い物(動かない物)しか無いのはこのせいなのかなと思われます。

試しに~/Library/Containers/Safariの中に適当なフォルダを作ってシンボリックリンクを設定してみましたが、その場合はシンボリックリンクの先にキャッシュが作成されました。
~/Library/の下に作ったフォルダだとダメでした。
Sandboxの場合はContainersのアプリケーションのフォルダの外へは書き込みできない仕様っぽいです。

昔LinuxのSFTPのChrootとApacheのsuEXECとかもでも同じような事があったので、
「/Volume/にマウントしてシンボリックリンクではなく、ユーザーフォルダに直接マウントすればいいのでは?」ということでまた調べました。

macOSでChromeのキャッシュ先にRAMディスクを使用する
こちらの方はRamDiskを直接Chromeのキャッシュフォルダにマウントしていました。
この方法ならSafariでもいけそうな感じです。
こちらの方法でも問題なくChromeのキャッシュはRamDiskに設定できました。
ただ、Automator上でデフォルトの/bin/zshだとなんでだか動かないのですが、この辺の挙動の違いがいまいちわかってない状態です。

ターミナルのzsh上でもコピペだとhdiutilコマンドの結果の変数が違う値が入っていて上手く動きませんでした。
echoすると正しい値(/dev/diskXX)が表示されるんですが、newfs_hfsコマンドに渡すときは違う物(/dev/rdiskXX)になっています。やはりよくわかりません。

Safariに挑戦したのですが、Automatorでシェルスクリプトの動作確認まではOKだったんですが、いざアプリケーションにして実行した場合、「~/Library/Containers/com.apple.Safari/Data/Library/Caches」の削除のところで”Operation not permitted”のエラーが出ます。
Automator上の動作確認と、アプリケーションの実行では動きが違うようです。

Automatorは諦めて、最初のURLの方のようにシェルスクリプトに実行権限をつけてログイン時に実行したところ上手くいきました。
シェルスクリプトのファイル名の拡張子は.shだとテキストエディタが実行されてしまうので、ターミナルが実行されるように.commandにします。

ということで、下記がシェルスクリプトの内容です。変なところあるかもしれません。

#!/bin/sh
set -eu

SIZE=256
CACHE_PREFIX=${HOME}/Library/Caches/Google

rm -rf   "${CACHE_PREFIX}"
mkdir -p "${CACHE_PREFIX}"
device=$(hdiutil attach -nomount ram://$((SIZE * 1024 * 2 ** 10 / 512)))
newfs_hfs -v "Chrome Cache" ${device}
mount -o nobrowse -o noatime -t hfs ${device} "${CACHE_PREFIX}"

SIZE=256
CACHE_PREFIX=${HOME}/Library/Containers/com.apple.Safari/Data/Library/Caches

rm -rf   "${CACHE_PREFIX}"
mkdir -p "${CACHE_PREFIX}"
device=$(hdiutil attach -nomount ram://$((SIZE * 1024 * 2 ** 10 / 512)))
newfs_hfs -v "Safari Cache" ${device}
mount -o nobrowse -o noatime -t hfs ${device} "${CACHE_PREFIX}"

#killall Terminal

mountに”-o nobrowse”を付けてFinderに表示されないようにしています。
最後に”killall Terminal”で自動終了できますが、なんか変になるので使用をやめました。
Macのターミナルで exit したらウインドウも閉じるようにするの設定で、ウィンドウは閉じるようにしています。

“chmod +x”してログイン項目に追加すると、起動時にSafariとChromeのキャッシュがRamDisk化されます。

SafariとChromeで別のRamDiskになって容量が倍になるのが難点ですね。

他のソフトでもデータ置き場にシンボリックリンクのRamDiskが使用できないものがありましたが、この方法ならいけました。