一生涯はてな記法しますか?それともMarkdownしますか?
はてなダイアリー
はてなダイアリーでははてな記法
という、HTMLの簡略記法が使えます。この記法を利用することで簡単に整形された日記を書くことができます。私も6年間はてなダイアリーと、はてな記法のお世話になりました。
しかしはてな記法は、はてな独自の簡略記法なので他では使えません。従って一つの不安がよぎります。
この先もし10年、20年とブログを書き続けるとしたら、それははてな記法でいいのかと。
はてなダイアリーには別の不満もあります。次のようなものです。
Github Pages + Jekyll
そんな理由から私はGitHub PagesとJekyllを利用して、自分でブログを構築することにしたのです。この利点は次のようなものです。
- HTML簡略記法のDe-Facto StandardとなっているMarkdown記法が使える。
- テンプレート言語Liquidを使って、syntax highlight, amazonその他のタグの埋め込みができる。
- HTML整形後の文章をローカル環境で確認できる。
- githubにおいてgitによるsourceおよびblog dataの一元管理ができる。
- Jekyll-Bootstrapなどをベースに、自由なデザインでサイトを構築できる。
- Jekyllは静的サイトを構築するためサイトが軽い。
過去データの変換
しかしここで一つの問題が浮上します。それは過去にはてなで投稿した記事の取り扱いです。記事は自分の資産です。できれば同時に移管したい。自分がその一番の読者ですし。しかしそれらは当然に、はてな記法で書かれていてMarkdownへの変換が必要です。記事の数は300を超えるので手作業は現実的ではありません。
そこでRubyで適当なscriptを書いてみました。完全とは言いがたいですが、自分の記事に関してはエラーなくmarkdownへ変換できました。こうして無事、はてなにおけるすべての記事をここGithub Pagesに移管することができたのです。
現状Jekyllでは、一つの記事更新のためにすべてのファイルを変換しなければならないなどの問題もありますが、その使い勝手にはかなり満足しています。アフィリエイトもできますしね : )
hateda2mdの紹介
で、このscriptをもう少しまともな形に作りなおしてhateda2md
としてgem化しました。良かったら試してみてください。果たしてこんな所に需要があるかは分かりませんけど。
Hateda2mdとは
Hateda2md
は、はてな記法で書かれたXMLファイルから、Jekyll用のMarkdownファイルを生成するコンバータです。定義済みフィルタを使って、または自身でフィルタを定義して変換を行うことができます。
インストール
$ gem install hateda2md
使い方
はてなダイアリーのブログエクスポート機能を使って、はてなの日記データ形式
でdownloadをおこない、username.xmlファイルを取得します。そしてこのファイルを次のようにしてhateda2mdで処理します。
require "hateda2md"
mdb = HateDa::MdBuilder.new('hatena-diary.xml')
# 定義済みフィルタをセットする
mdb.set :title
mdb.set :subtitle
mdb.set :link
mdb.set :amazon
# 変換を実行する
mdb.run
# 変換後のデータを各エントリーに対応した複数のMarkdownファイルに保存する
mdb.save_to_files
本処理によりmd
ディレクトリ以下に、(各エントリではなく)各日記に対応した複数のmarkdownファイルが生成されます。そのファイル名は各日記の日付とタイトルで構成されます。ASCII以外の文字はファイル名のタイトル部分から除去されます。
すべての定義済みフィルタをセットするには、MdBuilder#pre_defined_filters
またはHateDa::Converter.pre_defined_filters
メソッドを呼びます。
# すべての定義済みフィルタを呼ぶ
filters = mdb.pre_defined_filters
# => [:title, :subtitle, :subsubtitle, :order_list, :unorder_list, :blockquote, :pre, :super_pre, :footnote, :br, :link, :hatebu, :amazon, :youtube, :image, :gist]
# すべての定義済みフィルタをセットする
filters.each { |f| mdb.set f }
mdb.run
mdb.save_to_files
定義済みフィルタのうち、:super_pre, :footnote, :hatebu, :amazon, :youtube, :gistの各フィルタは、liquid tagへの変換を行うので、対応するRuby script pluginが必要となります。
melborne.github.com/_plugins at source · melborne/melborne.github.com · GitHub
ただ、:hatebu, :youtube, :gistの各フィルタに関しては、その第2引数にfalseを渡すことで、liquid tagに代えてhtmlコードを生成させることもできます。
また、MdBuilder#filter
メソッドを使って、独自フィルタを定義することができます。次のようにします。
# はてな記法によるwikipediaタグをliquid tagに変換するフィルタを定義する
mdb.filter(/\[wikipedia:(.*?)\]/) do |md|
"{ % wikipedia #{md[1]} % }"
end
フィルタ定義のやり方はhateda2mdが依存しているgsub-filterのreadmeと、HateDa::Converterで定義しているfilterの内容を参照してください。
また、MdBuilder#run
に引数を渡すことで、特定のエントリだけを変換することができます。
# 20番目のエントリだけを変換
mdb.run(20)
# 100番から最後のエントリを変換
mdb.run(100..-1)
# 10番から20件を変換
mdb.run(10,20)
Enjoy your Blog life!
関連記事: 30分のチュートリアルでJekyllを理解する
はてなダイアリーガイドブック―ウェブログでつながる新しいコミュニティ by 水野 貴明
(追記:2012-05-06) hateda2mdのversion upに応じて記述を直しました。
(追記:2012-05-07) hateda2mdの説明を一分追加しました。
blog comments powered by Disqus