WordPressの自動保存データとリビジョンデータをダイエットする

ぱくたそ段田隼人 WordPress
この記事は約11分で読めます。

備忘録_57 / wordpress_24

WordPressで投稿記事を書いているとき1分に1回、画面右上に「自動保存中」の文字が点滅し書きかけの記事を逐一保存してくれます。
また、プレビューボタンを押すと、今度はリビジョンセーブが行われ復元ポイントを作成してくれます。
この2つのシステムは別々に動いていてどちらも非常に強力な文書セーブ機能ですが、その間サーバーアクセスを受け付けなくなるという鬱陶しさと、データーベース肥大化というデメリットがあります。
100歩譲って鬱陶しさの方は我慢できるとしても、データーベースが肥大化するとサイトが重くなるという致命的な問題の方はいつまでも放置して置けません。

自動保存とリビジョンについて

WordPress公式マニュアル
リビジョン

今回、参照したマニュアルはこちらです。
もう少し、詳しい説明が欲しかった…。

自動保存中
[図_1]

[図_1]
投稿記事編集画面。

下書き保存プレビュー 公開 のいずれかのボタンを押したときに保存されるのがリビジョンです。

1分に一回、自動的に保存されるのが自動保存です。

リビジョン保存

リビジョンシステムは、各保存済み下書きまたは公開済み投稿の更新記録を保存します。「このリビジョンを復元」ボタンを押すことで、そのリビジョンを復元できます。
via:wordpress_リビジョン

リビジョン保存機能は、サイトの記事に変更が加えられた際「復元ポイント」を自動で作成し、いつでも以前の状態に戻せる機能です。Windowsでも同様の機能が実装されていますよね?あれとほぼ同じです。
リビジョンデータは「下書き保存」「プレビュー」「公開」「更新」いずれかのボタンをクリックした際に作成されます。投稿記事の編集途中その都度作成されたリビジョンデータは、1本の記事としてデータベースに記録される為、記事IDナンバーが増えていきます。

自動保存

投稿ごとの自動保存は最大一つまでとなっています。新規自動保存は、以前の自動保存投稿を上書きします。つまり60秒ごとにデータベーステーブルが肥大していくわけではない、ということです。
via:wordpress_リビジョン

自動保存機能は編集中の記事データを60秒ごとに保存する機能です。この1分間の間に1文字でも記事内容の変更があった場合、必ず自動保存が実行されます。(変更無い場合は実行されません。)
自動保存では最新バージョンを1つのみ上書きによるセーブを行っており、復元ポイントは作成されておりません。つまり、こちらの保存機能はデーターベースを圧迫しません。しかし、1分に1回という頻度行われ、その際「自動保存中」の文字が点滅しその間サーバーアクセスを受け付けなくなるという鬱陶しさに記事を書いていて、ついイラッとしますよね。

46件のリビジョン
[図_2]

[図_2]
右ツールバー画面。

投稿記事を書いている最中の画面ですが、頻繁にプレビューボタンを押す為、現在、既に46件ものリビジョンが作成されております。

記事ID
[図_3]

[図_3]

赤枠、IDの部分が記事に割り振られたページ番号です。WordPressのデフォルト設定では、このページIDがそのままパーマリンクになります。
現在までに90ページ弱のブログを公開しましたが、既に1万562件ものリビジョンが作成されています。

記事IDが連番にならない理由は、リビジョンに保存されたデーターも1本の記事としてカウントされているからです。
不要なデーターが増えると当然、データベースを圧迫します。

対策方法を考える

対策方法は幾つか考えられます。例えば、リビジョン作成の上限を制限する、或いは自動保存プログラムが実行されるインターバルを長くする事などが考えられます。しかし、ここではバッサリこの機能自体を無効にしてしまいます。

