WordPressを静的ページにしてアーカイブ化した

WordPressを静的ページにしてアーカイブ化した

前置き#

WordPressというシステム、オンラインエディタで書けたりアップローダも完備してたりとかなり使い勝手が良いですが、反面SQLサーバーが必要だったりしてポータビリティに欠けています。そして重い(←これはスペックのせい)

2回もドメイン移転したりサーバー変えたりして、そののたびに乗り換えようか迷っていましたが今回ようやく重い腰を上げて移行(というかアーカイブ化して乗り換え)することにしました。

あとデータベースにslimstatとかのデータが残りまくってとんでもない事になってましたからね…

WPのアーカイブ化#

はじめに#

WordPressを静的ページにするジェネレータは複数見つかりましたが、どれも古かったり僕の環境では動かなかったりしました。(PHP7.3のせい?)

そこで、ググって見つけたHTTrackを使用してまるっとコピーすることにしました。サイトの雰囲気通り結構古いツールで修正が多少必要なのでWP2Staticとかが使える方はそっちを使う事をおすすめします。

やってみる#

WinだとWinHTTrackというGUIフロントエンドがあるので便利です。

まずプロファイルを作ります

ドメインの設定など

この辺は書くまでもないですね(笑)

次オプション設定

この辺はあとでwp-contentをコピーしてくればいい話なのでやらなくてもいいかもしれません。

外部階層はデフォルトで0です。0にしておかないと外部サイトまでダウンロードしてしまいます(0にしていても直リンのバイナリなどはダウンロードされてしまうようです)

あとダウンロードが遅い場合最大転送レートを上げるといいみたいです。何も書かないと1Byte/secぐらいでダウンロードされました。

次へを押すとダウンロードが始まります。僕のブログだと3時間ぐらいかかりました。

終わったら実際に開いてみます。

意外とマトモに保存されていることがわかります。
逆にボロボロの人はこの方法は諦めたほうがいいでしょう。

修正作業#

ぱっと見完璧に保存されたように見えます。
しかしイーサネットを抜くとサムネイルが壊れました。

srcの中は変換してくれますがsrcsetの方は変換してくれないようです。
古いツールだからしょうがないですね…

sedで頑張ってみたのですが、正規表現よくわかってないので無理でした。
というわけで適当にc++のサンプルをいじってなんとかしました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//ほぼコピペ from https://programming.pc-note.net/cpp/filestream.html
#include <iostream>
#include <fstream>
#include <string>

int main(int argc, char *argv[]) //$0 filename before after
{
if (argc != 4)
return -1;
const char *fileName = argv[1];
std::string data;
{
std::fstream fs(fileName);
if (!fs)
{
std::cout << "ファイルが開けませんでした。" << std::endl;
std::cin.get();
return 0;
}
std::string buf;
std::string::size_type pos;
std::string before = std::string(argv[2]);
std::string after = std::string(argv[3]);
int line = 1,count = 0;;
while (1)
{
std::getline(fs, buf);
if (fs.eof()) //ファイル終端判定
break;
line++;
if (pos = buf.find("srcset=\"") != std::string::npos)
{
pos = buf.find(before, pos + + std::string("srcset=\"").length());
while (pos != std::string::npos)
{
buf.replace(pos, before.length(), after);
pos = buf.find(before, pos + after.length());
count++;
}
}
if(count != 0)
std::cout << "at " << line << ", count: " << count << std::endl;
count = 0;
data += buf + "\n";
}
fs.clear(); //eofフラグをクリア
fs.seekp(std::ios::beg); //ファイル位置を先頭にセット
fs << data; //書き込み
}
return 0;
}

ビルド(※この後標準入力にソースをコピペ)

1
g++ -xc++ - -o /usr/local/bin/replacer

複数のファイルの入力には対応していないのでxargsと組み合わせます。
例:

1
2
cd archives
ls *.html | xargs -tI {} replacer {} "https://haruroid.0t0.jp/blog/wp-content/uploads" "../wp-content/uploads"

これをすべてのディレクトリにやります。
indexのページ、カテゴリのページ、オーサーのページなど色々あるので*/*.htmlみたいな感じで指定して相対パスに変換していきます。

ついでに、srcsetの中身はリンクとして認識されていないのでダウンロードされていません。元のwp-contentからuploadsを手動でコピーします。

1
cp -r /var/www/blog/wp-content/uploads ./wp-content/

ここまでできたら新サイトにコピーします。
僕は他のドメインたちへのリンクが壊れるのが面倒だったのでまるごとコピーしました。

終わり#

雑ですがこれでアーカイブ化&移行終了です。

https://old.haruroid.com/haruroid.0t0.jp/blog/

後はお好みでリダイレクトを設定します。

1
2
3
4
5
6
7
8
(略)
location /haruroid.0t0.jp/blog/ {
if ($arg_p) {
return 301 https://old.haruroid.com/haruroid.0t0.jp/blog/archives/$arg_p.html;
}
error_page 404 = /redirect_blog.html;
}
(略)

これによって旧来のURL(例:https://haruroid.0t0.jp/blog/?p=1220)の番号を切り出してarchivesへリダイレクトしています。

(なんでパーマリンクを変えたのかというとそのままだとHTTrackでやりにくかった為)

一部壊れたリンクが残ったままですが一応見れるだけにはなったのでこれで終わりにします…

どうでもいいですけど静的ページめっちゃ早いですね。WPの重さが一層不快に感じます。

コメント

名前を入れてください
本文を入れてください

コメント読み込み中...

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×