ブログをWordPressからGhost に移行しました

テーマごと移植したので見た目としては大きな変化は無いのですが、ブログを Ghostへ 移行しました。

Ghost は Node.jsで作られたBlogシステム(CMSではない)で、ユーザとして見ると非常にシンプルなものとなっています。

Ghost
https://ghost.org/

(2013/12/21追記)
日本語公式ドキュメントが公開されたようですね。

Ghost日本語ガイド
http://docs.ghost.org/ja/
(2013/12/21追記終り)

今年の初旬に Kickstarter で記事 がupされ、私も使ってみたいと思い(少額では有りますが)支援参加していました。

すぐに目標額に達した覚えがあります。

Ghost: Just a Blogging Platform
http://www.kickstarter.com/projects/johnonolan/ghost-just-a-blogging-platform

記事投稿

投稿はMarkdown でも HTML でも記述可能です。
特に目立った機能はありませんが・・・

私個人的にはNode.js製というのが(テスト的な意味合いでも)大きいので利用しています。

やはりサーバの環境構築が大きなハードルになりますが、Ghostを使ったBlog投稿のプラットフォームが来そうな感じもしますね。

Installing Ghost & Getting Started
http://docs.ghost.org/installation/

記事投稿時点でGhostは v0.3.3です。

WordPress と同様、ThemeとPluginを外部から取り込む形式を取っています。

Theme

公式で幾つかテーマが提供されています。

http://marketplace.ghost.org/

Casper がGhostデフォルトテーマにあたります。

独自テーマの作成ですが、WordPressのテーマを作ったことの有る人ならおそらく簡単だと思うでしょう。

Casper では、大きく分けて3つのレイアウトファイルから構成されています。

default.hbs
ヘッダー・フッター共通部分レイアウト
index.hbs
トップページ、各記事(post.hbs)のループ個所レイアウト
post.hbs
記事単独レイアウト

default.hbs

ヘッダー・フッターの共通部分のレイアウトを記述します。

index.hbs

default.hbs のメインコンテンツ部分のレイアウトを記述して、各記事のpost.hbs のループを記述しますが、post.hbs とは切り離して体裁を整えることが可能です。

例えば、画像 + 記事冒頭200字程度のループなどのよくあるパターンなんかをindex.hbs 側で記述します。

post.hbs

default.hbs のメインコンテンツ部分のレイアウトを記述します。

HTMLのテンプレートエンジン

HTMLの生成にはhandlebarsというテンプレートエンジンを採用しています。

handlebars
http://handlebarsjs.com/

ヒゲは波括弧を表しているのでしょうか(笑

今回初めて使いましたがスクリプトや変数を波括弧で囲うような記述ですね。
if条件やループ処理も同様です。

Plugin

情報がすくないのと まだ私個人が試していないので詳しく書けないのですが、色々な機能を提供してくれるのだと思っています。

データベース

デフォルトで SQLite3 を利用しています。

投稿データの移行

Ghost公式でWordPressのプラグインが提供されています。

WordPress › Ghost « WordPress Plugins
http://wordpress.org/plugins/ghost/

最初データのエクスポートで空データしか出力されず、あれ?と思ったのですがしばらくしたら直っていました。

これはどんな記事投稿システムでも同じですが、独自タグで記事を書くと苦労するので、移行するかもしれない場合はその辺りを考慮しながら記事を書いたほうが良いですね。

データのインポートを行うURLは /ghost/debug/ です。
管理画面からリンクがないので最初はどうするのか分かりませんでした。

移行に際して苦労した点

元々利用していたWordPressはデフォルトで “exsample.com?p=xxx (xxxはpage_id)" という記事URLになるのですが、Ghost では基本的に?で始まるパラメータ付きでのURL を許可していないので、現時点(※)ではURLを変更せざるを得ませんでした。

(※ あくまでv0.3.3の話で、プラグインを使えば回避可能かもしれませんが・・・)

ここをどうするか悩みました。 今のところ 301リダイレクトを使って処理しています。
本体を極力触らない方が良いのは鉄則ですが、コアファイルを一部変更しています。

  • ?p=xxx => /pxxx/
  • ?page_id=yyy => /pageyyy/

もちろんWordPress でも任意でURLのパターンを決定出来るので、どんなCMSであってもURLに関してなるべくなら動的生成のパターンを避ける のが良いのかなと思いました。

Ghost全般

内部的にExpressを利用しています。
まだ始まったばかりなので、情報が少なくフォーラムで収集することが多いですね。

https://ghost.org/forum

以上、簡単にGhostを紹介しました。

なかなか気軽に導入とはならないですが、一度さわってみると面白い発見があるので試してみてはいかがでしょうか?