・自動保存機能が必要ない理由
私の場合、投稿記事を編集している時はプレビューしながらこまめに下書き保存していますし、席を離れる時はその都度「下書き保存」ボタンを押す癖があります。またパソコンにはUPS(無停電電源装置)を使用しているので停電等のアクシデントが起きたとしても、文書を失う心配はないです。

加えて、たいした記事内容でも無い為、書きかけの記事が消えた所で痛くも痒くも無い!

・リビジョンが必要ない理由
単純にあまり使わないです。長文記事を作成している時に何回か使った事がありますが、何故かその時はエラーが出てしまって完全に復元されませんでした。画像レイアウトを見比べているだけの時にもリビジョン保存が働いたりしてしまい、逆にあると邪魔かなとか思ってました。

加えて、たいした記事内容でも無い為、書きかけの記事が消えた所で痛くも痒くも無い!

自動保存とリビジョンの機能を無効にする

⚠️必ずバックアップを作成して下さい。

ファイルの書き換えに失敗すると、最悪の場合WordPressが立ち上がらなくなります。
ここまで頑張って作ってきた物が全て水の泡となります

自動保存とリビジョンを無効化させるにはwp-config.phpファイルに変更を書き加えます。
いつもお馴染みの [外観] → [テーマファイルエディター] → [function.php] ではありませんから注意して下さい。
通常、wp-config.phpは仮想専用サーバーにFTP/SCPクライアントを利用してファイル操作を行います。

1⃣ WinSCPを使う方法
winscp
[図_4]

[図_4]
WinSCPを使いserversman@VPSにログインした状態の画面です。

WinSCPの使い方はこちらを参照下さい。

Windowsエクスプローラー風のUIで非常に扱い易く、テキストを直接編集可能です。上部のツールバーより、
「ファイルの検索」をクリックしてサーバー内にある「wp-config.php」ファイルの場所を特定します。
「wp-config.php」ファイルを右クリックして「編集」を押します。

この様に非常に簡単にファイル操作が可能な優れ物なのですが、当サイトお布団ブログでは過去にセキュリティを強化した際に、ルート権限を持たないアカウントによるSSHでのファイル操作のパーミッションを与えない設定にしてしまいました。もしも「wp-config.php」を編集し上書きようとしても以下の様なエラーコードを掃き出し却下されます。

権限がありません
エラー コード: 3
からのエラー メッセージ: Permission denied

WinSCPではSU-によるルート昇格が出来ない為、それ以後このクライアントは使えなくなってしまいました。非常にプリミティブなやり方に回帰しますが、今回はSSHクライアントRLoginを用いVIエディターでwp-config.phpファイルに変更を加えます。

2⃣ RLoginを使う方法
Rlogin
[図_5]

[図_5]
RLoginを使いserversman@VPSにログインした状態の画面です。

Rloginの使い方はこちらを参照下さい

早速コマンドを打ち込んで行きます。

su –

・お約束のroot権限昇格です。

serversman@vpsでは、(セキュリティの観点よりバラしてしまって良いのか悩みますが)wp-config.phpファイルは、/var/www/wordpress/配下のディレクトリに存在します。以上のコマンドをコンソールに入力して下さい。

vi /var/www/wordpress/wp-config.php

・VIエディターで以下のディレクトリにあるwp-config.phpファイルを開きます。

wp-config.php
[図_6]

[図_6]
configをVIエディターで開いた画面

この様に中の設定が見られる様になります。
こちらを下の方にスクロールさせてズット一番下に近い場所に2行のプログラムを付け加えます。
(注釈2行あわせて4行)

// リビジョンの無効化と、自動保存のインターバルを1週間にする。
define('WP_POST_REVISIONS', false );
define('AUTOSAVE_INTERVAL', 604800);
// ここまで

それで、その命令文の内容ですが、こんな感じです。

1. リビジョンを無効にする。
2. 自動保存のインターバルを1週間にする。

もう一つ、書くのが後になってしまいましたが、VIエディターの操作はちょっと独特で癖があります。Windowsワードパッドの様な操作に慣れている人は戸惑うのではないでしょうか。

