blogシステムを作成した

この記事をdel.cio.usに登録する この記事をはてなブックマークに登録する この記事をGoogleブックマークに登録する この記事をlivedoor clipに登録する

MovableTypeや WordPressや tDiaryを使ってみたけど、 どれも動的生成でブラウザ上で記事を登録するタイプだった。

動的生成とは、WebブラウザにHTMLを送るときになって初めて HTMLの中身をその場で作り出して 送信する、というシステムだ。
静的生成とは、サーバに最初から完成したHTMLの形で置いてあって、Webブラウザに送信するときには 何も作らずそのまま送信するシステムだ。

わたしは静的生成のblogシステムを探していたのだが、 あまり多くない。

blosxom を調査

blosxomは静的/動的どちらでもできるというウリだったけど、 使ってみたところ、静的生成だとプラグインが動作しなかったり、静的で使うのはあまり便利でない。 みんな動的生成で使ってるみたいだし。

しかしシンプルなblosxomは仕組みが気になったのでソースを読んでみた。 意外にいい加減な作りだとわかった。エラー処理全然してないし……。

blosxomは以下の点が気に入らなかった。

長文エントリの多い自分には使いにくいシステムだった。

自分に納得いくblogシステムは自分で作ったほうがいいだろうな… どうせならRubyの勉強も兼ねて作ってみよう。

ということで作った。

Rubyで作ったブログツール

オブジェクト指向はJavaの勉強で少しかじった程度だったのだが class実際に使ってみると、Cの構造体が関数も中に持ってるようなもんだよな……簡単だった。

ERBというテンプレートシステムには助けられた。 Rubyそのままなので覚えることも少なく、使いやすかった。

以前さわったPerlの Template Toolkit というテンプレートシステムとは雲泥の差です。 そのシステムはPerlとちがう文法を新しく覚えないと使えなくて、 とにかくまったく違うんですよ、Perlのモジュールなのになぜこんな文法がちがうんや、おまえら(Template Toolkitの作者)Perl嫌いか! と言いたくなってた。

あとRubyはPerlよりいいです。Perlは複雑なデータ構造を扱うとデリファレンスがややこしくて わけわかんなくなった。 ここにもバックスラが必要か……これを波カッコでくくれば……とか投げ出したくなったものです。 Rubyは最初から全部ポインタ(リファレンス)なんでデリファレンスなんてなくてソースがすっきり。

このblogシステムの特徴

TrackBack もコメントもないので、狭義のblogシステム、つまり「MovableTypeやWordPressに似ているシステム」には当てはまらないかもしれない。 しかし広義のblogシステム、つまり「web に log(記録)を残すツール」には当てはまると思う。

このblogシステムの問題点

長文ブログをたまに書く自分向けのblogシステムですね。

「1ファイルにすべての記事を書く」

私は Emacsユーザなので以前 ChangeLogメモを3年くらい使ってたのですが、 行頭に TAB を置くという仕様が使いにくかった。

ChangeLogメモをそれでも使っていたのは、Emacsユーザの場合 C-x 4 a ですぐ入力できるようになるのが すばらしくよかったからです。 ファイルを開く必要も、日付を書く必要もない。ものぐさにやさしい。

そこで、ChangeLogと同じようにファイルを開く必要も 日付を書く必要もなくした 新しい形式で、このブログを書いています。

以下の Emacs-Lisp関数を ~/.emacs に記述すれば、C-x T で ChangeLogメモと同じようにファイルOPEN、日付入力まで自動でやってくれます。

;; insert-current-time-string
(defun insert-current-time-string ()
  "Inserts current time string at point."
  (interactive)
  (goto-char (point-min))   ;buffer先頭に移動
  (if (= (char-after 1) 325983) (forward-char 1)) ;BOMがあった場合それをbuffer先頭から動かさないためにカーソル移動
   ;(insert (format-time-string "@@@@ %Y-%02m-%d @@@@\n\n"))  ;曜日は出力しない
  (setq insert-current-time-wday (vector '日 '月 '火 '水 '木 '金 '土))
  (insert (format "@@@@ %s %s @@@@\n\n" (format-time-string "%Y-%02m-%d") (aref insert-current-time-wday (string-to-int (format-time-string "%w"))))) ;曜日も出力する
)
(global-set-key "\C-xt" 'insert-current-time-string)
(defun open-insert-current-time-string ()
  "Open report file and Inserts current time string at point."
  (interactive)
  (find-file-other-window "c:/home/my_blog.txt")
  (insert-current-time-string)
)
(global-set-key "\C-xT" 'open-insert-current-time-string)

Web制作, 自作ソフトウェア
ブログ生成システム。使用言語Ruby

この記事をdel.cio.usに登録する この記事をはてなブックマークに登録する この記事をGoogleブックマークに登録する この記事をlivedoor clipに登録する