org-modeとblosxomでのサイト構築、あるいはorg-modeのススメ

個人的には文書書くのは markdown-mode + outline-minor-mode で満足していたし、org-mode に手を出す気はあまりしてなかったのだけど、 Emacs界隈の情報を見ているとやっぱり便利そうなので、バージョン8.0が出る頃に試しに使ってみた。 そうしたら思った以上に便利で、結局今では、日々のメモ、原稿執筆、タスク管理など、いろいろなことをorg-modeでやるようになってしまった。

最初、org-modeに手を出しにくかった(出したくなかった)大きな理由は、編集環境がほぼEmacsだけに限られてしまうということがあった。 しかしこれは org-mode を使ってみると、org-mode があまりに高機能なので、他の環境に移植するのがつらいからだ、ということが分かった。

org-modeで文章を書く

org-modeにはいろいろな機能・使い方があり、詳しくはinfoなりウェブ上の情報などを見て欲しいが、 単純に文章を書く環境として良くできているので、ここではそれにしぼって紹介したい。

アウトライン機能を簡単に使える

Emacsで outline-mode を使ってみたことがある人は、あの操作の複雑さにうんざりした人も多いと思う。

org-mode もアウトライン操作用にいろいろなキーがあるが、 とりあえず最小限、 TABS-TAB さえ覚えればなんとかなるようになっているのが良い。

これらはアウトライン展開のサイクルコマンドで、何回か押すことでアウトラインを折り畳んだり展開したりできる。 Shiftありなしの違いは、Shiftありだとアウトライン全体に影響、そうでないときはカーソルのある部分にだけ影響するという違い。

コードブロックの編集が素晴しい!

org-modeでは

(setq org-src-fontify-natively t)

と設定することで、以下のようにバッファ内のコードブロックを、 そのコード用のモードと同じ色でハイライト表示することができる。

スクリーンショット 2013-06-11 7.07.29

さらに、カーソルをコード部分にあわせ、 C-c ' するとそのコードを対象の言語モードで編集できるバッファが立ちあがる。

スクリーンショット 2013-06-11 7.11.40

これがとても便利。 これがあるだけで、技術系の人はorg-modeで文章を書く理由になるかもしれない。

なお、なんか #+BEGIN_SRC とか書くのめんどそう…、と思うかもしれないが、 これは easy template 機能によって、 <s と書いてTABを押せば補完されるようになっている!

対応できる文書要素が多い

これは僕が今まで使っていたMarkdownとの比較でしかないが、

  1. コードブロックへの言語指定
  2. コード、画像、引用などの各種ブロックへのCAPTIONなどのメタ情報の指定
  3. テーブル
  4. 定義リスト
  5. 脚注

など、文章を書くにあたって必要な要素はたいてい揃っている。

エクスポーターがわりと簡単に書ける

バージョン8.0以降で、org-modeの文章を他の形式に変換するエクスポーターがわりと簡単に定義できるようになった。

このサイトでは、 ox-blosxom というのを適当に作って使っている。

また、原稿執筆用に、 ox-inao というのも作成している。 これはMarkdown版の md2inao が有名だが、Markdownはブロックの見出しや脚注などに対応していないので、 それらに無理矢理対応している感じがある。一方、org-modeの場合はそれらにもナチュラルに対応できるので、 より自然な感じで、楽に文章を書けると思う。

このサイトの構成

ox-blosxom で .txt ファイルをエクスポートし、それを blosxom で表示している。 blosxomの設定は https://github.com/typester/unknownplace.org/tree/blosxom にある。

blosxomはだいぶ古いCGIスクリプトなので、octopress などを使おうかと思ったのだが、 HTMLのレンダリングは org-mode でやってしまうので、それをそのまま表示する blosxom が相性が良いとおもったので、blosxomを久しぶりに使うことにした。

上記repoにはpsgiファイルをいれてあるので、

BLOSXOM_CONFIG_FILE=$PWD/config.pl plackup

こんな感じのコマンドで動作させることができる。

サイト更新手順

org-publishの設定は以下のような感じで:

(setq org-publish-project-alist
      '(("blosxom"
         :base-directory "~/Dropbox/org/public/"
         :base-extension "org"
         :publishing-directory "~/Dropbox/blosxom/"
         :publishing-function org-blosxom-publish-to-txt
         :recursive t)))

これで、 C-c C-e P a すれば ~/Dropbox/org/public/ 以下の .org ファイルが全て、 ~/Dropbox/blosxom 以下に .txt ファイルとしてエクスポートされる。

それはDropbox管理なので自動でサーバに転送され、blosxomで表示できるようになる、という仕組み。

手元ではorg-modeでのpublishコマンドを叩くだけでいいので非常にお手軽である。[1]

まとめ

org-mode、とてもおすすめです。