キャッシュを削除するコードの書き方と実装例

はじめに

キャッシュはアプリケーションやシステムの動作を高速化するために一時的に保存されるデータですが、古くなったり破損したりすると、逆にパフォーマンス低下や不具合の原因となることがあります。そのため、定期的なキャッシュ削除はシステムメンテナンスの重要な作業です。本記事では、Linux、Windows、Webブラウザ、Adobe AEM CDN、モバイル端末など、さまざまな環境におけるキャッシュ削除の具体的なコードやコマンド、実装例を詳しく解説します。これらの知識を活用することで、効率的なキャッシュ管理が可能になるでしょう。

Linuxにおけるキャッシュ削除のコード

Linuxシステムでは、カーネルが管理するページキャッシュ、ディレクトリエントリ、inodeを手動でクリアする方法が標準的に用意されています。具体的には、root権限で次のコマンドを実行することで、キャッシュを解放できます。

echo 3 > /proc/sys/vm/drop_caches

このコマンドは、ページキャッシュ、ディレクトリエントリ、inodeをすべて破棄します。数値「3」はビットマスクで、1がページキャッシュ、2がディレクトリとinode、3がその両方を意味します。通常の運用中に安全に実行でき、システムのメモリ使用量が即座に減少します。ただし、キャッシュが削除されることでディスクI/Oが増加する可能性があるため、実行のタイミングには注意が必要です。

システム全体のキャッシュ削除コマンド

先ほどのコマンドは即座にキャッシュを削除するため、スクリプトに組み込むことで自動化にも利用できます。例えば、メモリ使用量が閾値を超えた場合にのみ実行するように制御することも可能です。また、以下のようにsyncを事前に実行することで、ダーティページをディスクに書き出してからキャッシュをクリアするのが推奨されます。

sync && echo 3 > /proc/sys/vm/drop_caches

このコマンドは、システム全体のメモリキャッシュを安全にクリアする定型句として広く知られています。詳細なメカニズムについては、Linux Kernel DocumentationのDrop Cachesを参照してください。

自動化スクリプトの作成とcronによる定期実行

手動実行ではなく、定期的にキャッシュを削除したい場合は、Bashスクリプトを作成してcronに登録する方法が簡単です。まず、以下のようなスクリプトファイルを作成します。

キャッシュを削除するコードの書き方と実装例 - 1

#!/bin/bash
sync
echo 3 > /proc/sys/vm/drop_caches
echo "Cache cleared at $(date)" >> /var/log/clear_cache.log

このスクリプトをclear_cache.shという名前で保存し、実行権限を付与します。

chmod a+x clear_cache.sh

その後、cronジョブとして登録します。例えば、毎日午前3時に実行する場合は、crontab -eで以下の行を追加します。

0 3 * * * /path/to/clear_cache.sh

これにより、自動的にキャッシュが削除され、ログが記録されます。スケジュールの頻度はシステムの負荷や要件に応じて調整してください。

Windowsにおけるキャッシュ削除のコード

Windows環境では、コマンドプロンプトやPowerShellを用いて一時ファイルやWindows Updateのキャッシュを削除できます。例えば、システムのTempフォルダをクリアするコマンドは次のとおりです。

del /s /q %systemroot%\Temp\*.*

キャッシュを削除するコードの書き方と実装例 - 2

また、Windows Updateのダウンロードキャッシュを削除するには、以下のコマンドを実行します。

del /s /q %windir%\SoftwareDistribution\Download\*.*

これらの削除後、Windows Update関連サービスを再起動すると効果的です。

net stop wuauserv
net start wuauserv

これらのコマンドをバッチファイルにまとめ、タスクスケジューラで定期実行することも可能です。管理者権限で実行する必要がある点に注意してください。

テンポラリファイルとWindows Updateキャッシュの削除

上記のコマンドに加えて、ユーザーごとのTempフォルダやインターネット一時ファイルも削除対象となります。例えば、現在のユーザーのTempフォルダは%temp%で参照できます。以下のように記述することで、より徹底したクリーンアップが可能です。

del /s /q %temp%\*.*

さらに、ディスククリーンアップツール(cleanmgr.exe)をコマンドラインから呼び出すこともできますが、今回はコードベースの手法に焦点を当てています。Windows Updateのキャッシュ削除は、特に更新プログラムのインストールに失敗した場合に有効です。これらの手順については、Procedimento.com.brのWindowsキャッシュ削除スクリプトで詳しく紹介されています。

キャッシュを削除するコードの書き方と実装例 - 3

ウェブブラウザおよびサービスワーカーのキャッシュ削除

Google Chromeなどのブラウザでは、ユーザーインターフェースから手動でキャッシュを削除する方法が一般的です。具体的には、メニューから「その他のツール」→「閲覧履歴を消去」を選択し、「キャッシュされた画像とファイル」にチェックを入れて削除します。この操作はコードではなく、GUIによるものです。

一方、Service Workersを利用するWebアプリケーションでは、JavaScriptのCache APIを使ってプログラム的にキャッシュを削除できます。Service Workerのスクリプト内で、特定のキャッシュ名を指定して削除するコードは以下のようになります。

caches.delete('my-cache-v1');

このコードは、CacheStorageオブジェクトのdeleteメソッドを呼び出し、該当するキャッシュストアを完全に削除します。

