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


# はじめに

こんにちは。インフラエンジニアレベル１の[f_prg](http://twitter.com/f_prg "f_prg")です。
今までWordPressでブログを構築し運用していたのですが
ログインのブルートフォースアタックなどセキュリティ面を考え、
Hexoでデプロイ静的ファイルのサイトに移行しようと思います。

# HexoにWordPressの記事をマイグレートする
## ブログを新規構築する
ブログを新規構築します。
既に記事を作っている場合、マイグレートすると記事が混ざりそうなので
ブログを構築してファイルを移動していきたいと思います。
新規構築のブログにWordPressの記事をマイグレートすれば、比較もしやすいと考えました。

```bash
[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](http://hexo.io/docs/migration.html "http://hexo.io/docs/migration.html")
npmのページはこちらです。
[https://www.npmjs.org/package/hexo-migrator-wordpress](https://www.npmjs.org/package/hexo-migrator-wordpress "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を実行しますと、解析してファイルが作成されます。

```bash
[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/](http://star-flare-blog.s3-website-ap-northeast-1.amazonaws.com/2014/04/29/varnish-4-0-release-party/ "http://star-flare-blog.s3-website-ap-northeast-1.amazonaws.com/2014/04/29/varnish-4-0-release-party/")


### ファイルのプロパティ
WordPressのidとcommentが入ってますね。
まあ、これはこのままで大丈夫のようです。

```markdown
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を変換させます。フォルダをそのままアップしてもよかったのですが
手動で画像の確認をしながら移動させました。

```markdown
[![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)
```

だったのを

```markdown
[![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](http://hexo.io/docs/migration.html "http://hexo.io/docs/migration.html")
[https://www.npmjs.org/package/hexo-migrator-wordpress](https://www.npmjs.org/package/hexo-migrator-wordpress "https://www.npmjs.org/package/hexo-migrator-wordpress")