2013年1月11日金曜日

org-modeのpublishingを使ってWebサイト構築

publishingの設定

org-modeはorgファイルをHTMLへ変換することができるだけではなく そのままサーバーにアップする機能まで付いている。 簡単な静的なHTMLのサイトを作る場合について調べてみたので とりあえず簡単なまとめを書いておく。

用意するディレクトリ等は次のような感じ。 

  • ソースディレクトリ: /home/hoge/mysite-src 
ここにはindex.org, xxxx.orgといったファイルを格納している。 またHTMLに必要なstyle.cssファイルやimage.jpgといったリソース類も orgファイルと同一ディレクトリに配置する。
  • 検証用のローカルディレクトリ: /home/mysite-publish
  • 本番用のWebサーバー(ftp): www.example.com

以上の内容を.emacsへ設定すると次のようになる。

(setq org-publish-project-alist
'(
;; 検証用
("local-orgfiles"
:base-directory "/home/hoge/mysite-src"
:publishing-directory "/home/hoge/mysite-publish"
:style ""
:section-numbers nil
:table-of-contents nil)
("local-resources"
:base-directory "/home/hoge/mysite-src"
:publishing-directory "/home/hoge/mysite-publish"
:base-extension "jpg\\|gif\\|png\\|css"
:publishing-function org-publish-attachment)
("local" :components ("local-orgfiles" "local-resources"))
;; 本番用
("web-orgfiles"
:base-directory "/home/hoge/mysite-src"
:publishing-directory "/ftp:hoge@www.example.com:/"
:style ""
:section-numbers nil
:table-of-contents nil)
("web-resources"
:base-directory "/home/hoge/mysite-src"
:publishing-directory "/ftp:hoge@www.example.com:/"
:base-extension "jpg\\|gif\\|png\\|css"
:publishing-function org-publish-attachment)
("website" :components ("web-orgfiles" "web-resources"))
))
ローカル用と本番用で大きく2つに設定が分かれる。
さらにそれぞれは

1. orgファイルの変換と出力
2. 必要なリソースの出力
3. 上記2つをまとめて実行

という3種類の設定を用意している。

上の色を付けた箇所が各設定である。
 local-orgfilesはorgファイルをhtmlへ変換し、検証用のローカルディレクトリへ出力する。
 local-resourcesはjpgやcss等を検証用のローカルディレクトリへコピーする。
 localは上の2つをまとめて実行する。

 web-で始まるものは本番用に対応している。

もっと本格的なディレクトリ構成にする場合、例えば画像ファイルはimagesディレクトリへ、cssファイルはcssディレクトリへと整理する場合は、org-publish-attachmentを使った定義を増やせばよい。 そして定義を書く順番には意味があり、検証用の定義を先に書くことでそちらが優先されて使われるようである。

出力方法

ショートカットはまずC-c C-eを押せば、Export/Publishのメニューが表示されるのでこれだけ覚えればあとは見れば分かる。 C-c C-e P orgファイルが属するディレクトリから対応するPublishing用の設定が選択されて実行する。今回の設定では検証用のlocalというのが実行されるはずである。 C-c C-e X 実行する定義名を指定して実行。本番用を実行したければ、こちらで名前を指定すればよい。 ちなみにorg-modeにはexportとpublishingと似たような機能があってそれぞれの責任範囲がどこまでなのか混乱してしまった。おおざっぱにいうと

export

orgフォーマットから別のフォーマットのファイルを生成する

publishing

exportを実行し、さらに生成されたファイルやリソース類をサーバーへアップする
という理解でいいように思う。 exportを単純に実行した場合はorgファイルと同じディレクトリにファイルが生成される。

しかし変数org-export-publishing-directoryを指定すれば出力先は制御可能だ。つまりローカルでHTMLの生成の確認をするだけならexportで十分な気もしてしまうが、画像ファイルやcssの扱いが煩雑になりそうだったので結局、すべてpublishingでやってしまうことにした。もっとエレガントな方法があるかもしれない。

0 件のコメント:

コメントを投稿