
みなさんこんにちは! ガノー(Ganohr)です! (≧▽≦)
WordPressのパフォーマンス・チューニングのために、「トランジェント」を定期的に削除することは一応理にかなっています。
しかし、WordPressでは歴史的な背景があるため、
トランジェントを不用意に削除することは推奨されません。そこでこの記事では安全にトランジェントを削除するために「期限切れのトランジェントにのみ限定して削除する方法」を紹介します。
更新履歴
WordPressのトランジェントとは何か? なぜトランジェントは期限切れかどうか確認した上で削除すべきなのか?

WordPressのトランジェントとは、データベースまたは外部キャッシュ上に格納される「一時的な記憶領域・及び・一時的なデータ」のことです。
WordPressは通常データベース上にトランジェントを記憶しますが、キャッシュプラグインなどがある場合、PHPのメモリ上にキャッシュが構築され、その中でトランジェントが動作していることがあります。
WordPressのトランジェントは通常トランジェントAPIを用いてアクセスします。
WordPressのトランジェントAPI(Transients API)とは?
トランジェントAPIはテーマ開発者やプラグイン開発者に、「簡単にアクセスできる一時的な記憶領域を提供する」ものです。
この際、期限切れとする期間を秒単位で指定できるため、SNSのカウント数のキャッシュや簡易的なアクセスカウンター、場合によっては不正アクセス対策の一環として簡易的なブロック状態の記憶など幅広い範囲で利用されています。
ここで注意しなければならないことは「一時的な領域であるからといって、無闇矢鱈に全てのトランジェントを削除してはならない」という当たり前のことです。
あまりWordPressの仕様に詳しくない方や、WordPressの開発と縁遠いなんちゃって開発者が、インターネット上に「WordPressのトランジェントを無条件で消す」ことを安易に発信しており、私はWordPressの技術者として大変遺憾に思っています。
そもそも論として「WordPressは前提として、期限切れのトランジェントを全て削除する機能を提供していない」ということを理解すべきです。
WordPressが期限切れのトランジェントを自動的に削除する挙動としては、あくまで同じトランジェントのキー名を参照した際に、そこで初めてそのトランジェントが期限切れかどうかを判定し、必要なら削除することになります。
WordPress自体が「トランジェントが無闇矢鱈に削除されることを想定していない」ことなど、火を見るより明らかでしょう。
トランジェントを削除する場合、必ず「トランジェントに設定された期限を確認した上で行うべき」なのです。
なぜWordPressの期限切れのトランジェントを削除した方がいいの? 本当に必要なの?

まず、基本的には「トランジェントは期限が切れていても、削除する必要が絶対にあるわけではない」という点を踏まえておいてください。
もしも本当に絶対削除すべきなのであれば、WordPressが正式に機能として実装されるはずです。
WordPressは迅速なレスポンスを実現するために、効果の薄い施策・機能の実装は必要十分なところで止めています。
期限切れのトランジェントを削除することは、基本的にはあまりサイトのパフォーマンスを向上させません。
しかし、期限切れのトランジェントが大量にある場合はそんなことは言ってられません。
あくまで当方の経験則にもとづきますが、wp_options
(※)テーブルが5万~10万レコードを超える辺りから、如実に速度低下が見られるようになります。
※ WordPressのトランジェントはwp_options
に格納されます。
当方は有償にてWordPressのサイトのパフォーマンス・チューニングを行っていますが、実際に大量のトランジェントが確認されたサイトは無数にあります。
ただし、実際のところそもそもそうしたサイトはキャッシュ機構自体が構築されていないため、速度低下の要因の1~2%程度でしかありません。
とはいえ実際に期限切れのトランジェントを削除することは、効果は薄いものの効果はあります。
したがって「パフォーマンス・チューニングの為に、期限切れのトランジェントを削除することは一定の意味はあるが、9割9部それ以外に原因がある」という理解をしておくと良いでしょう。
こうした理由により、「期限切れのトランジェントは、1日に一度自動的に削除する」といった運用で十分となります。
WordPressのトランジェントを期限切れかどうか確認した上で削除する方法
WordPressの機能としては存在しないため、SQLを発行して行うか、専用のプラグインを利用します。
当方は以下のプラグインを導入して対応しています。
このプラグインは無用な機能が無いため、コードレビューが行いやすい明確な利点があります。
『Delete Expired Transients』
Delete Expired Transientsdelete old, expired transients from WordPress wp_options table ... 外部サイトへアクセス
使い方はシンプルで①「ツール」をクリックし、②「Delete Transient」をクリックし、③「expired transients」(期限切れのトランジェント)を選択した状態で④「delete」(削除)を押すだけです。

WordPressのトランジェントをすべて消す
サイトを閉鎖する場合や、何らかの緊急事態が起こっており、サイト修復のためにやむを得ない場合は先程の「all transients — use with caution!」(全てのトランジェント―気をつけて利用すること!)を選択した状態で「delete」を押します。
基本的に、この機能を使用する必要はないでしょう。もしも使用する必要があると思われる場合、一度、私のような専門家に相談することをおすすめします。

定期的に期限切れのトランジェントをクリーンアップする
今回紹介しているプラグインは、マルチサイトであれば1時間おきに5サイトずつ(1日最大120のサイト)、通常のスタンドアロンのサイトであれば24時間おきに、自動的に期限切れのトランジェントをクリーンアップします。
特別な考慮が不要のため、一度導入してしまえば後は放置しておいて問題ありません。
最後に
パフォーマンス・チューニングにおいて、トランジェントを削除することは意味はあるものの、目立った効果は基本的に感じることは少ないでしょう。
参考になったら、SNSへシェアしたり、ブックマークしてくだされば励みになります。
以上、ガノー(Ganohr)でした!
コメントを書く