統合執筆環境 org-mode (Emacs Advent Calendar 22日目)


この日記は、Emacs Advent Calendarの22日目です。
Emacs Advent Calendar jp: 2010 : ATND

昨日はhitode909さんでした。 zizo.elのご紹介です – hitode909のダイアリー

さて、org-modeについては、Emacs Advent Calendarでもid:handlenameさん、id:t_rakaishiさんが素晴しい記事を書かれています。

org-modeでTODO管理 – handlename::blog

org-modeとAnythingが交差するとき,物語は始まる – r_takaishiの日記

この期に及んで、さらにorg-modeのことを書くという暴挙に出たわけですが、もともと空気読むのは得意でもないので気にせず書くことにします。

Born to be org-mode !!

このところ、メモとり、アイデア出し、などなど諸々の書きものは全てorg-modeで書いています。org-modeで書くメリットとしては、様々なフォーマットでエクスポートできるというところがあります。

さらに、以前にも書いたorg-babelを使えば、いろいろなプログラミング言語をorg-mode上で実行できるようになります。

Emacs上のマルチな実行環境、Org-babel

いろいろな言語をorg-modeで統合的に扱い、必要に応じて任意のフォーマットにエクスポート、てな感じでとても柔軟に使えることがorg-modeの魅力だと思います。

ただ、org-modeは、エクスポートするまではすでに十分すぎるほどの機能があるのですが、いざ公開しようとなると結構面倒です。 org-publishというものもあるのですが、いかんせん設定が面倒でいまだに試していません。

というわけで、今回はお手軽に公開する方法をいくつか紹介しながら、org-modeの便利機能にも触れていこうかなと思います。

org-modeでブログを書こう

お手軽に文書を公開するならば、やっぱりブログですよね。org-modeでは、ブログに投稿するのもすこぶるお手軽にできます。 ちなみにこの文章もorg-modeで書いています。

org-modeからブログに投稿するには、org2blog.elが便利です。READMEにはwordpress用と書いてますが、XML-RPCに対応したブログならどうにかしたら使えるんではないかと思います。

まずは、githubからorg2blog.el、metaweblog.elを落としてきます。

punchagan/org2blog – GitHub

ちなみに、blogger/blogspotにはorg-googleclというのがあるようですね。

rileyrg/org-googlecl – GitHub

閑話休題、以下のように.emacsあたりに書いておきます。

なお、org2blog.elはorg2blog-blog-alistに追加することで、複数のブログに対応させることもできます。

(require 'org2blog)                                                                                  

 (setq org2blog-blog-alist
       '(("Blog-name" ;ブログの名前
          :url "http://yourdomain/xmlrpc.php" ;; xmlrpc.phpのURLを書く
          :username "myname"
          :default-title "Hello"
          :default-categories ("default")
          :tags-as-categories nil)))

実際に使ってみます。まずはM-x org2blog-loginでログインして、M-x org2blog-new-entryでテンプレートを呼びだします。

この時点でorg2blogで定義されているマイナーモードが動いていて、次のようなキーバインドが使えます。

・ 下書きとして保存 C-c d
・ 公開 C-c p

編集している時のメジャーモードはorg-modeでorg2blog-modeはマイナーモードでしかありません。

つまり、ふつーのorg-modeとして使えるわけで、公開や下書きを保存しなくともローカルにファイルとして保存しておくこともできます。

僕の使い方としては、雑多なメモを.orgでdropboxに保存しておいて、まとまりそうなものはorg2blogでブログに公開、という使い方をしてます。

また、内容を確認したい時は、M-x org-export-as-html-and-open してブラウザで確認するのが便利です。下書きとして保存してプレビューなど、まどろっこしいことをせずにサクッと確認できます。

org2blogとorg-babelの連携

投稿して公開できるならどこぞのブログエディタとたいして変わりません。org-modeでブログを書けることのメリットはorg-modeの便利な機能と連携できるところにあります。

特にorg-babelとの連携はとても素晴らしいです。例えばフロー図を書きたい時は、ditaaがあります。

http://i1.wp.com/sheephead.homelinux.org/wp-content/uploads/2010/12/wpid-ditaa1.png?w=1008

Graphvizでも書いてみましょう。

http://i2.wp.com/sheephead.homelinux.org/wp-content/uploads/2010/12/wpid-Graphviz1.png?w=1008

こういった作図はわざわざ、他のアプリで作った画像を貼りつけたり、他のバッファに移動する必要すらありません。全てorg-modeの中で完結してしまいます。

また、ブログにソースコードを貼りつける時も、シンタックスハイライトはorg-modeの機能でできますし、org-babelを使えばソースコードを貼りつけた時点ですぐ実行することもできます。

対応する言語もどんどん増えていってるようですね。

Babel: Languages

org-modeをまだ使ってない方もこれを期にorg-modeでブログを書いてみると良いんではないかと思います。

org-modeでドキュメントを書こう

さて、先ほど紹介したorg2blogのgithubを見てみた方、気づいたでしょうか。READMEがorg-modeで書かれていることを!!

githubはorg-modeの記法に一部対応しているのです。そう、githubに公開している作品のドキュメントを慣れ親しんだorg-modeで書くことができるのです。

githubだけではありません。gistでも当然org-modeが使えます。

というわけで、gistでどういうふうに書けるのか試してみました。画像の表示やbegin_srcタグなど対応できていないものもありますが、簡単なドキュメントならば十分なんではないでしょうか。

gist: 723303 – GitHub

gistをもっと使いたくなってきましたね!!そんな方は拙作anything-gistなんていかがでしょうか。anything-gistはみんな大好きanythingのインターフェイスでgistを閲覧し、ローカルで変更した内容をサーバサイドにpushできる機能を付加したelispです。詳しくは以下の日記でどうぞ。

Emacs上でgistを編集して、サクッと更新するためのanything-gist.el

org-modeは止まらない

ちょっと長くなってしまいましたが、いかがだっだでしょうか。ドキュメント生成ツールとしては、Sphinx など便利なツールもありますが、Emacsで使うには、org-modeかなり分があると思います。

org-modeは積極的に開発がされていて、広大なEmacsの中においても最も勢いがある分野の一つでしょう。

しかも、org-mode自体もすでに非常に大規模なので、一息に全てを把握することは最早不可能です。これからorg-modeを始める方はTODO管理やブログ書きなど目的を絞って勉強しはじめると良いかもしれないですね。

さて、明日はkozo2さんです。楽しみ!!

The Org Mode 7 Reference Manual - Organize Your Life with GNU Emacs

著者/訳者:Carsten Dominik

出版社:Network Theory.( 2010-11-26 )

定価:¥ 1,665

Amazon価格:¥ 1,678

ペーパーバック ( 282 ページ )

ISBN-10 : 1906966087

ISBN-13 : 9781906966089


Emacsテクニックバイブル ~作業効率をカイゼンする200の技~

著者/訳者:るびきち

出版社:技術評論社( 2010-08-03 )

定価:¥ 3,002

Amazon価格:¥ 3,002

単行本(ソフトカバー) ( 384 ページ )

ISBN-10 : 4774143278

ISBN-13 : 9784774143279