MovableTypeや WordPressや tDiaryを使ってみたけど、 どれも動的生成でブラウザ上で記事を登録するタイプだった。
動的生成とは、WebブラウザにHTMLを送るときになって初めて HTMLの中身をその場で作り出して
送信する、というシステムだ。
静的生成とは、サーバに最初から完成したHTMLの形で置いてあって、Webブラウザに送信するときには
何も作らずそのまま送信するシステムだ。
わたしは静的生成のblogシステムを探していたのだが、 あまり多くない。
blosxom を調査
blosxomは静的/動的どちらでもできるというウリだったけど、 使ってみたところ、静的生成だとプラグインが動作しなかったり、静的で使うのはあまり便利でない。 みんな動的生成で使ってるみたいだし。
しかしシンプルなblosxomは仕組みが気になったのでソースを読んでみた。 意外にいい加減な作りだとわかった。エラー処理全然してないし……。
blosxomは以下の点が気に入らなかった。
- 1記事1ファイルなのがイヤだ。ファイルを ちまちま作るのは私は嫌いなのだ。
- URL が coolURI にならない。 Apache httpdの mod_rewriteは使いたくない(どこでも使えるものでもないし)。
- プラグインの作りかたがよくわからなかった。
- 複数プラグインの組み合わせとかが面倒。
- デザインがうまくできない。トップページと月ごとページとカテゴリごとページに 全部同じテンプレート使うので読みにくいページになる。
- tag(1つのエントリに何種類もつけられる)に対応していない。 category(1つのエントリに一種類しかつけられない)だけ。
- 短文ブログならそれなりに便利かもしれない。自分には向いてない。
長文エントリの多い自分には使いにくいシステムだった。
自分に納得いくblogシステムは自分で作ったほうがいいだろうな… どうせならRubyの勉強も兼ねて作ってみよう。
ということで作った。
Rubyで作ったブログツール
オブジェクト指向はJavaの勉強で少しかじった程度だったのだが class実際に使ってみると、Cの構造体が関数も中に持ってるようなもんだよな……簡単だった。
ERBというテンプレートシステムには助けられた。 Rubyそのままなので覚えることも少なく、使いやすかった。
以前さわったPerlの Template Toolkit というテンプレートシステムとは雲泥の差です。 そのシステムはPerlとちがう文法を新しく覚えないと使えなくて、 とにかくまったく違うんですよ、Perlのモジュールなのになぜこんな文法がちがうんや、おまえら(Template Toolkitの作者)Perl嫌いか! と言いたくなってた。
あとRubyはPerlよりいいです。Perlは複雑なデータ構造を扱うとデリファレンスがややこしくて わけわかんなくなった。 ここにもバックスラが必要か……これを波カッコでくくれば……とか投げ出したくなったものです。 Rubyは最初から全部ポインタ(リファレンス)なんでデリファレンスなんてなくてソースがすっきり。
このblogシステムの特徴
- 静的生成 ……まずはローカルでブログ全体を作成して、それからFTPソフトなどでアップロードする。 WebサーバはCGI非対応でもOK。ローカルでRubyが動けばよい。
- コメント機能 …… ありません!はてなブックマークにリンク貼って終わり。 自サイトにコメントされたら、当たり障りのない丁寧なお返事を書かなくては……という心理的負担がある。 はてブで好き勝手に感想書いてもらうのは気楽だ。
- TrackBack機能 …… 今のところ ない。でもコレは、自分が他人にTrackBack送りたくなったときに困るかもしれない。 自サイトにはTrackBack送れないのに、相手にTrackBack送るってのも妙だしな。
- タグ機能 …… あり。ただし日本語のタグつけるときは対応する英語とあわせて設定ファイルに追加しないとならない。
- Permalink …… 当然対応です。1記事ごとにちがうURLがあって、将来にわたって変化しないURLのことです。
- CoolURI …… クールなURIは変わらないでは 「URIはルート以下にいきなり作成日がくるのがよい」と主張しています。それに従いました。
- 1ファイルにすべての記事を書く …… 記事書くごとに新規ファイル作るのは面倒なんですよね、 ファイル名つけたり、書いた中身をイチイチ見るのが。1ファイルにすべての記事を書くと、ファイル名に悩まないし、 中身はファイル内検索で調べられるし、とてもラクです。 ChangeLogメモによく似てますが、ChangeLogは行頭に TAB を置くという仕様が 長文やソースコード書くのにすごくやりにくかったので、少し違う形式を使っています。
- テンプレート …… トップページと月ごとページとタグページに全部ちがうテンプレートを使える。 それらのページで同じ要素があれば、ちがうテンプレートに同じ要素を重複して記述しなくてはならないので少し無駄ですが、 そのぶんシンプルでわかりやすくなってます。
- 画像の管理も簡単 …… その日付の記事を書いて、静的生成すると、その日付のディレクトリが自動的に掘られるので、 そこに画像を置けばいい。 記事のHTMLとその記事に表示される画像が同じディレクトリにあることになるので、ファイル管理も簡単。
- RSS対応 …… トップページ(時系列)とタグのページに RSS1.0 を出力する。
- Amazonアソシエイト対応 …… Amazonの商品番号(ASIN)さえわかれば、画像などを自動で引っぱってきてくれる。
- Markdown対応 …… いわゆるWiki記法の一種で、テキストとしても読めて、HTMLに変換できる文章形式。 はてな記法と比べると機能は少ない代わり洗練されて使いやすく見易い形式、だと思う。HTMLもそのまま書ける。
TrackBack もコメントもないので、狭義のblogシステム、つまり「MovableTypeやWordPressに似ているシステム」には当てはまらないかもしれない。 しかし広義のblogシステム、つまり「web に log(記録)を残すツール」には当てはまると思う。
このblogシステムの問題点
- 1日1記事にしなくてはならないこと。個人的には、毎日数記事も書いたりしないのでこれでいい。 もし1日に複数記事書きたくなったときは、日付を過去や未来に移して書けばいい……と思っている(その場合は日記としては使えないが)。 単なる日記として使う場合は、その日あった出来事をまとめて1つにまとめて書けばいいよね。
- 「ブログ書いたよping」には対応してない。個人的には必要ないから。 技術的な話題を書くつもりだし大勢が見たがる話題じゃないからね。
- Markdown形式で書かなくてはならない。私だけが使えればいいシステムとして開発したので、 私の好みでこうなってる。
- 記事の中で、
< > &を、< > &と書かなくてはならないことがある。Markdown使ってるせいです。 - プラグインに対応していない。汎用的なつくりではなく、自分専用・日本語専用なので一般公開しにくい。
長文ブログをたまに書く自分向けの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