3⃣ Viエディタの操作コマンド

x 1文字消去 i 現在のカーソル位置に文字を挿入する
A 現在のカーソル行の最後に文字を追加する o 現在のカーソル行の次の行に行を挿入する
:q! ファイルを破棄してviを閉じる :wq ファイルを上書してviをを閉じる

過去のリビジョンデータを削除する

「wp-config.php」に設定を書き加えた時点で既に新たなリビジョンは作成されなくなっていると思いますが、過去に作られたリビジョンデータは依然残りデーターベースを圧縮し続けております。この古いリビジョンデータを消す為にWP-OptimizeというWordPressプラグインを利用します。

WP Optimize
wp-optimize
[図_7]

WP-Optimizeは、データベースの最適化と不要なデータの削除ができる32ヵ国言語対応、世界100万ユーザーに支持されるデーターベース保全プログラムの決定版です。
リビジョン、記事の下書き、スパムコメント等の不要データを一括して削除してくれます。また、予約クリーアップを設定する事により、継続的にデータベースの最適な状態を維持し続けてくれます。
他にも画像圧縮、ページキャッシュ、html/CSS/Javascript圧縮などのサーバーブースト機能がオールインワンパックになり入っています。

便利な反面、プラグインを多用し過ぎるとその副作用として当然ウェブサイトが重くなっていきます。今後、新たなリビジョンは作成されませんので、リビジョンが削除できたら常駐を外しても問題ないかもしれません。
厳密に言うと、謎仕様により時々リビジョンが作成されます。ですから時々クリーンアップは必要になります。

wp-optimize1
[図_8]

[図_8]wordpressダッシュボード画面です。管理ツールバーより、

[WP-Optimaize] →
[データーベース]をクリックします。

wp-optimize2
[図_9]

[図_9]
WP-Optimizeのコンソール画面です。

デフォルトでクリーンアップ推奨6項目に✅チェックマークがついております。

8,855個の投稿リビジョンを削除しました。

最適化完了!

Disk容量の確認
serversman@disks
[図_10]

[図_10]
ServersMan@Diskのコンソール画面

当サイトでは仮想専用サーバーにDTI社のServersMan@VPSを利用しております。
オプショナルサービスのServersMan@Diskを利用して丸ごとバックアップが取れます。

backup.tar          2022/06/06   14:45:29      1788.54 MB   ファイル
backup.tar          2022/06/08   17:27:46      1560.56 MB   ファイル

実に、228MBのディスク容量を圧縮できました!
どのVPSでも似たようなサービスを提供していると思いますので、是非この様に確かめてみて下さい。

いやいや、8,855個の投稿リビジョンを削除した割には、あまりDisk容量が増えていないではないか!と思われる人もおられるかと思いますが、実際そうですよねぇ…。あまり減っていない様にも見えます。

リビジョンは丸ごとファイル保存ではなく、差分ファイルのみを保存しています。例えば、

  • ロ、月面の大地に降り立つ!
  • ロ、月面の大地に降り立つ!

本来はアポロと入力する所、間違えてアムロと入力してしまい。その際にリビジョンが作成されました。
後に入力ミスに気が付き、訂正した場合、

データベース上には「アロ、月面の大地に降り立つ!」に加えて重複部分を除いた「」のデーターが収納されます。この「」の追加部分を差分データーと呼びます。もともとDBに負担を掛ける代わりに、Disk容量を節約する設計になっているため目に見えて占有量が減ったようには見えません。しかし、DB上ではデーターが整理されて確実にスリムになりました。
使用していてあまり実感はありませんが理屈の上ではそうなります…。
いえ、気なしかサーバーがキビキビ動いているような気がします。(錯覚)

今回は以上です。ありがとうございました。

Eyecatch Image:ぱくたそ, photo byすしぱく, model by段田隼人,土本寛子, design-ac, design by一二三ビビビ