Safariスタートページのアイコンをカスタム

Warning
この記事で解説している方法はいずれもシステムファイルを操作するものです。知識のある人が自己責任で行ってください。
Note
環境
・macOS 15 Sequoia
・Safari 18
この記事の対象はmacOSです。iOSには対応していません。
メインのWebブラウザとして、Apple製品ではSafari、LinuxではFirefoxフォークのFloorpを使っています。
Safariのスタートページは広告はもちろんSafariのロゴすらないというSimple is Bestなデザインで非常に好きなんですが、一つ不満があります。
ブックマークアイコンをカスタムできない!!
FireFoxでは画像URLを指定することができるのですが、Safariで編集できるのは名前のみでアイコンは指定できません。
運営者がきちんとしたアイコンを設定していれば問題ないのですが、現実はこんな感じです。
- Youtube: 背景が透過している
- Gitea: Safariによってマージンが追加されている
- Amazon: そもそも画像がない
これではせっかくのシンプルなデザインが台無しです。
もちろん自分が運営しているサイトであれば、サーバーの設定を見直せばいいだけですが(実際、Giteaは自分で画像を差し替えて直しました)、ほとんどの場合そうはいきません。
さらに厄介なことに、この画像はバックグラウンドで取得されるようで、開発ツールでmetaタグを書き換えても効果なしです。
そのため、今回はシステムファイルを直接操作して変更します。
画像を書き換える
まず、画像を書き換えます。
アイコン画像は~/Library/Safari/Touch Icons Cache/Images
下に保存されています。ファイル名は{hostのmd5ハッシュ値(UPPERCASE)}.png
となっているので、これを書き換えたり、新規作成してください。
ちなみにハッシュ値はmd5コマンドで取得できます。
md5 -s www.google.co.jp | tr '[:lower:]' '[:upper:]'
# 5A539F8E2AC562762F36E76E15AE04C6
Note
理由は分かりませんが、カラープロファイルが入っていると表示されなくなることがあるので、エンコード設定で削除することをお勧めします。
この時点でSafariを再起動すると半分くらいのサイトは変更できてますが、残りは画像が表示されなくなったりします。アイコンの情報がデータベースに記録されているため、画像を書き換えるだけではうまくいかない場合があるのです。
設定が無いならDBを直叩きすれば良いじゃない
Safariのブックマークアイコンの情報はSQLiteで~/Library/Safari/Touch Icons Cache/TouchIconCacheSettings.db
に記録されています。これを書き換えできれば、どんなサイトのアイコンもカスタムし放題になります。
中にはcache_settings
というテーブルがあり、このような構造になっています。
sqlite> .schema
CREATE TABLE cache_settings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
host TEXT NOT NULL UNIQUE,
last_request_date REAL NOT NULL,
last_request_was_in_user_loaded_page BOOLEAN NOT NULL DEFAULT 0,
request_count INTEGER NOT NULL DEFAULT 0,
icon_is_in_cache BOOLEAN NOT NULL DEFAULT 0,
download_status_flags INTEGER NOT NULL DEFAULT 0,
extracted_color BLOB NULL,
transparency_analysis_result INTEGER NOT NULL DEFAULT 0,
uuid TEXT NULL,
last_response_status_code INTEGER NOT NULL DEFAULT 0
);
それぞれの値は以下のようになります。正式な文書がないのでいずれも推測です。
key | 説明(推測) |
---|---|
id | AUTOINCREMENT |
host | ホスト名 |
last_request_date | 2001-01-01からの秒数 |
last_request_was_in_user_loaded_page | 読んで字の如く |
request_count | 読んで字の如く |
icon_is_in_cache | アイコンが保存されているか |
download_status_flags | download_status_flagsと同じ? |
extracted_color | 使われてない? |
transparency_analysis_result | 0~4 |
uuid | 使われてない? |
last_response_status_code | ステータースコード |
DB書き換え
UPDATE
で直接書き換えてもいいですが、DBを作り直す方が気分スッキリでおすすめです。
まず、以下のコマンドでDBを作成します。
SQLite3はmacOSに標準でインストールされています。
sqlite3 TouchIconCacheSettings.db
次に、テーブルを作成
CREATE TABLE cache_settings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
host TEXT NOT NULL UNIQUE,
last_request_date REAL NOT NULL,
last_request_was_in_user_loaded_page BOOLEAN NOT NULL DEFAULT 0,
request_count INTEGER NOT NULL DEFAULT 0,
icon_is_in_cache BOOLEAN NOT NULL DEFAULT 0,
download_status_flags INTEGER NOT NULL DEFAULT 0,
extracted_color BLOB NULL,
transparency_analysis_result INTEGER NOT NULL DEFAULT 0,
uuid TEXT NULL,
last_response_status_code INTEGER NOT NULL DEFAULT 0
);
データを書き込みます。
example.com
を設定するホスト名に変えて、あとは固定値でokです。
これをカスタムしたいサイトごとに行ったら、.quit
で抜けます。
INSERT into cache_settings(host, last_request_date, last_request_was_in_user_loaded_page, request_count, icon_is_in_cache, download_status_flags, transparency_analysis_result, last_response_status_code)
values("example.com", 800000000.000000, 1, 1, 1, 1, 1, 200);
生成されたファイルを~/Library/Safari/Touch Icons Cache/TouchIconCacheSettings.db
に移動して完了です。
mv -f "TouchIconCacheSettings.db" "$HOME/Library/Safari/Touch Icons Cache/TouchIconCacheSettings.db"
(追記)シェルスクリプト作りました
以下のスクリプトのsites=...
の部分を書き換えて保存、実行権限を付与して実行してください。
sites=("www.google.com" "www.youtube.com" "mi.moris.day" "git.moris.day" "github.com" "ja.wikipedia.org" "www.apple.com" "www.amazon.co.jp")
sqlite3 TouchIconCacheSettings.db "CREATE TABLE cache_settings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
host TEXT NOT NULL UNIQUE,
last_request_date REAL NOT NULL,
last_request_was_in_user_loaded_page BOOLEAN NOT NULL DEFAULT 0,
request_count INTEGER NOT NULL DEFAULT 0,
icon_is_in_cache BOOLEAN NOT NULL DEFAULT 0,
download_status_flags INTEGER NOT NULL DEFAULT 0,
extracted_color BLOB NULL,
transparency_analysis_result INTEGER NOT NULL DEFAULT 0,
uuid TEXT NULL,
last_response_status_code INTEGER NOT NULL DEFAULT 0
);"
for site in ${sites[@]}
do
sqlite3 TouchIconCacheSettings.db \
"INSERT into cache_settings(host, last_request_date, last_request_was_in_user_loaded_page, request_count, icon_is_in_cache, download_status_flags, transparency_analysis_result, last_response_status_code)
values('${site}', 800000000.000000, 1, 1, 1, 1, 1, 200);"
done
mv -f "TouchIconCacheSettings.db" "$HOME/Library/Safari/Touch Icons Cache/TouchIconCacheSettings.db"
完成
非常にすっきりとしてとても良いですね。
macを移行したときのためにDBやアイコン画像はバックアップしておきましょう。
Note
自分が使ってるブックマークアイコンはここに保管してあります
https://moris.day/files/favicon/