JavaScriptによるService Workers Cache APIの利用

Service Workersのキャッシュ管理は、アプリケーションの更新時に古いキャッシュをクリアする目的でよく使用されます。例えば、新しいバージョンが公開された際に、以前のキャッシュをすべて削除し、最新のアセットを再取得するといった処理です。具体的な実装例を以下に示します。

self.addEventListener('activate', function(event) {
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.filter(function(cacheName) {
return cacheName !== 'my-cache-v2';
}).map(function(cacheName) {
return caches.delete(cacheName);
})
);
})
);
});

このコードでは、activateイベントが発生したときに、現在のバージョン以外のキャッシュをすべて削除します。これにより、古いキャッシュが残って不具合を引き起こすのを防げます。詳細なAPI仕様はMDN Web Docsで確認できます。

Adobe AEM CDNのキャッシュ削除(HTTP PURGE)

Adobe Experience Manager(AEM)が利用するCDNのキャッシュを削除するには、HTTPのPURGEメソッドを使用します。特定のURLに対してPURGEリクエストを送信し、さらに認証用のヘッダーを付与することで、CDN上のキャッシュを無効化できます。以下はcurlコマンドを用いた例です。

キャッシュを削除するコードの書き方と実装例 - 4

curl -X PURGE https://yourdomain.com/path/to/page -H "X-AEM-Purge-Key: your-purge-key"

このリクエストが成功すると、CDNエッジ上の該当リソースのキャッシュが削除され、次回アクセス時にオリジンから最新のコンテンツが配信されます。PURGEキーはAEMの設定で事前に発行しておく必要があります。運用時には、スクリプト化して複数のURLを一括削除することも可能です。

モバイル端末のアプリキャッシュ削除(Samsung Galaxy)

Samsung Galaxy端末では、個々のアプリのキャッシュを設定画面から削除できます。手順としては、設定アプリを開き、「アプリ」→対象のアプリを選択→「ストレージ」→「キャッシュを削除」をタップします。この操作はコードではなく、ユーザーによる手動操作です。

開発者向けの方法としては、Androidのデバッグツール(ADB)を用いてコマンドラインからアプリのキャッシュを削除することも可能です。例えば、特定のパッケージ名を指定して以下のコマンドを実行します。

adb shell pm clear com.example.app

ただし、このコマンドはアプリのデータも含めてすべて消去するため、注意が必要です。キャッシュのみを削除する標準的なADBコマンドは存在しませんが、アプリ内の設定やストレージ管理機能を利用するのが安全です。

まとめとベストプラクティス

各環境におけるキャッシュ削除の方法を理解した上で、以下のベストプラクティスを参考にしてください。

  • システムキャッシュの削除は、メモリ使用量が高くなりすぎた場合や、明らかな不具合がある場合に限定して行う。
  • 自動化スクリプトを利用する際は、ログを取得して実行結果を確認できるようにする。
  • Webアプリケーションのキャッシュは、Service Workerのバージョン管理と合わせて適切なタイミングで削除する。
  • CDNのキャッシュ削除は、コンテンツ更新時に必要な最小限のURLに対してのみ実行する。
  • モバイルアプリのキャッシュ削除は、ユーザーに影響が少ないタイミングで促す。

また、各環境の特性を比較した表を以下に示します。

キャッシュを削除するコードの書き方と実装例 - 5
環境 主な方法 注意点
Linux (Kernel cache) echo 3 /proc/sys/vm/drop_caches 実行後にディスクI/Oが増加
Windows (Temp/Update) delコマンド、net stop/start wuauserv 管理者権限が必要
Web (Service Workers) JavaScript caches.delete() バージョン管理と併用
Adobe AEM CDN HTTP PURGE + X-AEM-Purge-Key キーの管理が必要
Samsung Galaxy (App) 設定画面から手動削除 データ削除と混同しない

この表を参考に、それぞれの環境に適したキャッシュ削除の方法を選択してください。

参考文献

Linux Kernel Documentation. "Drop Caches". https://www.kernel.org/doc/html/latest/admin-guide/drop_caches.html

Viva o Linux. "Limpando sua memória cache de forma simples". https://www.vivaolinux.com.br/dica/Limpando-sua-memoria-cache-de-forma-simples

Procedimento.com.br. "Script para Limpeza de Cache no Windows". https://www.procedimento.com.br/?p=go&os=windows&windows=script-para-limpeza-de-cache-no-windows

MDN Web Docs. "Cache.delete()". https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete

Adobe Experience Manager. "Purge Cache". https://experienceleague.adobe.com/pt-br/docs/experience-manager-learn/cloud-service/caching/how-to/purge-cache

Google Help. "Clear cache and cookies". https://support.google.com/accounts/answer/32050

Samsung Support. "Como limpar o cache e os dados de aplicativos em seu Galaxy". https://www.samsung.com/br/support/mobile-devices/como-limpar-o-cache-e-os-dados-de-aplicativos-em-seu

キャッシュ削除 コード 実装例 JavaScript PHP キャッシュ管理 開発
注意 内容は一般的な参考情報です。実装環境に応じて調整してください。
著者

Stefano Barcellos

Visite Barbados の寄稿者。

« 前の投稿
デスクトップアイコンの変更方法|簡単に変える手順

関連する投稿