2014年3月21日金曜日

Macで拡張機能を使わずにChromeのデータベースを最適化する

Chromeが重くなってきたときに、[閲覧履歴を消去...]で全て削除するとかなりの高速化が見込める。だけど、その後のウェブブラウジングが不便になってしまうので、自分はデータベースの最適化を時々行うようにしている。最適化なら効果はそこそこだけど、データが消去されることはない。

ターミナルから最適化

Chromeの起動中はファイルがロックされるので、あらかじめ終了させておく必要がある。Launchpadの[その他]グループや[アプリケーション]-[ユーティリティ]フォルダなどからターミナルを開いて、下記のコマンドを入力する(コピペでOK)。

find ~/Library/Application\ Support/Google/Chrome -type f -exec file {} \; | grep -i sqlite | sed -e "s/:.*$//" | xargs -I {} sqlite3 {} "VACUUM; REINDEX;"

やっていることは単純で、Chromeのユーザデータが保存されているフォルダから、サブフォルダにあるファイルも含めすべてのSQLiteのデータベースファイルを探し、それぞれのファイルに最適化コマンドを実行しているだけ。

sqlite3コマンドを使っているけど、OS X Tiger(10.4)以降ではプリインストールされているので、ほとんどの環境で問題なく動くと思う。自分が確認したのはMountain Lion(10.8)とSnow Leopard(10.6)で、Chromeのバージョンは33。

sqlite3のバージョンが古かったり、Chromeの更新で読み込めなくなった場合はOS X用のバイナリをダウンロード、展開してできたsqlite3/usr/local/bin/に置き、上で入力したコマンドのsqlite3の部分を/usr/local/bin/sqlite3に変更すればいい。

各ファイルのサイズを調べるには下記のようにする。最適化の前後で行えばどのくらい軽くなったかがわかる。

find ~/Library/Application\ Support/Google/Chrome -type f -exec file {} \; | grep -i sqlite | sed -e "s/:.*$//" | xargs -I {} du -h {}

ちなみに、VACUUMぐらい自動でやってるだろうと思ってChromiumのソースを確認してみたけど、履歴とサムネイルの全削除後にしかやっていないようだった。

ダブルクリックで実行

毎回コマンドを入力するのは面倒なので、次回からはダブルクリックで実行できるようにファイルに保存する。引き続きターミナルで以下のコマンドを実行すると、デスクトップにclean_chrome.shという名前のファイルができる。

echo '#!/bin/sh' > ~/Desktop/clean_chrome.sh
echo 'find ~/Library/Application\ Support/Google/Chrome -type f -exec file {} \; | grep -i sqlite | sed -e "s/:.*$//" | xargs -I {} sqlite3 {} "VACUUM; REINDEX;"' >> ~/Desktop/clean_chrome.sh
chmod +x ~/Desktop/clean_chrome.sh

ダブルクリックで実行すると結局ターミナルは開いてしまうけど、レスポンスが何もないのも不安なのでこれでいいと思う。

他のアプリケーションにも対応

ここまでChromeを対象に話を進めてきたけど、~/Library/Application\ Support/Google/Chromeの部分を変えれば、SQLiteを使うアプリケーションなら何でも対応できる。例えば、Firefoxの場合は~/Library/Application\ Support/Firefox/Profilesにすればいい。