このサイトができるまで
はじめに
作ったモノ
コードの詳細は Github をご覧下さい。
使い方
jekyll の _plugin
に submodule としてでも放り込んで下さい。
org ファイルを html へ出力する際のタグのカスタマイズをしたい場合には、
_html_tags.yml
を作成しておきます(リポジトリに example を置いてあります)。
原稿となる org ファイルには、最低限
を記載しておいて下さい。これが Jekyll の Front Matter になります。
他にも #+HTML
および #+LATEX
以外の Option が書け、
downcase したのち Front Matter として使用できます。
解説(?)
解説するようなモンでもないですけれど。
org ファイルの変換
ファイルの HTML への変換には wallyqs/org-ruby を使っています。
- 利点: Emacs の org-exporter のカスタマイズを行なう必要が無い。
- 利点: jekyll に自然に組み込める
- 欠点: org-exporter での code block 実行結果の export が使えなくなる
org-exporter による「code block 実行結果の埋め込み」を使いたい場合には、 org-exporter での html 出力をカスタマイズした後に、jekyll で処理することになります。 このアプローチは org-jekyll, export blog posts from org-mode でしょう。 また、Github Pages でコンテンツを公開することを考える場合には、 plugin が使えないため、 リンク先のアプローチを取る必要があります。
以前は同様の事を行なっていたのですが、
- jekyll を動作させるサーバ上の Emacs のバージョンと手元のバージョンとの乖離
- org のファイルと html ファイルの双方をリポジトリで管理する無駄さ
から、結局 org ファイルを直接 jekyll で処理することにしました。
org-ruby の拡張(?)
最新の org-ruby では org-mode の search link を export してくれません。
そんな訳で monkey patch です。
Orgmode::HtmlOutputBuffer.inline_formatting
が割と大きな method なので、
小さな monkey patch のつもりが、ほぼコピペになってしまいました…。
任意の org ファイルを Jekyll で扱うために
Jekyll の原稿として org ファイルを使用する際の不満は、
- Jekyll の原稿として認識してもらうためには、 org ファイルに yaml で書かれた Front Matter が必要。 しかしながら、これは org としては美しくない。
- Front Matter に記述する内容は、
そもそも org ファイルに存在する内容が多い(
#+TITLE
とか)。 つまり情報が重複している。
でした。
これらの不満を解消してくれるプラグインとしては、
既に eggcaker/jekyll-org があります。
ただし、これは Post
専用なので、
Jekyll の blog 記事の範疇に無いページ( いわゆる Page
等)は対象としていません。
そんな訳で、結局自分でプラグインを書きました。
Jekyll::Utils.has_yaml_header?
の上書き
org ファイルに Front Matter 相当の情報が存在することを前提として処理、
すなわち、拡張子が .org
の場合は常に true
を返すようにします。
Jekyll::Convertible
の上書き
org
ファイルの #+TITLE
等を FRONTMATTER として扱った上で、
html に出力します。
また #+TITLE
が 2 回出力されるのを防ぐために、
org-ruby で処理する前に #+TITLE
を削除しています。
Jekyll::OrgConverter
の追加
Converter の追加は Jekyll 本家のドキュメントにもあるので、
割と簡単です。実際の処理は上書きした Jekyll::Convertible
で行なわれています。
ただ、search link を処理するために、最後にリンクを置換しています。
まとめ…?
まあ、ちゃんと動いているみたいですし、これで良いのかなぁ。
お気付きの点などございましたら、Issues へお願いします。