サイトビルダ「Ophiuchus」

サイトビルダ「Ophiuchus」について

tags:python site build utility
created:2008-02-05T20:24:24

サイトビルダ このサイトは自作したサイト構築ツール「Ophiuchus」によって運営されています。

このサイトについて

reStructuredTextに慣れてからというもの他の入力系を用いたブログでは落ち着きません。

また、いくつかのブログを試しては見ましたが、デイリー系だと自分で見てても

「あの記事はどこだっけ?」

みたいな事に陥ります。整理された構成で記事を管理したいという思いもあり、 サイト構築ツールの自作に踏み切りました。

運営が波に乗ったらこのツールは汎用化してこのサイトで公開しますね。

コンセプト

ローカルでレンダリングしきってアップロードという手法を取っています。

digraph ophiuchus2 {
subgraph cluster0 {
  label=ローカル
  ソースデータ;
  サイトデータ(ミラー);
}
subgraph cluster1 {
  label=サーバー
  サイトデータ
}
ソースデータ->サイトデータ(ミラー) [label = "レンダリング"];
サイトデータ(ミラー)->サイトデータ [label = "アップロード"];
}

この手法の特徴は大まかに2点。

  • あらゆる身近なツールを利用できる。
  • インタラクティビティを確保しにくい。

前者の特徴を利用すれば、例えばExcelで編集したCSVからグラフ描かせたりとか コンテンツ生成ツール系を活用できるでしょう。

インタラクティビティは必要なのか?というとじつはそんなに活用されていないのが現状ではないでしょうか。

トラックバックってスパムも流行りだしていますし、 勝手にリンク張ってもらった上でリファラアドレスの表示でもすれば、似た効果が得られそうでしょ?

私自身まめにレスするたちではないので、BBSとかは運営するつもりがありません。

また検索機能については、GoogleSiteMapによる通知を利用してサイト内検索を使った検索の実現を狙っています。 (まだクロールされていないので使えませんが。)

あとはコメントがつけられるくらいで十分と考えています。

このツールの特徴

  • ローカルレンダリング方式。 PyDSと同じ手法で、サーバー上には極小のCGIコード以外すべて静的コンテンツのみ取り扱う。 reStructuredTextで作成したコンテンツから、すべてのページを生成してサーバーに アップロードという形でサイトを構築する。
  • reStructuredTextで記事を作成。
  • reStructuredTextを拡張し、dot言語からの作図や、ソースのカラーリングが可能。
  • XML-RPCを用いたコンテンツ管理が可能。 1アクションで、サーバー上のファイルとローカル上のファイルの同期を取る。 また、私のところは、ダイアルアップ環境なので、通信量を最小限に抑える工夫をしている。 基本認証などをサーバー側に設定する事で、簡易なセキュリティを確保している。
  • コンテンツの保持にデータベースが不要。
  • サーバーにPythonが使えるCGI環境さえあれば稼動できる。 (共用レンタルサーバーに最適)
  • 目次の自動生成機能を実装。
  • GoogleSiteMapの自動生成とGoogleへの通知機能を実装。
  • RSS2.0の自動生成機能を実装。
  • 検索機能はあえて実装していない。 GoogleSiteMap連携のおかげでGoogleサイト内検索が使えるようになる・・・ハズ。
  • デザインはCheetahテンプレートを用いていて、 Python慣れ していればスキンカスタマイズができる。
  • ローカルでレンダリングするので、Pythonコード次第でなんでもコンテンツ作成できる。 例えばWin32モジュールを用いたExcelファイル生成とか。
  • svg->pngにbatikを導入。クオリティの高いコンバートが可能になりました。
  • DOTもbatik経由で美しいアウトプット。

このツールで用いた仕組み

CGIはいまのところ「rpc_server.cgi」のみです。 コメントポスト用にもうひとつCGIを作成する予定。

「rpc_server.cgi」はCGI経由でXML-RPCサービスを実現しているCGIです。

更新の手順

  1. XML-RPCを用いてサイトファイル群の一覧を取得。
  2. ローカルファイル群とタイムスタンプを比較。
  3. アップロードの必要なファイル群からZIPアーカイブを構築。
  4. ZIPアーカイブをXML-RPCにてサイトにポスト。
  5. そのZIPアーカイブをサイト上で展開。
  6. GoogleSiteMapのpingアドレスをアクセス。

フォルダ構成例

reStructuredTextで記述したソースが「root」フォルダ以下に配置し、 ローカルミラーファイル群が「www」フォルダ以下に配置している場合。

digraph ophiuchus1 {
rankdir=LR;
subgraph c1 {
  label=ローカルソース;
  dir1 [label=rootフォルダ];
  file1 [label="index.html.rst"];
  dir2 [label=topicsフォルダ];
  file2 [label="index.html.rst"];
}

subgraph c2 {
  label=ローカルミラー;
  dir3 [label=wwwフォルダ];
  file3 [label="index.html"];
  dir4 [label=topicsフォルダ];
  file4 [label="index.html"];
}

dir1->file1;
dir1->dir2->file2;
dir3->file3;
dir3->dir4->file4;
//file1->file3 [label="変換"];
//file2->file4 [label="変換"];
{rank=same; dir1;dir3};
{rank=same; file1;file3;dir2;dir4};
{rank=same; file2;file4};
}

このように、「.rst」付きのファイルはHTMLに変換されミラーフォルダに出力される用にしました。

当然HTML化の際リンケージは相対パスになるようにしているので、 「www」以下をブラウザで参照することでサイトプレビューができます。

いまのところ「.rst」をHTML変換か、「.tmpl」をCheetahで変換、「.svg」をbatikでpngへ変換ができます。 以下のような用途が考えらます。

  • 「hoge.html.rst」による「hoge.html」ドキュメントの生成
  • 「logo.png.svg」による「logo.png」イメージの生成
  • 「script.js.tmpl」による「script.js」ファイル生成
  • 「style.css.tmpl」による「style.css」ファイル生成

TODO

  • コメントをつける機能の実装。
  • スキンセレクタ(あればいいね)
  • このツールにいい名前をつけたい。(へび使いにしか扱えないので「へび使い座」はどうだろう?)
  • reStructuredText中にSVGドキュメントを埋め込むプラグインを作る!

Changes

  • コメントがつけられるようになりました。
    • コメントでは管理者IDは管理者専用。
    • 短時間内での連投を禁止
    • 同じ内容の連投を禁止
  • 最近の更新リストを遅延ローディングに変更
    • 本文表示が優先されるようになった。
  • 名前をつけました「Ophiuchus」です。
  • reStructuredTextプロセッサをオリジナルから rest2web に置き換え。
    • オンメモリにインデックスを持つので処理が早いですね~
  • MercurialHGベースのバージョン管理を導入。
    • バージョン管理がつくと安心ですね。
  • ローカルリポジトリとサーバーリポジトリはhgの機能で同期。
    • 以前はzipで更新ファイルを送りあってました。
    • hgのバンドルファイル交換方式は圧倒的にネット負荷が小さいですね。
  • コンテンツ内容・URLには変更ない様に置き換え。
    • せっかく検索エンジンにインデックスしてもらったので。

詳細はまだ古いままです。いずれ詳しく書きますね!