share facebook facebook2 twitter menu hatena pocket slack

2014.09.07 SUN

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

古渡 晋也

WRITTEN BY古渡 晋也

はじめに

こんにちは。インフラエンジニアレベル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

元記事はこちらです。
HexoにWordPressの記事をマイグレートする

古渡 晋也

古渡 晋也

縁があって、cloudpackにジョインしました。 JAWS-UG さいたま支部コアメンバーとしても活動しております。 cloudpackにてインフラ設計・構築・運用をしております。 HadoopやMongoDBなどいろいろ経験しております。 あと、開発もできるエンジニアです。 開発可能な言語はC, C++, C#, アセンブラ, PHP, Ruby, JavaScript, Java, Objective-Cです。