Posted at

HexoにWordPressの記事をマイグレートする

More than 5 years have passed since last update.


はじめに

こんにちは。インフラエンジニアレベル1のf_prgです。

今までWordPressでブログを構築し運用していたのですが

ログインのブルートフォースアタックなどセキュリティ面を考え、

Hexoでデプロイ静的ファイルのサイトに移行しようと思います。


HexoにWordPressの記事をマイグレートする


ブログを新規構築する

ブログを新規構築します。

既に記事を作っている場合、マイグレートすると記事が混ざりそうなので

ブログを構築してファイルを移動していきたいと思います。

新規構築のブログにWordPressの記事をマイグレートすれば、比較もしやすいと考えました。

[08:33:08][f_prg@mba:node-hexo-blog]# hexo init my-wp-migrate

[info] Copying data
[info] You are almost done! Don't forget to run `npm install` before you start blogging with Hexo!


WordPressのmigratorプラグインをインストールします。

hexoのドキュメントはコチラです。

http://hexo.io/docs/migration.html

npmのページはこちらです。

https://www.npmjs.org/package/hexo-migrator-wordpress

インストールは下のコマンドで実行できます。

[08:35:18][f_prg@mba:node-hexo-blog]# cd my-wp-migrate/

[08:39:01][f_prg@mba:my-wp-migrate]# npm install hexo-migrator-wordpress --save
npm http GET https://registry.npmjs.org/hexo-migrator-wordpress
npm http 304 https://registry.npmjs.org/hexo-migrator-wordpress
npm http GET https://registry.npmjs.org/xml2js/0.4.2
npm http GET https://registry.npmjs.org/async
npm http GET https://registry.npmjs.org/to-markdown/0.0.1
npm http GET https://registry.npmjs.org/request
npm http 200 https://registry.npmjs.org/async
npm http 200 https://registry.npmjs.org/request
npm http 304 https://registry.npmjs.org/to-markdown/0.0.1
npm http 200 https://registry.npmjs.org/xml2js/0.4.2
npm http GET https://registry.npmjs.org/xml2js/-/xml2js-0.4.2.tgz
npm http 200 https://registry.npmjs.org/xml2js/-/xml2js-0.4.2.tgz
npm http GET https://registry.npmjs.org/sax
npm http GET https://registry.npmjs.org/xmlbuilder
npm http 304 https://registry.npmjs.org/sax
npm http GET https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/json-stringify-safe
npm http GET https://registry.npmjs.org/mime-types
npm http GET https://registry.npmjs.org/forever-agent
npm http GET https://registry.npmjs.org/node-uuid
npm http GET https://registry.npmjs.org/form-data
npm http GET https://registry.npmjs.org/tough-cookie
npm http GET https://registry.npmjs.org/tunnel-agent
npm http GET https://registry.npmjs.org/http-signature
npm http GET https://registry.npmjs.org/oauth-sign
npm http GET https://registry.npmjs.org/hawk/1.1.1
npm http GET https://registry.npmjs.org/aws-sign2
npm http GET https://registry.npmjs.org/stringstream
npm http 304 https://registry.npmjs.org/json-stringify-safe
npm http 304 https://registry.npmjs.org/forever-agent
npm http 304 https://registry.npmjs.org/node-uuid
npm http 200 https://registry.npmjs.org/qs
npm http 304 https://registry.npmjs.org/form-data
npm http 304 https://registry.npmjs.org/tough-cookie
npm http 304 https://registry.npmjs.org/tunnel-agent
npm http 304 https://registry.npmjs.org/oauth-sign
npm http 304 https://registry.npmjs.org/http-signature
npm http 304 https://registry.npmjs.org/aws-sign2
npm http 304 https://registry.npmjs.org/stringstream
npm http 200 https://registry.npmjs.org/xmlbuilder
npm http 304 https://registry.npmjs.org/mime-types
npm http 304 https://registry.npmjs.org/hawk/1.1.1
npm http GET https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.4.3.tgz
npm http 200 https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.4.3.tgz
npm http GET https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/combined-stream
npm http 304 https://registry.npmjs.org/combined-stream
npm http 200 https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/ctype/0.5.2
npm http GET https://registry.npmjs.org/assert-plus/0.1.2
npm http GET https://registry.npmjs.org/asn1/0.1.11
npm http GET https://registry.npmjs.org/delayed-stream/0.0.5
npm http 304 https://registry.npmjs.org/assert-plus/0.1.2
npm http 304 https://registry.npmjs.org/ctype/0.5.2
npm http GET https://registry.npmjs.org/punycode
npm http 304 https://registry.npmjs.org/delayed-stream/0.0.5
npm http 304 https://registry.npmjs.org/punycode
npm http GET https://registry.npmjs.org/sntp
npm http GET https://registry.npmjs.org/hoek
npm http GET https://registry.npmjs.org/boom
npm http GET https://registry.npmjs.org/cryptiles
npm http 304 https://registry.npmjs.org/sntp
npm http 304 https://registry.npmjs.org/hoek
npm http 304 https://registry.npmjs.org/cryptiles
npm http 200 https://registry.npmjs.org/boom
npm http 304 https://registry.npmjs.org/asn1/0.1.11
npm http GET https://registry.npmjs.org/lodash-node
npm http 200 https://registry.npmjs.org/lodash-node
hexo-migrator-wordpress@0.1.1 node_modules/hexo-migrator-wordpress
├── async@0.9.0
├── to-markdown@0.0.1
├── request@2.40.0 (json-stringify-safe@5.0.0, forever-agent@0.5.2, aws-sign2@0.5.0, oauth-sign@0.3.0, stringstream@0.0.4, tunnel-agent@0.4.0, qs@1.0.2, node-uuid@1.4.1, mime-types@1.0.2, tough-cookie@0.12.1, form-data@0.1.4, hawk@1.1.1, http-signature@0.10.0)
└── xml2js@0.4.2 (sax@0.5.8, xmlbuilder@2.4.3)


wordpressからXMLをダウンロードする。


  1. 使っているwordpressの管理画面にログインする

  2. メニューのツール-->エクスポートよりXMLをダウンロードしてください。

  3. ダウンロードしたファイルを、my-wp-migrateのフォルダに置きます。


migrateコマンドを実行する

下のコマンドのmigrateを実行しますと、解析してファイルが作成されます。

[09:13:52][f_prg@mba:my-wp-migrate]# hexo migrate wordpress ./f_prg.wordpress.2014-08-16.xml 

[info] Analyzing ./f_prg.wordpress.2014-08-16.xml...
[info] Page found: 紹介
[info] Page found: About
[info] Post found:
[info] Page found:
[info] Page found:

  下書きとか一覧に出てるので割愛します。

[info] Post found:
[info] 159 posts migrated.


生成されたファイルを確認する

今回は手動で記事のファイルを移動させました。その後に改修をした作業内容を紹介します。

「Varnish 4.0 Release Partyに参加してきました。 #v4rp #v4rp_tokyo」

という記事になります。


ファイル名の変更

日本語のタイトル名からファイル名を決定しているようなので

varnish-4-0-release-partye381abe58f82e58aa0e38197e381a6e3818de381bee38197e3819fe38082-v4rp-v4rp_tokyo.md

となってますね。ちょっと使いづらいので、varnish-4-0-release-party.mdに変えます。

http://star-flare-blog.s3-website-ap-northeast-1.amazonaws.com/2014/04/29/varnish-4-0-release-party/


ファイルのプロパティ

WordPressのidとcommentが入ってますね。

まあ、これはこのままで大丈夫のようです。

title: "Varnish 4.0 Release Partyに参加してきました。 #v4rp #v4rp_tokyo"

id: 1459
comment: false
categories:
- Varnish
date: 2014-04-29 20:12:45
tags:
- AWS
- Varnish
- 勉強会


ファイルの内容

markdownの部分には特に問題はありませんでした。

もしかしたら、このファイルは上手く行ったのかもしれませんね。

ただ、画像については次の項目で独自の改修をしました。


画像の変更

画像の保存先を変えます。

_config.ymlで


_config.yml

post_asset_folder: true


と設定していますので

source/_posts/2014/04/29/varnish-4-0-release-party

というフォルダを作成して移動させました。


markdownの画像のパス

画像のパスのwp-contentを変換させます。フォルダをそのままアップしてもよかったのですが

手動で画像の確認をしながら移動させました。

[![20140429-201943.jpg](http://blog.star-flare.com/wp-content/uploads/2014/04/20140429-201943.jpg)](http://blog.star-flare.com/wp-content/uploads/2014/04/20140429-201943.jpg)

[![20140429-201953.jpg](http://blog.star-flare.com/wp-content/uploads/2014/04/20140429-201953.jpg)](http://blog.star-flare.com/wp-content/uploads/2014/04/20140429-201953.jpg)
[![20140429-202000.jpg](http://blog.star-flare.com/wp-content/uploads/2014/04/20140429-202000.jpg)](http://blog.star-flare.com/wp-content/uploads/2014/04/20140429-202000.jpg)

だったのを

[![20140429-201943.jpg](/2014/04/29/varnish-4-0-release-party/20140429-190537.jpg)](/2014/04/29/varnish-4-0-release-party/20140429-201943.jpg)

[![20140429-201943.jpg](/2014/04/29/varnish-4-0-release-party/20140429-201943.jpg)](/2014/04/29/varnish-4-0-release-party/20140429-201943.jpg)
[![20140429-201953.jpg](/2014/04/29/varnish-4-0-release-party/20140429-201953.jpg)](/2014/04/29/varnish-4-0-release-party/20140429-201953.jpg)
[![20140429-202000.jpg](/2014/04/29/varnish-4-0-release-party/20140429-202000.jpg)](/2014/04/29/varnish-4-0-release-party/20140429-202000.jpg)

としました。


まとめ

私は記事の見直しをかけて、手動で行いました。

記事のファイルを移動し、wp-contentファイルをアップロードすれば

移行にそれほど時間がかからないかもしれませんね。


参考資料・リンク

http://hexo.io/docs/migration.html

https://www.npmjs.org/package/hexo-migrator-wordpress